From 5b23f24881505ae77bf7a43d66663a7f2968b3c1 Mon Sep 17 00:00:00 2001 From: "Shawn O. Pearce" Date: Fri, 17 Apr 2009 18:43:33 -0700 Subject: Implement 'git symbolic-ref HEAD' in Python This is invoked once per project in `repo sync`. Taking it out saves about 1/114 of a second, so on a large set of projects like Android it can save up to a full second of sync time. Signed-off-by: Shawn O. Pearce --- project.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'project.py') diff --git a/project.py b/project.py index b19ab5fb..311379ca 100644 --- a/project.py +++ b/project.py @@ -237,10 +237,7 @@ class Project(object): The branch name omits the 'refs/heads/' prefix. None is returned if the project is on a detached HEAD. """ - try: - b = self.work_git.GetHead() - except GitError: - return None + b = self.work_git.GetHead() if b.startswith(R_HEADS): return b[len(R_HEADS):] return None @@ -817,9 +814,8 @@ class Project(object): kill.append(cb) if kill: - try: - old = self.bare_git.GetHead() - except GitError: + old = self.bare_git.GetHead() + if old is None: old = 'refs/heads/please_never_use_this_as_a_branch_name' try: @@ -1125,7 +1121,14 @@ class Project(object): p.Wait() def GetHead(self): - return self.symbolic_ref(HEAD) + if self._bare: + path = os.path.join(self._project.gitdir, HEAD) + else: + path = os.path.join(self._project.worktree, '.git', HEAD) + line = open(path, 'r').read() + if line.startswith('ref: '): + return line[5:-1] + return line[:-1] def SetHead(self, ref, message=None): cmdv = [] -- cgit v1.2.3-54-g00ecf