changeset 287:e08a22250fa9

Don't import git submodule files (we don't support them .. yet).
author jeremy avnet <brainsik@saucelabs.com>
date Tue, 23 Feb 2010 16:23:09 -0500
parents 0661d5721ad7
children efe9e6a9235f
files hggit/git_handler.py tests/test-git-submodules tests/test-git-submodules.out
diffstat 3 files changed, 123 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hggit/git_handler.py
+++ b/hggit/git_handler.py
@@ -771,6 +771,21 @@
         changes = self.git.object_store.tree_changes(btree, tree)
         files = {}
         for (oldfile, newfile), (oldmode, newmode), (oldsha, newsha) in changes:
+            # don't create new submodules
+            if newmode == 0160000:
+                if oldfile:
+                    # become a regular delete
+                    newfile, newmode = None, None
+                else:
+                    continue
+            # so old submodules shoudn't exist
+            if oldmode == 0160000:
+                if newfile:
+                    # become a regular add
+                    oldfile, oldmode = None, None
+                else:
+                    continue
+
             if newfile is None:
                 file = oldfile
                 delete = True
new file mode 100755
--- /dev/null
+++ b/tests/test-git-submodules
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+# Fails for some reason, need to investigate
+# "$TESTDIR/hghave" git || exit 80
+
+# bail if the user does not have dulwich
+python -c 'import dulwich, dulwich.repo' || exit 80
+
+# bail early if the user is already running git-daemon
+echo hi | nc localhost 9418 2>/dev/null && exit 80
+
+echo "[extensions]" >> $HGRCPATH
+echo "hggit=$(echo $(dirname $(dirname $0)))/hggit" >> $HGRCPATH
+echo 'hgext.graphlog =' >> $HGRCPATH
+echo 'hgext.bookmarks =' >> $HGRCPATH
+
+GIT_AUTHOR_NAME='test'; export GIT_AUTHOR_NAME
+GIT_AUTHOR_EMAIL='test@example.org'; export GIT_AUTHOR_EMAIL
+GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0000"; export GIT_AUTHOR_DATE
+GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; export GIT_COMMITTER_NAME
+GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"; export GIT_COMMITTER_EMAIL
+GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"; export GIT_COMMITTER_DATE
+
+count=10
+commit()
+{
+    GIT_AUTHOR_DATE="2007-01-01 00:00:$count +0000"
+    GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
+    git commit "$@" >/dev/null 2>/dev/null || echo "git commit error"
+    count=`expr $count + 1`
+}
+
+mkdir gitrepo1
+cd gitrepo1
+git init | python -c "import sys; print sys.stdin.read().replace('$(dirname $(pwd))/', '')"
+echo alpha > alpha
+git add alpha
+commit -m 'add alpha'
+cd ..
+
+mkdir gitsubrepo
+cd gitsubrepo
+git init | python -c "import sys; print sys.stdin.read().replace('$(dirname $(pwd))/', '')"
+echo beta > beta
+git add beta
+commit -m 'add beta'
+cd ..
+
+mkdir gitrepo2
+cd gitrepo2
+git clone ../gitrepo1 . | python -c "import sys; print sys.stdin.read().replace('$(dirname $(pwd))/', '')"
+git submodule add ../gitsubrepo subrepo | python -c "import sys; print sys.stdin.read().replace('$(dirname $(pwd))/', '')"
+git commit -m 'add subrepo'
+git rm --cached subrepo
+git rm .gitmodules
+git commit -m 'rm subrepo'
+cd ..
+
+hg clone gitrepo2 hgrepo | grep -v '^updating'
+cd hgrepo
+hg log --graph
+
+echo % we should have some bookmarks
+hg book
new file mode 100644
--- /dev/null
+++ b/tests/test-git-submodules.out
@@ -0,0 +1,44 @@
+Initialized empty Git repository in gitrepo1/.git/
+
+Initialized empty Git repository in gitsubrepo/.git/
+
+Initialized empty Git repository in gitrepo2/.git/
+
+Initialized empty Git repository in gitrepo2/subrepo/.git/
+
+[master e42b08b] add subrepo
+ 2 files changed, 4 insertions(+), 0 deletions(-)
+ create mode 100644 .gitmodules
+ create mode 160000 subrepo
+rm 'subrepo'
+rm '.gitmodules'
+[master 7e4c934] rm subrepo
+ 2 files changed, 0 insertions(+), 4 deletions(-)
+ delete mode 100644 .gitmodules
+ delete mode 160000 subrepo
+importing Hg objects into Git
+Counting objects: 7, done.
+Compressing objects:  20% (1/5)   
Compressing objects:  40% (2/5)   
Compressing objects:  60% (3/5)   
Compressing objects:  80% (4/5)   
Compressing objects: 100% (5/5)   
Compressing objects: 100% (5/5), done.
+Total 7 (delta 1), reused 0 (delta 0)
+importing Git objects into Hg
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+@  changeset:   2:954cdf1c8c82
+|  tag:         master
+|  tag:         default/master
+|  tag:         tip
+|  user:        test <test@example.org>
+|  date:        Mon Jan 01 00:00:11 2007 +0000
+|  summary:     rm subrepo
+|
+o  changeset:   1:145121c71064
+|  user:        test <test@example.org>
+|  date:        Mon Jan 01 00:00:11 2007 +0000
+|  summary:     add subrepo
+|
+o  changeset:   0:3442585be8a6
+   user:        test <test@example.org>
+   date:        Mon Jan 01 00:00:10 2007 +0000
+   summary:     add alpha
+
+% we should have some bookmarks
+ * master                    2:954cdf1c8c82