Mercurial > hg > hg-git
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