changeset 397:60d181f9ecc3

Make pull results more like hg pulls. Returns the number of changed heads (refs). Uses the same "no changes found" message.
author Brendan Cully <brendan@kublai.com>
date Wed, 18 May 2011 15:12:32 -0700
parents de0b2661032f
children 50c8d033638b
files hggit/git_handler.py hggit/hgrepo.py
diffstat 2 files changed, 16 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/hggit/git_handler.py
+++ b/hggit/git_handler.py
@@ -101,6 +101,7 @@
         refs = self.fetch_pack(remote, heads)
         remote_name = self.remote_name(remote)
 
+        oldrefs = self.git.get_refs()
         if refs:
             self.import_git_objects(remote_name, refs)
             self.import_tags(refs)
@@ -116,11 +117,23 @@
                               lambda : None)()
                 if bms:
                     bookmarks.setcurrent(self.repo, bms[0])
-        else:
-            self.ui.status(_("nothing new on the server\n"))
+
+        def remoteref(ref):
+            rn = remote_name or 'default'
+            if ref.startswith('refs/tags/'):
+                return ref
+            return 'refs/remotes/' + rn + ref[10:]
+
+        modheads = set([refs[k] for k in refs if k != 'HEAD'
+                        and refs[k] != oldrefs.get(remoteref(k))])
+
+        if not modheads:
+            self.ui.status(_("no changes found\n"))
 
         self.save_map()
 
+        return len(modheads)
+
     def export_commits(self):
         try:
             self.export_git_objects()
--- a/hggit/hgrepo.py
+++ b/hggit/hgrepo.py
@@ -11,7 +11,7 @@
         def pull(self, remote, heads=None, force=False):
             if isinstance(remote, gitrepo):
                 git = GitHandler(self, self.ui)
-                git.fetch(remote.path, heads)
+                return git.fetch(remote.path, heads)
             else: #pragma: no cover
                 return super(hgrepo, self).pull(remote, heads, force)