Detach branch even when already on the latest revision using sync -d

This patch fixes repo behaviour when running sync -d with unmodified
topic branches.

Prior to this patch sync -d would see the latest revision is already
checked out, thus staying on the branch. Since "-d" means detach we
should follow git's behaviour and actually detach from the branch in
that case.

Basic test case - after a fresh repo init + sync -
        * repo start --all testdetach
        * repo sync -d
        * repo status
-> status shows active topic branch "testdetach",
   should show :
nothing to commit (working directory clean)

Change-Id: Ic1351e6b5721b76557a51ab09f9dd42c38a4b415
This commit is contained in:
Florian Vallee 2012-06-07 17:11:42 +02:00 committed by Shawn O. Pearce
parent 5e57234ec6
commit 7cf1b36bcd

View File

@ -1044,12 +1044,15 @@ class Project(object):
if head == revid: if head == revid:
# No changes; don't do anything further. # No changes; don't do anything further.
# Except if the head needs to be detached
# #
return if not syncbuf.detach_head:
return
else:
lost = self._revlist(not_rev(revid), HEAD)
if lost:
syncbuf.info(self, "discarding %d commits", len(lost))
lost = self._revlist(not_rev(revid), HEAD)
if lost:
syncbuf.info(self, "discarding %d commits", len(lost))
try: try:
self._Checkout(revid, quiet=True) self._Checkout(revid, quiet=True)
except GitError, e: except GitError, e: