changeset 119:70381c36c113

dulwich: initialise ctree in each iteration, fixes issue16.
author Dmitriy Taychenachev <dimichxp@gmail.com>
date Tue, 19 May 2009 17:17:38 +0900
parents b3be536e3f50
children 35ad13185e60
files dulwich/repo.py tests/test-tree-decomposition tests/test-tree-decomposition.out
diffstat 3 files changed, 74 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/dulwich/repo.py	Mon May 11 16:03:57 2009 -0700
+++ b/dulwich/repo.py	Tue May 19 17:17:38 2009 +0900
@@ -424,7 +424,6 @@
             basefiles = set()
             changes = list()
             csha = None
-            ctree = None
             cmode = None
             if basetree:
                 for (bmode, bname, bsha) in basetree.entries():
@@ -438,6 +437,7 @@
                         if isinstance (bobj, Blob):
                             changes.append (prefix + bname)
                         elif isinstance(bobj, Tree):
+                            ctree = None
                             if csha:
                                 ctree = self.get_object(csha)
                             changes.extend(filenames(bobj,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-tree-decomposition	Tue May 19 17:17:38 2009 +0900
@@ -0,0 +1,55 @@
+#!/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
+
+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 gitrepo
+cd gitrepo
+git init | python -c "import sys; print sys.stdin.read().replace('$(dirname $(pwd))/', '')"
+
+mkdir d1
+touch d1/f1 d1/f2
+git add d1/f1 d1/f2
+git commit -m initial
+
+mkdir d2
+git mv d1/f2 d2/f2
+git commit -m 'rename'
+
+# 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 'adds: {file_adds}\ndels: {file_dels}\n'
+
+cd ..
+kill `cat gitdaemon.pid`
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-tree-decomposition.out	Tue May 19 17:17:38 2009 +0900
@@ -0,0 +1,18 @@
+Initialized empty Git repository in gitrepo/.git/
+
+[master (root-commit) 60fd61f] initial
+ 0 files changed, 0 insertions(+), 0 deletions(-)
+ create mode 100644 d1/f1
+ create mode 100644 d1/f2
+[master a2e8665] rename
+ 1 files changed, 0 insertions(+), 0 deletions(-)
+ rename {d1 => d2}/f2 (100%)
+fetching from : origin
+exporting git objects
+Counting objects: 8, done.
+Compressing objects:  25% (1/4)   
Compressing objects:  50% (2/4)   
Compressing objects:  75% (3/4)   
Compressing objects: 100% (4/4)   
Compressing objects: 100% (4/4), done.
+Total 8 (delta 0), reused 0 (delta 0)
+importing Git objects into Hg
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+adds: d2/f2
+dels: d1/f2