diff options
author | Shawn O. Pearce <sop@google.com> | 2009-04-17 20:32:44 -0700 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2009-04-17 21:03:45 -0700 |
commit | 0f3dd233ecaf8d145ddb33a5ef1b8d3d71ade476 (patch) | |
tree | 327212154350ab031cbd64e39c8ef93cbd9bb6b5 | |
parent | c12c360f89d4d1cc0a0ad80c4ea0785f84be1848 (diff) | |
download | git-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.py | 14 | ||||
-rw-r--r-- | project.py | 9 |
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: |
@@ -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) |