summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Contreras <felipe.contreras@gmail.com>2013-05-07 18:39:35 -0500
committerJunio C Hamano <gitster@pobox.com>2013-05-07 22:38:40 -0700
commit435f39a3e8f9dc1aab786347d4a92aee3ecef56a (patch)
tree47446fe3909cb249e6b9c950c2186be11d3ae4f4
parent3b892dc8280b3abfd10e97e1bacc8acf580980b8 (diff)
downloadgit-435f39a3e8f9dc1aab786347d4a92aee3ecef56a.tar.gz
remote-bzr: fix for disappeared revisions
It's possible that the previous tip goes away, we should not assume it's always present. Fortunately we are only using it to calculate the progress to display to the user, so only that needs to be fixed. Also, add a test that triggers this issue. Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xcontrib/remote-helpers/git-remote-bzr15
-rwxr-xr-xcontrib/remote-helpers/test-bzr.sh38
2 files changed, 49 insertions, 4 deletions
diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr
index 0ef30f8d55..3e452af1dc 100755
--- a/contrib/remote-helpers/git-remote-bzr
+++ b/contrib/remote-helpers/git-remote-bzr
@@ -282,9 +282,13 @@ def export_branch(repo, name):
branch.lock_read()
revs = branch.iter_merge_sorted_revisions(None, tip, 'exclude', 'forward')
- tip_revno = branch.revision_id_to_revno(tip)
- last_revno, _ = branch.last_revision_info()
- total = last_revno - tip_revno
+ try:
+ tip_revno = branch.revision_id_to_revno(tip)
+ last_revno, _ = branch.last_revision_info()
+ total = last_revno - tip_revno
+ except bzrlib.errors.NoSuchRevision:
+ tip_revno = 0
+ total = 0
for revid, _, seq, _ in revs:
@@ -353,7 +357,10 @@ def export_branch(repo, name):
progress = (revno - tip_revno)
if (progress % 100 == 0):
- print "progress revision %d '%s' (%d/%d)" % (revno, name, progress, total)
+ if total:
+ print "progress revision %d '%s' (%d/%d)" % (revno, name, progress, total)
+ else:
+ print "progress revision %d '%s' (%d)" % (revno, name, progress)
branch.unlock()
diff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh
index cec55f132e..d9c32f4864 100755
--- a/contrib/remote-helpers/test-bzr.sh
+++ b/contrib/remote-helpers/test-bzr.sh
@@ -300,4 +300,42 @@ test_expect_success 'proper bzr repo' '
test_cmp ../expected actual
'
+test_expect_success 'strip' '
+ # Do not imitate this style; always chdir inside a subshell instead
+ mkdir -p tmp && cd tmp &&
+ test_when_finished "cd .. && rm -rf tmp" &&
+
+ (
+ bzr init bzrrepo &&
+ cd bzrrepo &&
+
+ echo one >> content &&
+ bzr add content &&
+ bzr commit -m one &&
+
+ echo two >> content &&
+ bzr commit -m two
+ ) &&
+
+ git clone "bzr::$PWD/bzrrepo" gitrepo &&
+
+ (
+ cd bzrrepo &&
+ bzr uncommit --force &&
+
+ echo three >> content &&
+ bzr commit -m three &&
+
+ echo four >> content &&
+ bzr commit -m four &&
+ bzr log --line | sed -e "s/^[0-9]\+: //" > ../expected
+ ) &&
+
+ (cd gitrepo &&
+ git fetch &&
+ git log --format="%an %ad %s" --date=short origin/master > ../actual) &&
+
+ test_cmp expected actual
+'
+
test_done