changeset 196:40edc4b814e4

Reorganize push for more symmetry with fetch
author Abderrahim Kitouni <a.kitouni@gmail.com>
date Tue, 23 Jun 2009 19:22:49 +0100
parents e09d71dc4cb4
children 4edf3e1e8197
files git_handler.py
diffstat 1 files changed, 17 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/git_handler.py	Tue Jun 23 19:20:15 2009 +0100
+++ b/git_handler.py	Tue Jun 23 19:22:49 2009 +0100
@@ -109,6 +109,8 @@
             elif not self.paths:
                 # intial cloning
                 self.update_remote_branches('default', refs)
+        else:
+            self.ui.status(_("nothing new on the server\n"))
 
         self.save_map()
 
@@ -119,12 +121,19 @@
         self.update_references()
         self.save_map()
 
-    def push(self, remote_name):
-        self.fetch(remote_name) # get and convert objects if they already exist
-        self.ui.status(_("pushing to : %s\n") % remote_name)
+    def push(self, remote):
+        self.fetch(remote) # get and convert objects if they already exist
+        self.ui.status(_("pushing to : %s\n") % remote)
         self.export_commits(False)
-        self.update_remote_references(remote_name)
-        self.upload_pack(remote_name)
+        changed_refs = self.upload_pack(remote)
+        remote_name = self.remote_name(remote)
+
+        if remote_name and changed_refs:
+            for ref, sha in changed_refs.iteritems():
+                self.ui.status("    "+ remote_name + "::" + ref + " => GIT:" + sha[0:8] + "\n")
+
+            self.update_remote_branches(remote_name, changed_refs)
+
 
     def clear(self):
         mapfile = self.repo.join(self.mapfile)
@@ -557,14 +566,6 @@
         try:
             self.ui.status(_("creating and sending data\n"))
             changed_refs = client.send_pack(path, changed, genpack)
-            remote_name = self.remote_name(remote)
-            if remote_name and changed_refs:
-                new_refs = {}
-                for ref, sha in changed_refs.iteritems():
-                    self.ui.status("    "+ remote_name + "::" + ref + " => GIT:" + sha[0:8] + "\n")
-                    new_refs[ref] = sha
-                self.git.set_remote_refs(new_refs, remote_name)
-                self.update_remote_branches(remote_name, new_refs)
         except:
             # TODO : remove try/except or do something useful here
             raise
@@ -675,10 +676,6 @@
             refs = client.fetch_pack(path, determine_wants, graphwalker, f.write, sys.stdout.write)
             f.close()
             commit()
-            if refs:
-                self.git.set_remote_refs(refs, remote_name)
-            else:
-                self.ui.status(_("nothing new on the server\n"))
             return refs
         finally:
             f.close()
@@ -698,11 +695,6 @@
             if self.repo.tagtype(tag) == 'git':
                 self.git.set_ref('refs/tags/' + tag, self.map_git_get(hex(sha)))
 
-    # Make sure there's a refs/remotes/remote_name/name
-    #           for every refs/heads/name
-    def update_remote_references(self, remote_name):
-        self.git.set_remote_refs(self.local_heads(), remote_name)
-
     def local_heads(self):
         try:
             bms = bookmarks.parse(self.repo)
@@ -768,6 +760,9 @@
             tag = '%s/%s' % (remote_name, head)
             self.repo.tag(tag, hgsha, '', True, None, None)
 
+        self.git.set_remote_refs(refs, remote_name)
+
+
     ## UTILITY FUNCTIONS
 
     def convert_git_int_mode(self, mode):