summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--project.py245
-rw-r--r--subcmds/init.py2
2 files changed, 125 insertions, 122 deletions
diff --git a/project.py b/project.py
index 3a3c6a01..4e9dba7f 100644
--- a/project.py
+++ b/project.py
@@ -85,7 +85,7 @@ def _ProjectHooks():
85 global _project_hook_list 85 global _project_hook_list
86 if _project_hook_list is None: 86 if _project_hook_list is None:
87 d = os.path.realpath(os.path.abspath(os.path.dirname(__file__))) 87 d = os.path.realpath(os.path.abspath(os.path.dirname(__file__)))
88 d = os.path.join(d , 'hooks') 88 d = os.path.join(d, 'hooks')
89 _project_hook_list = [os.path.join(d, x) for x in os.listdir(d)] 89 _project_hook_list = [os.path.join(d, x) for x in os.listdir(d)]
90 return _project_hook_list 90 return _project_hook_list
91 91
@@ -183,28 +183,28 @@ class ReviewableBranch(object):
183class StatusColoring(Coloring): 183class StatusColoring(Coloring):
184 def __init__(self, config): 184 def __init__(self, config):
185 Coloring.__init__(self, config, 'status') 185 Coloring.__init__(self, config, 'status')
186 self.project = self.printer('header', attr = 'bold') 186 self.project = self.printer('header', attr='bold')
187 self.branch = self.printer('header', attr = 'bold') 187 self.branch = self.printer('header', attr='bold')
188 self.nobranch = self.printer('nobranch', fg = 'red') 188 self.nobranch = self.printer('nobranch', fg='red')
189 self.important = self.printer('important', fg = 'red') 189 self.important = self.printer('important', fg='red')
190 190
191 self.added = self.printer('added', fg = 'green') 191 self.added = self.printer('added', fg='green')
192 self.changed = self.printer('changed', fg = 'red') 192 self.changed = self.printer('changed', fg='red')
193 self.untracked = self.printer('untracked', fg = 'red') 193 self.untracked = self.printer('untracked', fg='red')
194 194
195 195
196class DiffColoring(Coloring): 196class DiffColoring(Coloring):
197 def __init__(self, config): 197 def __init__(self, config):
198 Coloring.__init__(self, config, 'diff') 198 Coloring.__init__(self, config, 'diff')
199 self.project = self.printer('header', attr = 'bold') 199 self.project = self.printer('header', attr='bold')
200 200
201class _Annotation: 201class _Annotation(object):
202 def __init__(self, name, value, keep): 202 def __init__(self, name, value, keep):
203 self.name = name 203 self.name = name
204 self.value = value 204 self.value = value
205 self.keep = keep 205 self.keep = keep
206 206
207class _CopyFile: 207class _CopyFile(object):
208 def __init__(self, src, dest, abssrc, absdest): 208 def __init__(self, src, dest, abssrc, absdest):
209 self.src = src 209 self.src = src
210 self.dest = dest 210 self.dest = dest
@@ -232,7 +232,7 @@ class _CopyFile:
232 except IOError: 232 except IOError:
233 _error('Cannot copy file %s to %s', src, dest) 233 _error('Cannot copy file %s to %s', src, dest)
234 234
235class _LinkFile: 235class _LinkFile(object):
236 def __init__(self, src, dest, abssrc, absdest): 236 def __init__(self, src, dest, abssrc, absdest):
237 self.src = src 237 self.src = src
238 self.dest = dest 238 self.dest = dest
@@ -259,9 +259,9 @@ class _LinkFile:
259class RemoteSpec(object): 259class RemoteSpec(object):
260 def __init__(self, 260 def __init__(self,
261 name, 261 name,
262 url = None, 262 url=None,
263 review = None, 263 review=None,
264 revision = None): 264 revision=None):
265 self.name = name 265 self.name = name
266 self.url = url 266 self.url = url
267 self.review = review 267 self.review = review
@@ -521,15 +521,15 @@ class Project(object):
521 relpath, 521 relpath,
522 revisionExpr, 522 revisionExpr,
523 revisionId, 523 revisionId,
524 rebase = True, 524 rebase=True,
525 groups = None, 525 groups=None,
526 sync_c = False, 526 sync_c=False,
527 sync_s = False, 527 sync_s=False,
528 clone_depth = None, 528 clone_depth=None,
529 upstream = None, 529 upstream=None,
530 parent = None, 530 parent=None,
531 is_derived = False, 531 is_derived=False,
532 dest_branch = None): 532 dest_branch=None):
533 """Init a Project object. 533 """Init a Project object.
534 534
535 Args: 535 Args:
@@ -586,8 +586,8 @@ class Project(object):
586 self.linkfiles = [] 586 self.linkfiles = []
587 self.annotations = [] 587 self.annotations = []
588 self.config = GitConfig.ForRepository( 588 self.config = GitConfig.ForRepository(
589 gitdir = self.gitdir, 589 gitdir=self.gitdir,
590 defaults = self.manifest.globalConfig) 590 defaults=self.manifest.globalConfig)
591 591
592 if self.worktree: 592 if self.worktree:
593 self.work_git = self._GitGetByExec(self, bare=False, gitdir=gitdir) 593 self.work_git = self._GitGetByExec(self, bare=False, gitdir=gitdir)
@@ -880,8 +880,8 @@ class Project(object):
880 cmd.append('--') 880 cmd.append('--')
881 p = GitCommand(self, 881 p = GitCommand(self,
882 cmd, 882 cmd,
883 capture_stdout = True, 883 capture_stdout=True,
884 capture_stderr = True) 884 capture_stderr=True)
885 has_diff = False 885 has_diff = False
886 for line in p.process.stdout: 886 for line in p.process.stdout:
887 if not has_diff: 887 if not has_diff:
@@ -966,7 +966,7 @@ class Project(object):
966 return None 966 return None
967 967
968 def UploadForReview(self, branch=None, 968 def UploadForReview(self, branch=None,
969 people=([],[]), 969 people=([], []),
970 auto_topic=False, 970 auto_topic=False,
971 draft=False, 971 draft=False,
972 dest_branch=None): 972 dest_branch=None):
@@ -1027,13 +1027,13 @@ class Project(object):
1027 ref_spec = ref_spec + '%' + ','.join(rp) 1027 ref_spec = ref_spec + '%' + ','.join(rp)
1028 cmd.append(ref_spec) 1028 cmd.append(ref_spec)
1029 1029
1030 if GitCommand(self, cmd, bare = True).Wait() != 0: 1030 if GitCommand(self, cmd, bare=True).Wait() != 0:
1031 raise UploadError('Upload failed') 1031 raise UploadError('Upload failed')
1032 1032
1033 msg = "posted to %s for %s" % (branch.remote.review, dest_branch) 1033 msg = "posted to %s for %s" % (branch.remote.review, dest_branch)
1034 self.bare_git.UpdateRef(R_PUB + branch.name, 1034 self.bare_git.UpdateRef(R_PUB + branch.name,
1035 R_HEADS + branch.name, 1035 R_HEADS + branch.name,
1036 message = msg) 1036 message=msg)
1037 1037
1038 1038
1039## Sync ## 1039## Sync ##
@@ -1134,7 +1134,7 @@ class Project(object):
1134 and not self._RemoteFetch(initial=is_new, quiet=quiet, alt_dir=alt_dir, 1134 and not self._RemoteFetch(initial=is_new, quiet=quiet, alt_dir=alt_dir,
1135 current_branch_only=current_branch_only, 1135 current_branch_only=current_branch_only,
1136 no_tags=no_tags)): 1136 no_tags=no_tags)):
1137 return False 1137 return False
1138 1138
1139 if self.worktree: 1139 if self.worktree:
1140 self._InitMRef() 1140 self._InitMRef()
@@ -1330,7 +1330,7 @@ class Project(object):
1330 1330
1331 if cnt_mine > 0 and self.rebase: 1331 if cnt_mine > 0 and self.rebase:
1332 def _dorebase(): 1332 def _dorebase():
1333 self._Rebase(upstream = '%s^1' % last_mine, onto = revid) 1333 self._Rebase(upstream='%s^1' % last_mine, onto=revid)
1334 self._CopyAndLinkFiles() 1334 self._CopyAndLinkFiles()
1335 syncbuf.later2(self, _dorebase) 1335 syncbuf.later2(self, _dorebase)
1336 elif local_changes: 1336 elif local_changes:
@@ -1385,11 +1385,11 @@ class Project(object):
1385 return True 1385 return True
1386 1386
1387 all_refs = self.bare_ref.all 1387 all_refs = self.bare_ref.all
1388 if (R_HEADS + name) in all_refs: 1388 if R_HEADS + name in all_refs:
1389 return GitCommand(self, 1389 return GitCommand(self,
1390 ['checkout', name, '--'], 1390 ['checkout', name, '--'],
1391 capture_stdout = True, 1391 capture_stdout=True,
1392 capture_stderr = True).Wait() == 0 1392 capture_stderr=True).Wait() == 0
1393 1393
1394 branch = self.GetBranch(name) 1394 branch = self.GetBranch(name)
1395 branch.remote = self.GetRemote(self.remote.name) 1395 branch.remote = self.GetRemote(self.remote.name)
@@ -1416,8 +1416,8 @@ class Project(object):
1416 1416
1417 if GitCommand(self, 1417 if GitCommand(self,
1418 ['checkout', '-b', branch.name, revid], 1418 ['checkout', '-b', branch.name, revid],
1419 capture_stdout = True, 1419 capture_stdout=True,
1420 capture_stderr = True).Wait() == 0: 1420 capture_stderr=True).Wait() == 0:
1421 branch.Save() 1421 branch.Save()
1422 return True 1422 return True
1423 return False 1423 return False
@@ -1463,8 +1463,8 @@ class Project(object):
1463 1463
1464 return GitCommand(self, 1464 return GitCommand(self,
1465 ['checkout', name, '--'], 1465 ['checkout', name, '--'],
1466 capture_stdout = True, 1466 capture_stdout=True,
1467 capture_stderr = True).Wait() == 0 1467 capture_stderr=True).Wait() == 0
1468 1468
1469 def AbandonBranch(self, name): 1469 def AbandonBranch(self, name):
1470 """Destroy a local topic branch. 1470 """Destroy a local topic branch.
@@ -1498,8 +1498,8 @@ class Project(object):
1498 1498
1499 return GitCommand(self, 1499 return GitCommand(self,
1500 ['branch', '-D', name], 1500 ['branch', '-D', name],
1501 capture_stdout = True, 1501 capture_stdout=True,
1502 capture_stderr = True).Wait() == 0 1502 capture_stderr=True).Wait() == 0
1503 1503
1504 def PruneHeads(self): 1504 def PruneHeads(self):
1505 """Prune any topic branches already merged into upstream. 1505 """Prune any topic branches already merged into upstream.
@@ -1516,7 +1516,7 @@ class Project(object):
1516 rev = self.GetRevisionId(left) 1516 rev = self.GetRevisionId(left)
1517 if cb is not None \ 1517 if cb is not None \
1518 and not self._revlist(HEAD + '...' + rev) \ 1518 and not self._revlist(HEAD + '...' + rev) \
1519 and not self.IsDirty(consider_untracked = False): 1519 and not self.IsDirty(consider_untracked=False):
1520 self.work_git.DetachHead(HEAD) 1520 self.work_git.DetachHead(HEAD)
1521 kill.append(cb) 1521 kill.append(cb)
1522 1522
@@ -1549,7 +1549,7 @@ class Project(object):
1549 1549
1550 kept = [] 1550 kept = []
1551 for branch in kill: 1551 for branch in kill:
1552 if (R_HEADS + branch) in left: 1552 if R_HEADS + branch in left:
1553 branch = self.GetBranch(branch) 1553 branch = self.GetBranch(branch)
1554 base = branch.LocalMerge 1554 base = branch.LocalMerge
1555 if not base: 1555 if not base:
@@ -1599,8 +1599,8 @@ class Project(object):
1599 def parse_gitmodules(gitdir, rev): 1599 def parse_gitmodules(gitdir, rev):
1600 cmd = ['cat-file', 'blob', '%s:.gitmodules' % rev] 1600 cmd = ['cat-file', 'blob', '%s:.gitmodules' % rev]
1601 try: 1601 try:
1602 p = GitCommand(None, cmd, capture_stdout = True, capture_stderr = True, 1602 p = GitCommand(None, cmd, capture_stdout=True, capture_stderr=True,
1603 bare = True, gitdir = gitdir) 1603 bare=True, gitdir=gitdir)
1604 except GitError: 1604 except GitError:
1605 return [], [] 1605 return [], []
1606 if p.Wait() != 0: 1606 if p.Wait() != 0:
@@ -1612,8 +1612,8 @@ class Project(object):
1612 os.write(fd, p.stdout) 1612 os.write(fd, p.stdout)
1613 os.close(fd) 1613 os.close(fd)
1614 cmd = ['config', '--file', temp_gitmodules_path, '--list'] 1614 cmd = ['config', '--file', temp_gitmodules_path, '--list']
1615 p = GitCommand(None, cmd, capture_stdout = True, capture_stderr = True, 1615 p = GitCommand(None, cmd, capture_stdout=True, capture_stderr=True,
1616 bare = True, gitdir = gitdir) 1616 bare=True, gitdir=gitdir)
1617 if p.Wait() != 0: 1617 if p.Wait() != 0:
1618 return [], [] 1618 return [], []
1619 gitmodules_lines = p.stdout.split('\n') 1619 gitmodules_lines = p.stdout.split('\n')
@@ -1646,8 +1646,8 @@ class Project(object):
1646 cmd = ['ls-tree', rev, '--'] 1646 cmd = ['ls-tree', rev, '--']
1647 cmd.extend(paths) 1647 cmd.extend(paths)
1648 try: 1648 try:
1649 p = GitCommand(None, cmd, capture_stdout = True, capture_stderr = True, 1649 p = GitCommand(None, cmd, capture_stdout=True, capture_stderr=True,
1650 bare = True, gitdir = gitdir) 1650 bare=True, gitdir=gitdir)
1651 except GitError: 1651 except GitError:
1652 return [] 1652 return []
1653 if p.Wait() != 0: 1653 if p.Wait() != 0:
@@ -1682,24 +1682,24 @@ class Project(object):
1682 continue 1682 continue
1683 1683
1684 remote = RemoteSpec(self.remote.name, 1684 remote = RemoteSpec(self.remote.name,
1685 url = url, 1685 url=url,
1686 review = self.remote.review, 1686 review=self.remote.review,
1687 revision = self.remote.revision) 1687 revision=self.remote.revision)
1688 subproject = Project(manifest = self.manifest, 1688 subproject = Project(manifest=self.manifest,
1689 name = name, 1689 name=name,
1690 remote = remote, 1690 remote=remote,
1691 gitdir = gitdir, 1691 gitdir=gitdir,
1692 objdir = objdir, 1692 objdir=objdir,
1693 worktree = worktree, 1693 worktree=worktree,
1694 relpath = relpath, 1694 relpath=relpath,
1695 revisionExpr = self.revisionExpr, 1695 revisionExpr=self.revisionExpr,
1696 revisionId = rev, 1696 revisionId=rev,
1697 rebase = self.rebase, 1697 rebase=self.rebase,
1698 groups = self.groups, 1698 groups=self.groups,
1699 sync_c = self.sync_c, 1699 sync_c=self.sync_c,
1700 sync_s = self.sync_s, 1700 sync_s=self.sync_s,
1701 parent = self, 1701 parent=self,
1702 is_derived = True) 1702 is_derived=True)
1703 result.append(subproject) 1703 result.append(subproject)
1704 result.extend(subproject.GetDerivedSubprojects()) 1704 result.extend(subproject.GetDerivedSubprojects())
1705 return result 1705 return result
@@ -1764,8 +1764,15 @@ class Project(object):
1764 if is_sha1 or tag_name is not None: 1764 if is_sha1 or tag_name is not None:
1765 if self._CheckForSha1(): 1765 if self._CheckForSha1():
1766 return True 1766 return True
1767 if is_sha1 and (not self.upstream or ID_RE.match(self.upstream)): 1767 if is_sha1 and not depth:
1768 current_branch_only = False 1768 # When syncing a specific commit and --depth is not set:
1769 # * if upstream is explicitly specified and is not a sha1, fetch only
1770 # upstream as users expect only upstream to be fetch.
1771 # Note: The commit might not be in upstream in which case the sync
1772 # will fail.
1773 # * otherwise, fetch all branches to make sure we end up with the
1774 # specific commit.
1775 current_branch_only = self.upstream and not ID_RE.match(self.upstream)
1769 1776
1770 if not name: 1777 if not name:
1771 name = self.remote.name 1778 name = self.remote.name
@@ -1840,12 +1847,17 @@ class Project(object):
1840 spec.append(tag_name) 1847 spec.append(tag_name)
1841 1848
1842 branch = self.revisionExpr 1849 branch = self.revisionExpr
1843 if is_sha1: 1850 if is_sha1 and depth:
1844 branch = self.upstream 1851 # Shallow checkout of a specific commit, fetch from that commit and not
1845 if branch is not None and branch.strip(): 1852 # the heads only as the commit might be deeper in the history.
1846 if not branch.startswith('refs/'): 1853 spec.append(branch)
1847 branch = R_HEADS + branch 1854 else:
1848 spec.append(str((u'+%s:' % branch) + remote.ToLocal(branch))) 1855 if is_sha1:
1856 branch = self.upstream
1857 if branch is not None and branch.strip():
1858 if not branch.startswith('refs/'):
1859 branch = R_HEADS + branch
1860 spec.append(str((u'+%s:' % branch) + remote.ToLocal(branch)))
1849 cmd.extend(spec) 1861 cmd.extend(spec)
1850 1862
1851 shallowfetch = self.config.GetString('repo.shallowfetch') 1863 shallowfetch = self.config.GetString('repo.shallowfetch')
@@ -1853,9 +1865,9 @@ class Project(object):
1853 GitCommand(self, ['fetch', '--unshallow', name] + shallowfetch.split(), 1865 GitCommand(self, ['fetch', '--unshallow', name] + shallowfetch.split(),
1854 bare=True, ssh_proxy=ssh_proxy).Wait() 1866 bare=True, ssh_proxy=ssh_proxy).Wait()
1855 if depth: 1867 if depth:
1856 self.config.SetString('repo.shallowfetch', ' '.join(spec)) 1868 self.config.SetString('repo.shallowfetch', ' '.join(spec))
1857 else: 1869 else:
1858 self.config.SetString('repo.shallowfetch', None) 1870 self.config.SetString('repo.shallowfetch', None)
1859 1871
1860 ok = False 1872 ok = False
1861 for _i in range(2): 1873 for _i in range(2):
@@ -2037,7 +2049,7 @@ class Project(object):
2037 if self._allrefs: 2049 if self._allrefs:
2038 raise GitError('%s checkout %s ' % (self.name, rev)) 2050 raise GitError('%s checkout %s ' % (self.name, rev))
2039 2051
2040 def _CherryPick(self, rev, quiet=False): 2052 def _CherryPick(self, rev):
2041 cmd = ['cherry-pick'] 2053 cmd = ['cherry-pick']
2042 cmd.append(rev) 2054 cmd.append(rev)
2043 cmd.append('--') 2055 cmd.append('--')
@@ -2045,7 +2057,7 @@ class Project(object):
2045 if self._allrefs: 2057 if self._allrefs:
2046 raise GitError('%s cherry-pick %s ' % (self.name, rev)) 2058 raise GitError('%s cherry-pick %s ' % (self.name, rev))
2047 2059
2048 def _Revert(self, rev, quiet=False): 2060 def _Revert(self, rev):
2049 cmd = ['revert'] 2061 cmd = ['revert']
2050 cmd.append('--no-edit') 2062 cmd.append('--no-edit')
2051 cmd.append(rev) 2063 cmd.append(rev)
@@ -2062,7 +2074,7 @@ class Project(object):
2062 if GitCommand(self, cmd).Wait() != 0: 2074 if GitCommand(self, cmd).Wait() != 0:
2063 raise GitError('%s reset --hard %s ' % (self.name, rev)) 2075 raise GitError('%s reset --hard %s ' % (self.name, rev))
2064 2076
2065 def _Rebase(self, upstream, onto = None): 2077 def _Rebase(self, upstream, onto=None):
2066 cmd = ['rebase'] 2078 cmd = ['rebase']
2067 if onto is not None: 2079 if onto is not None:
2068 cmd.extend(['--onto', onto]) 2080 cmd.extend(['--onto', onto])
@@ -2117,7 +2129,7 @@ class Project(object):
2117 2129
2118 m = self.manifest.manifestProject.config 2130 m = self.manifest.manifestProject.config
2119 for key in ['user.name', 'user.email']: 2131 for key in ['user.name', 'user.email']:
2120 if m.Has(key, include_defaults = False): 2132 if m.Has(key, include_defaults=False):
2121 self.config.SetString(key, m.GetString(key)) 2133 self.config.SetString(key, m.GetString(key))
2122 if self.manifest.IsMirror: 2134 if self.manifest.IsMirror:
2123 self.config.SetString('core.bare', 'true') 2135 self.config.SetString('core.bare', 'true')
@@ -2126,15 +2138,6 @@ class Project(object):
2126 2138
2127 def _UpdateHooks(self): 2139 def _UpdateHooks(self):
2128 if os.path.exists(self.gitdir): 2140 if os.path.exists(self.gitdir):
2129 # Always recreate hooks since they can have been changed
2130 # since the latest update.
2131 hooks = self._gitdir_path('hooks')
2132 try:
2133 to_rm = os.listdir(hooks)
2134 except OSError:
2135 to_rm = []
2136 for old_hook in to_rm:
2137 os.remove(os.path.join(hooks, old_hook))
2138 self._InitHooks() 2141 self._InitHooks()
2139 2142
2140 def _InitHooks(self): 2143 def _InitHooks(self):
@@ -2197,7 +2200,7 @@ class Project(object):
2197 if cur != '' or self.bare_ref.get(ref) != self.revisionId: 2200 if cur != '' or self.bare_ref.get(ref) != self.revisionId:
2198 msg = 'manifest set to %s' % self.revisionId 2201 msg = 'manifest set to %s' % self.revisionId
2199 dst = self.revisionId + '^0' 2202 dst = self.revisionId + '^0'
2200 self.bare_git.UpdateRef(ref, dst, message = msg, detach = True) 2203 self.bare_git.UpdateRef(ref, dst, message=msg, detach=True)
2201 else: 2204 else:
2202 remote = self.GetRemote(self.remote.name) 2205 remote = self.GetRemote(self.remote.name)
2203 dst = remote.ToLocal(self.revisionExpr) 2206 dst = remote.ToLocal(self.revisionExpr)
@@ -2341,10 +2344,10 @@ class Project(object):
2341 '-z', 2344 '-z',
2342 '--others', 2345 '--others',
2343 '--exclude-standard'], 2346 '--exclude-standard'],
2344 bare = False, 2347 bare=False,
2345 gitdir=self._gitdir, 2348 gitdir=self._gitdir,
2346 capture_stdout = True, 2349 capture_stdout=True,
2347 capture_stderr = True) 2350 capture_stderr=True)
2348 if p.Wait() == 0: 2351 if p.Wait() == 0:
2349 out = p.stdout 2352 out = p.stdout
2350 if out: 2353 if out:
@@ -2359,9 +2362,9 @@ class Project(object):
2359 p = GitCommand(self._project, 2362 p = GitCommand(self._project,
2360 cmd, 2363 cmd,
2361 gitdir=self._gitdir, 2364 gitdir=self._gitdir,
2362 bare = False, 2365 bare=False,
2363 capture_stdout = True, 2366 capture_stdout=True,
2364 capture_stderr = True) 2367 capture_stderr=True)
2365 try: 2368 try:
2366 out = p.process.stdout.read() 2369 out = p.process.stdout.read()
2367 r = {} 2370 r = {}
@@ -2467,10 +2470,10 @@ class Project(object):
2467 cmdv.extend(args) 2470 cmdv.extend(args)
2468 p = GitCommand(self._project, 2471 p = GitCommand(self._project,
2469 cmdv, 2472 cmdv,
2470 bare = self._bare, 2473 bare=self._bare,
2471 gitdir=self._gitdir, 2474 gitdir=self._gitdir,
2472 capture_stdout = True, 2475 capture_stdout=True,
2473 capture_stderr = True) 2476 capture_stderr=True)
2474 r = [] 2477 r = []
2475 for line in p.process.stdout: 2478 for line in p.process.stdout:
2476 if line[-1] == '\n': 2479 if line[-1] == '\n':
@@ -2520,10 +2523,10 @@ class Project(object):
2520 cmdv.extend(args) 2523 cmdv.extend(args)
2521 p = GitCommand(self._project, 2524 p = GitCommand(self._project,
2522 cmdv, 2525 cmdv,
2523 bare = self._bare, 2526 bare=self._bare,
2524 gitdir=self._gitdir, 2527 gitdir=self._gitdir,
2525 capture_stdout = True, 2528 capture_stdout=True,
2526 capture_stderr = True) 2529 capture_stderr=True)
2527 if p.Wait() != 0: 2530 if p.Wait() != 0:
2528 raise GitError('%s %s: %s' % ( 2531 raise GitError('%s %s: %s' % (
2529 self._project.name, 2532 self._project.name,
@@ -2588,9 +2591,9 @@ class _Later(object):
2588class _SyncColoring(Coloring): 2591class _SyncColoring(Coloring):
2589 def __init__(self, config): 2592 def __init__(self, config):
2590 Coloring.__init__(self, config, 'reposync') 2593 Coloring.__init__(self, config, 'reposync')
2591 self.project = self.printer('header', attr = 'bold') 2594 self.project = self.printer('header', attr='bold')
2592 self.info = self.printer('info') 2595 self.info = self.printer('info')
2593 self.fail = self.printer('fail', fg='red') 2596 self.fail = self.printer('fail', fg='red')
2594 2597
2595class SyncBuffer(object): 2598class SyncBuffer(object):
2596 def __init__(self, config, detach_head=False): 2599 def __init__(self, config, detach_head=False):
@@ -2652,16 +2655,16 @@ class MetaProject(Project):
2652 """ 2655 """
2653 def __init__(self, manifest, name, gitdir, worktree): 2656 def __init__(self, manifest, name, gitdir, worktree):
2654 Project.__init__(self, 2657 Project.__init__(self,
2655 manifest = manifest, 2658 manifest=manifest,
2656 name = name, 2659 name=name,
2657 gitdir = gitdir, 2660 gitdir=gitdir,
2658 objdir = gitdir, 2661 objdir=gitdir,
2659 worktree = worktree, 2662 worktree=worktree,
2660 remote = RemoteSpec('origin'), 2663 remote=RemoteSpec('origin'),
2661 relpath = '.repo/%s' % name, 2664 relpath='.repo/%s' % name,
2662 revisionExpr = 'refs/heads/master', 2665 revisionExpr='refs/heads/master',
2663 revisionId = None, 2666 revisionId=None,
2664 groups = None) 2667 groups=None)
2665 2668
2666 def PreSync(self): 2669 def PreSync(self):
2667 if self.Exists: 2670 if self.Exists:
@@ -2672,20 +2675,20 @@ class MetaProject(Project):
2672 self.revisionExpr = base 2675 self.revisionExpr = base
2673 self.revisionId = None 2676 self.revisionId = None
2674 2677
2675 def MetaBranchSwitch(self, target): 2678 def MetaBranchSwitch(self):
2676 """ Prepare MetaProject for manifest branch switch 2679 """ Prepare MetaProject for manifest branch switch
2677 """ 2680 """
2678 2681
2679 # detach and delete manifest branch, allowing a new 2682 # detach and delete manifest branch, allowing a new
2680 # branch to take over 2683 # branch to take over
2681 syncbuf = SyncBuffer(self.config, detach_head = True) 2684 syncbuf = SyncBuffer(self.config, detach_head=True)
2682 self.Sync_LocalHalf(syncbuf) 2685 self.Sync_LocalHalf(syncbuf)
2683 syncbuf.Finish() 2686 syncbuf.Finish()
2684 2687
2685 return GitCommand(self, 2688 return GitCommand(self,
2686 ['update-ref', '-d', 'refs/heads/default'], 2689 ['update-ref', '-d', 'refs/heads/default'],
2687 capture_stdout = True, 2690 capture_stdout=True,
2688 capture_stderr = True).Wait() == 0 2691 capture_stderr=True).Wait() == 0
2689 2692
2690 2693
2691 @property 2694 @property
diff --git a/subcmds/init.py b/subcmds/init.py
index b1fcb69c..b73de71c 100644
--- a/subcmds/init.py
+++ b/subcmds/init.py
@@ -233,7 +233,7 @@ to update the working directory files.
233 sys.exit(1) 233 sys.exit(1)
234 234
235 if opt.manifest_branch: 235 if opt.manifest_branch:
236 m.MetaBranchSwitch(opt.manifest_branch) 236 m.MetaBranchSwitch()
237 237
238 syncbuf = SyncBuffer(m.config) 238 syncbuf = SyncBuffer(m.config)
239 m.Sync_LocalHalf(syncbuf) 239 m.Sync_LocalHalf(syncbuf)