Explorar o código

Add 'repo sync -d' to detach projects from their current topic

The -d flag moves the project back to a detached HEAD state,
matching what is listed in the manifest.  This can be useful to
set a client to something stable (or at least well-known), such as
before a sequence of 'repo download' commands are used to get some
changes for testing.

Signed-off-by: Shawn O. Pearce <sop@google.com>
Shawn O. Pearce %!s(int64=17) %!d(string=hai) anos
pai
achega
3e768c9dc7
Modificáronse 2 ficheiros con 17 adicións e 3 borrados
  1. 2 2
      project.py
  2. 15 1
      subcmds/sync.py

+ 2 - 2
project.py

@@ -573,7 +573,7 @@ class Project(object):
     for file in self.copyfiles:
       file._Copy()
 
-  def Sync_LocalHalf(self):
+  def Sync_LocalHalf(self, detach_head=False):
     """Perform only the local IO portion of the sync process.
        Network access is not required.
 
@@ -594,7 +594,7 @@ class Project(object):
 
     branch = self.CurrentBranch
 
-    if branch is None:
+    if branch is None or detach_head:
       # Currently on a detached HEAD.  The user is assumed to
       # not have any local modifications worth worrying about.
       #

+ 15 - 1
subcmds/sync.py

@@ -44,12 +44,21 @@ line.  Projects can be specified either by name, or by a relative
 or absolute path to the project's local directory. If no projects
 are specified, '%prog' will synchronize all projects listed in
 the manifest.
+
+The -d/--detach option can be used to switch specified projects
+back to the manifest revision.  This option is especially helpful
+if the project is currently on a topic branch, but the manifest
+revision is temporarily needed.
 """
 
   def _Options(self, p):
     p.add_option('-n','--network-only',
                  dest='network_only', action='store_true',
                  help="fetch only, don't update working tree")
+    p.add_option('-d','--detach',
+                 dest='detach_head', action='store_true',
+                 help='detach projects back to manifest revision')
+
     p.add_option('--no-repo-verify',
                  dest='no_repo_verify', action='store_true',
                  help='do not verify repo source code')
@@ -68,6 +77,10 @@ the manifest.
     return fetched
 
   def Execute(self, opt, args):
+    if opt.network_only and opt.detach_head:
+      print >>sys.stderr, 'error: cannot combine -n and -d'
+      sys.exit(1)
+
     rp = self.manifest.repoProject
     rp.PreSync()
 
@@ -111,7 +124,8 @@ the manifest.
 
     for project in all:
       if project.worktree:
-        if not project.Sync_LocalHalf():
+        if not project.Sync_LocalHalf(
+            detach_head=opt.detach_head):
           sys.exit(1)