# HG changeset patch # User Dmitriy Taychenachev <dimichxp@gmail.com> # Date 1242739291 -32400 # Tue May 19 22:21:31 2009 +0900 # Node ID 76a0e1ee7cf76bbbc2f489fd16b269702665645e # Parent 0c94e860a0edf810802fb9575022dc0b3e1182a9 don't fail while exporting commit with empty working tree. +test. diff --git a/git_handler.py b/git_handler.py --- a/git_handler.py +++ b/git_handler.py @@ -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 = {} diff --git a/tests/test-empty-working-tree b/tests/test-empty-working-tree new file mode 100755 --- /dev/null +++ b/tests/test-empty-working-tree @@ -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` diff --git a/tests/test-empty-working-tree.out b/tests/test-empty-working-tree.out new file mode 100644 --- /dev/null +++ b/tests/test-empty-working-tree.out @@ -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