changeset 122:76a0e1ee7cf7

don't fail while exporting commit with empty working tree. +test.
author Dmitriy Taychenachev <dimichxp@gmail.com>
date Tue, 19 May 2009 22:21:31 +0900
parents 0c94e860a0ed
children 695a90e72e4f
files git_handler.py tests/test-empty-working-tree tests/test-empty-working-tree.out
diffstat 3 files changed, 66 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/git_handler.py	Tue May 19 21:58:06 2009 +0900
+++ b/git_handler.py	Tue May 19 22:21:31 2009 +0900
@@ -294,12 +294,17 @@
                     trees['/'] = []
                 trees['/'].append(fileentry)
 
-        # sort by tree depth, so we write the deepest trees first
         dirs = trees.keys()
-        dirs.sort(lambda a, b: len(b.split('/'))-len(a.split('/')))
-        dirs.remove('/')
-        dirs.append('/')
-        
+        if dirs:
+            # sort by tree depth, so we write the deepest trees first
+            dirs.sort(lambda a, b: len(b.split('/'))-len(a.split('/')))
+            dirs.remove('/')
+            dirs.append('/')
+        else:
+            # manifest is empty => make empty root tree
+            trees['/'] = []
+            dirs = ['/']
+
         # write all the trees
         tree_sha = None
         tree_shas = {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-empty-working-tree	Tue May 19 22:21:31 2009 +0900
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# Fails for some reason, need to investigate
+# "$TESTDIR/hghave" git || exit 80
+
+# bail early if the user is already running git-daemon
+echo hi | nc localhost 9418 && exit 80
+
+echo "[extensions]" >> $HGRCPATH
+echo "hggit=$(echo $(dirname $(dirname $0)))" >> $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
+
+mkdir gitrepo
+cd gitrepo
+git init | python -c "import sys; print sys.stdin.read().replace('$(dirname $(pwd))/', '')"
+
+git commit --allow-empty -m empty
+
+# dulwich does not presently support local git repos, workaround
+cd ..
+git daemon --base-path="$(pwd)"\
+ --listen=localhost\
+ --export-all\
+  --pid-file=gitdaemon.pid \
+ --detach --reuseaddr
+
+hg gclone git://localhost/gitrepo hgrepo
+cd hgrepo
+hg log -r tip --template 'files: {files}\n'
+
+hg gclear
+hg gexport
+
+cd ..
+kill `cat gitdaemon.pid`
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-empty-working-tree.out	Tue May 19 22:21:31 2009 +0900
@@ -0,0 +1,14 @@
+Initialized empty Git repository in gitrepo/.git/
+
+[master (root-commit) 6782568] empty
+fetching from : origin
+exporting git objects
+Counting objects: 2, done.
+Total 2 (delta 0), reused 0 (delta 0)
+importing Git objects into Hg
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+files: 
+clearing out the git cache data
+exporting git objects
+at: 0/1
+converting revision 0