summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShawn O. Pearce <sop@google.com>2009-04-17 20:32:44 -0700
committerShawn O. Pearce <sop@google.com>2009-04-17 21:03:45 -0700
commit0f3dd233ecaf8d145ddb33a5ef1b8d3d71ade476 (patch)
tree327212154350ab031cbd64e39c8ef93cbd9bb6b5
parentc12c360f89d4d1cc0a0ad80c4ea0785f84be1848 (diff)
downloadgit-repo-0f3dd233ecaf8d145ddb33a5ef1b8d3d71ade476.tar.gz
Avoid unnecessary git symbolic-ref calls during repo sync
If the m/BRANCH ref is already pointing at the value set in the manifest there is no reason to set it again. Leave it alone, thus saving a full fork+exec call. Signed-off-by: Shawn O. Pearce <sop@google.com>
-rw-r--r--git_refs.py14
-rw-r--r--project.py9
2 files changed, 18 insertions, 5 deletions
diff --git a/git_refs.py b/git_refs.py
index eefa2abe..b91abc28 100644
--- a/git_refs.py
+++ b/git_refs.py
@@ -31,8 +31,7 @@ class GitRefs(object):
31 31
32 @property 32 @property
33 def all(self): 33 def all(self):
34 if self._phyref is None or self._NeedUpdate(): 34 self._EnsureLoaded()
35 self._LoadAll()
36 return self._phyref 35 return self._phyref
37 36
38 def get(self, name): 37 def get(self, name):
@@ -52,6 +51,17 @@ class GitRefs(object):
52 if name in self._mtime: 51 if name in self._mtime:
53 del self._mtime[name] 52 del self._mtime[name]
54 53
54 def symref(self, name):
55 try:
56 self._EnsureLoaded()
57 return self._symref[name]
58 except KeyError:
59 return ''
60
61 def _EnsureLoaded(self):
62 if self._phyref is None or self._NeedUpdate():
63 self._LoadAll()
64
55 def _NeedUpdate(self): 65 def _NeedUpdate(self):
56 for name, mtime in self._mtime.iteritems(): 66 for name, mtime in self._mtime.iteritems():
57 try: 67 try:
diff --git a/project.py b/project.py
index 9f9cf7bf..09a768fb 100644
--- a/project.py
+++ b/project.py
@@ -997,14 +997,17 @@ class Project(object):
997 if self.manifest.branch: 997 if self.manifest.branch:
998 msg = 'manifest set to %s' % self.revision 998 msg = 'manifest set to %s' % self.revision
999 ref = R_M + self.manifest.branch 999 ref = R_M + self.manifest.branch
1000 cur = self.bare_ref.symref(ref)
1000 1001
1001 if IsId(self.revision): 1002 if IsId(self.revision):
1002 dst = self.revision + '^0' 1003 if cur != '' or self.bare_ref.get(ref) != self.revision:
1003 self.bare_git.UpdateRef(ref, dst, message = msg, detach = True) 1004 dst = self.revision + '^0'
1005 self.bare_git.UpdateRef(ref, dst, message = msg, detach = True)
1004 else: 1006 else:
1005 remote = self.GetRemote(self.remote.name) 1007 remote = self.GetRemote(self.remote.name)
1006 dst = remote.ToLocal(self.revision) 1008 dst = remote.ToLocal(self.revision)
1007 self.bare_git.symbolic_ref('-m', msg, ref, dst) 1009 if cur != dst:
1010 self.bare_git.symbolic_ref('-m', msg, ref, dst)
1008 1011
1009 def _InitMirrorHead(self): 1012 def _InitMirrorHead(self):
1010 dst = self.GetRemote(self.remote.name).ToLocal(self.revision) 1013 dst = self.GetRemote(self.remote.name).ToLocal(self.revision)