changeset 592:163c452531cf

push: add more output about what was added (issue #64) l33t pointed out that currently, Hg-Git doesn't provide any confirmation that a push was successful other than the exit code. Normal Mercurial provides a couple other messages followed by "added X changesets with Y changes to Z files". After this change, Hg-Git will provide much more similar output. It's not identical, as the underlying model is substantially different, but the concept is the same. The main message is "added X commits with Y trees and Z blobs". This change doesn't affect the output of what references/branches were touched. That will be addressed in a subsequent commit. Dulwich doesn't provide an easy hook to get the information needed for this output. Instead of passing generate_pack_contents as the pack generator function to send_pack, I pass a custom function that determines the "missing" objects, stores the counts, and then calls generate_pack_contents (which then will determine the "missing" objects again. The new expected output: searching for changes # unless quiet true <N> commits found # if verbose true list of commits: # if debugflag true and at least one commit found <each hash> # if debugflag true and at least one commit found adding objects # if at least one commit found unless quiet true added <N> commits with <N> trees and <N> blobs # if at least one object unless # quiet true https://bitbucket.org/durin42/hg-git/issue/64/push-confirmation
author David M. Carr <david@carrclan.us>
date Sun, 06 Jan 2013 01:46:57 -0500
parents 2320ab6ada36
children a6b7ad535244
files hggit/git_handler.py tests/test-conflict-1.t tests/test-conflict-2.t tests/test-convergedmerge.t tests/test-empty-working-tree.t tests/test-encoding.t tests/test-file-removal.t tests/test-git-tags.t tests/test-hg-author.t tests/test-hg-branch.t tests/test-hg-tags.t tests/test-merge.t tests/test-octopus.t tests/test-push.t tests/test-subrepos.t tests/test-tree-decomposition.t
diffstat 16 files changed, 75 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/hggit/git_handler.py
+++ b/hggit/git_handler.py
@@ -871,16 +871,40 @@
     def upload_pack(self, remote, revs, force):
         client, path = self.get_transport_and_path(remote)
         old_refs = {}
+        change_totals = {}
+
         def changed(refs):
+            self.ui.status(_("searching for changes\n"))
             old_refs.update(refs)
             to_push = revs or set(self.local_heads().values() + self.tags.values())
             return self.get_changed_refs(refs, to_push, force)
 
-        genpack = self.git.object_store.generate_pack_contents
+        def genpack(have, want):
+            commits = []
+            for mo in self.git.object_store.find_missing_objects(have, want):
+                (sha, name) = mo
+                o = self.git.object_store[sha]
+                t = type(o)
+                change_totals[t] = change_totals.get(t, 0) + 1
+                if isinstance(o, Commit):
+                    commits.append(sha)
+            commit_count = len(commits)
+            self.ui.note(_("%d commits found\n") % commit_count)
+            if commit_count > 0:
+                self.ui.debug(_("list of commits:\n"))
+                for commit in commits:
+                    self.ui.debug("%s\n" % commit)
+                self.ui.status(_("adding objects\n"))
+            return self.git.object_store.generate_pack_contents(have, want)
+
         try:
-            self.ui.status(_("searching for changes\n"))
-            self.ui.note(_("creating and sending data\n"))
             new_refs = client.send_pack(path, changed, genpack)
+            if len(change_totals) > 0:
+                self.ui.status(_("added %d commits with %d trees"
+                                 " and %d blobs\n") %
+                               (change_totals.get(Commit, 0),
+                                change_totals.get(Tree, 0),
+                                change_totals.get(Blob, 0)))
             return old_refs, new_refs
         except (HangupException, GitProtocolError), e:
             raise hgutil.Abort(_("git remote error: ") + str(e))
--- a/tests/test-conflict-1.t
+++ b/tests/test-conflict-1.t
@@ -50,6 +50,8 @@
   $ hg push -r master ../gitrepo
   pushing to ../gitrepo
   searching for changes
+  adding objects
+  added 4 commits with 3 trees and 3 blobs
   $ cd ..
 
   $ hg clone gitrepo hgrepo2 | grep -v '^updating'
--- a/tests/test-conflict-2.t
+++ b/tests/test-conflict-2.t
@@ -50,6 +50,8 @@
   $ hg push -r master ../gitrepo
   pushing to ../gitrepo
   searching for changes
+  adding objects
+  added 4 commits with 3 trees and 3 blobs
   $ cd ..
 
   $ hg clone gitrepo hgrepo2 | grep -v '^updating'
--- a/tests/test-convergedmerge.t
+++ b/tests/test-convergedmerge.t
@@ -51,6 +51,8 @@
   $ hg push -r master ../gitrepo
   pushing to ../gitrepo
   searching for changes
+  adding objects
+  added 5 commits with 3 trees and 3 blobs
   $ cd ..
 
   $ hg clone gitrepo hgrepo2 | grep -v '^updating'
--- a/tests/test-empty-working-tree.t
+++ b/tests/test-empty-working-tree.t
@@ -22,6 +22,8 @@
   $ hg push ../gitrepo2
   pushing to ../gitrepo2
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 0 blobs
   $ cd ..
   $ git --git-dir=gitrepo2 log --pretty=medium
   commit 678256865a8c85ae925bf834369264193c88f8de
--- a/tests/test-encoding.t
+++ b/tests/test-encoding.t
@@ -94,6 +94,8 @@
   $ hg push ../gitrepo2
   pushing to ../gitrepo2
   searching for changes
+  adding objects
+  added 4 commits with 4 trees and 4 blobs
 
   $ cd ..
 Latin1 commit messages started being automatically converted to UTF-8 in
--- a/tests/test-file-removal.t
+++ b/tests/test-file-removal.t
@@ -75,6 +75,8 @@
   $ hg push ../gitrepo2
   pushing to ../gitrepo2
   searching for changes
+  adding objects
+  added 5 commits with 6 trees and 3 blobs
 
   $ cd ..
   $ git --git-dir=gitrepo2 log --pretty=medium
--- a/tests/test-git-tags.t
+++ b/tests/test-git-tags.t
@@ -41,5 +41,7 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ cd ..
--- a/tests/test-hg-author.t
+++ b/tests/test-hg-author.t
@@ -24,12 +24,16 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ echo gamma >> beta
   $ fn_hg_commit -u "test <test@example.com> (comment)" -m 'modify beta'
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ echo gamma > gamma
   $ hg add gamma
@@ -37,6 +41,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ echo delta > delta
   $ hg add delta
@@ -44,6 +50,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ echo epsilon > epsilon
   $ hg add epsilon
@@ -51,6 +59,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ echo zeta > zeta
   $ hg add zeta
@@ -58,6 +68,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ echo eta > eta
   $ hg add eta
@@ -65,6 +77,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ echo theta > theta
   $ hg add theta
@@ -72,6 +86,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ hg log --graph | egrep -v ': *(not-master|master)'
   @  changeset:   8:d3c51ce68cfd
--- a/tests/test-hg-branch.t
+++ b/tests/test-hg-branch.t
@@ -23,6 +23,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 0 blobs
 
   $ hg branch gamma | grep -v 'permanent and global'
   marked working directory as branch gamma
@@ -30,6 +32,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 0 blobs
 
   $ hg log --graph | egrep -v ': *(not-master|master)'
   @  changeset:   2:05aed681ccb3
--- a/tests/test-hg-tags.t
+++ b/tests/test-hg-tags.t
@@ -22,6 +22,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ hg log --graph | egrep -v ': *(not-master|master)'
   @  changeset:   1:d529e9229f6d
--- a/tests/test-merge.t
+++ b/tests/test-merge.t
@@ -42,6 +42,8 @@
   $ hg push ../gitrepo2
   pushing to ../gitrepo2
   searching for changes
+  adding objects
+  added 4 commits with 4 trees and 3 blobs
 
   $ cd ..
 git log in repo pushed from hg
--- a/tests/test-octopus.t
+++ b/tests/test-octopus.t
@@ -69,6 +69,8 @@
   $ hg push ../gitrepo2
   pushing to ../gitrepo2
   searching for changes
+  adding objects
+  added 5 commits with 5 trees and 4 blobs
   $ cd ..
 
   $ git --git-dir=gitrepo2 log --pretty=medium | sed s/\\.\\.\\.//g
--- a/tests/test-push.t
+++ b/tests/test-push.t
@@ -29,6 +29,8 @@
   $ hg push -r beta
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
   $ cd ..
 
@@ -100,6 +102,8 @@
   $ hg push -fr master
   pushing to $TESTTMP/gitrepo
   searching for changes
+  adding objects
+  added 1 commits with 1 trees and 1 blobs
 
 this should fail, no changes to push
 The exit code for this was broken in Mercurial (incorrectly returning 0) until
--- a/tests/test-subrepos.t
+++ b/tests/test-subrepos.t
@@ -72,6 +72,8 @@
   $ hg push
   pushing to $TESTTMP/gitrepo1
   searching for changes
+  adding objects
+  added 1 commits with 2 trees and 1 blobs
   $ cd ..
   $ cd gitrepo1
 there shall be two gitlink entries, with values matching that in .hgsubstate
--- a/tests/test-tree-decomposition.t
+++ b/tests/test-tree-decomposition.t
@@ -41,6 +41,8 @@
   $ hg push ../gitrepo2
   pushing to ../gitrepo2
   searching for changes
+  adding objects
+  added 3 commits with 6 trees and 3 blobs
   $ cd ..
 
   $ git --git-dir=gitrepo2 log --pretty=medium