summaryrefslogtreecommitdiff
path: root/exporters/darcs/x2d
diff options
context:
space:
mode:
Diffstat (limited to 'exporters/darcs/x2d')
-rwxr-xr-xexporters/darcs/x2d121
1 files changed, 121 insertions, 0 deletions
diff --git a/exporters/darcs/x2d b/exporters/darcs/x2d
new file mode 100755
index 0000000..0344e13
--- /dev/null
+++ b/exporters/darcs/x2d
@@ -0,0 +1,121 @@
+#!/bin/sh
+#
+# x2d - convert git, bzr or hg repos to darcs using fast-export
+#
+# Copyright (c) 2008 by Miklos Vajna <vmiklos@frugalware.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+#
+
+usage()
+{
+ echo "Usage: x2d -f format repo"
+}
+
+die()
+{
+ echo "$@"
+ usage
+ exit 1
+}
+
+check_up_to_date()
+{
+ upstreamnum=$(darcs show repo|grep 'Num Patches'|sed 's/.*: //')
+ if [ "$upstreamnum" = "$(cd $origin; eval $*)" ]; then
+ echo "No remote changes to pull!"
+ exit 0
+ fi
+}
+
+case $1 in
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ -f)
+ format="$2"
+ shift 2
+ ;;
+esac
+
+[ -n "$format" ] || die "Source format is not given!"
+
+case $format in
+ git|bzr|hg)
+ ;;
+ *)
+ die "The requested source format is not yet supported!"
+ ;;
+esac
+
+origin="$1"
+shift 1
+
+[ -d "$origin" ] || die "Source repo does not exist!"
+
+# convert to abspath
+cd $origin
+origin=$(pwd)
+
+dmark="$origin.darcs/_darcs/fast-import/dfe-marks"
+fmark="$origin.darcs/_darcs/fast-import/ffi-marks"
+
+mkdir -p $origin.darcs
+cd $origin.darcs
+
+common_opts="--logfile $origin.darcs/_darcs/fast-import/log"
+pypath="/$(python -c 'from distutils import sysconfig; print sysconfig.get_python_lib()[1:]')/"
+
+if [ ! -f $dmark ]; then
+ darcs init
+ mkdir -p _darcs/fast-import
+ case $format in
+ git)
+ (cd $origin; git fast-export --export-marks=$fmark HEAD) | \
+ darcs-fast-import --export-marks=$dmark $common_opts
+ ;;
+ bzr)
+ (cd $origin; bzr fast-export \
+ --export-marks=$fmark . ) | darcs-fast-import --export-marks=$dmark $common_opts
+ ;;
+ hg)
+ (cd $origin; $pypath/bzrlib/plugins/fastimport/exporters/hg-fast-export.py -r . ) | \
+ darcs-fast-import --export-marks=$dmark $common_opts
+ esac
+else
+ case $format in
+ git)
+ check_up_to_date "git rev-list HEAD |wc -l"
+ (cd $origin; git fast-export --export-marks=$fmark --import-marks=$fmark HEAD) | \
+ darcs-fast-import --export-marks=$dmark --import-marks=$dmark $common_opts
+ ;;
+ bzr)
+ # bzr revno is not good here, because at merges
+ # it produces less revision than the number we
+ # have in darcs
+ check_up_to_date "bzr log|grep -c revno:"
+ (cd $origin; bzr fast-export \
+ --export-marks=$fmark --import-marks=$fmark . ) | \
+ darcs-fast-import --export-marks=$dmark --import-marks=$dmark $common_opts
+ ;;
+ hg)
+ check_up_to_date 'echo $(($(hg tip --template "{rev}")+1))'
+ (cd $origin; $pypath/bzrlib/plugins/fastimport/exporters/hg-fast-export.py -r . ) | \
+ darcs-fast-import --export-marks=$dmark --import-marks=$dmark $common_opts
+ ;;
+ esac
+fi