From 666d534636d262cbfd971509dd0f0be0cddb2e11 Mon Sep 17 00:00:00 2001 From: Conley Owens Date: Thu, 1 May 2014 13:09:57 -0700 Subject: [PATCH] Ensure HEAD is correct when skipping remote fetch A recent optimization (2fb6466f795eb30c1dfa598501f5b5d2981e6a5f) skips performing a remote fetch if we already know we have the sha1 we want. However, that optimization skipped initialization steps that ensure HEAD points to the correct sha1. This change makes sure not to skip those steps. Here is an example of how to test this change: """"""""" url= branch1= branch2= project= repo init -u $url -b $branch1 --mirror repo sync $project first=$(cd $project.git; git rev-parse HEAD) repo init -b $branch2 repo sync $project second=$(cd platform/build.git; git rev-parse HEAD) if [[ $first == $second ]] then echo 'problem!' else echo 'no problem!' fi """"""""" --- project.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/project.py b/project.py index 22184578..127176e5 100644 --- a/project.py +++ b/project.py @@ -1103,17 +1103,12 @@ class Project(object): elif self.manifest.default.sync_c: current_branch_only = True - is_sha1 = False - if ID_RE.match(self.revisionExpr) is not None: - is_sha1 = True - if is_sha1 and self._CheckForSha1(): - # Don't need to fetch since we already have this revision - return True - - if not self._RemoteFetch(initial=is_new, quiet=quiet, alt_dir=alt_dir, - current_branch_only=current_branch_only, - no_tags=no_tags): - return False + has_sha1 = ID_RE.match(self.revisionExpr) and self._CheckForSha1() + if (not has_sha1 #Need to fetch since we don't already have this revision + and not self._RemoteFetch(initial=is_new, quiet=quiet, alt_dir=alt_dir, + current_branch_only=current_branch_only, + no_tags=no_tags)): + return False if self.worktree: self._InitMRef()