Merge "Use depth flag when fetching"
diff --git a/project.py b/project.py
index 3a3c6a0..4e9dba7 100644
--- a/project.py
+++ b/project.py
@@ -85,7 +85,7 @@
global _project_hook_list
if _project_hook_list is None:
d = os.path.realpath(os.path.abspath(os.path.dirname(__file__)))
- d = os.path.join(d , 'hooks')
+ d = os.path.join(d, 'hooks')
_project_hook_list = [os.path.join(d, x) for x in os.listdir(d)]
return _project_hook_list
@@ -183,28 +183,28 @@
class StatusColoring(Coloring):
def __init__(self, config):
Coloring.__init__(self, config, 'status')
- self.project = self.printer('header', attr = 'bold')
- self.branch = self.printer('header', attr = 'bold')
- self.nobranch = self.printer('nobranch', fg = 'red')
- self.important = self.printer('important', fg = 'red')
+ self.project = self.printer('header', attr='bold')
+ self.branch = self.printer('header', attr='bold')
+ self.nobranch = self.printer('nobranch', fg='red')
+ self.important = self.printer('important', fg='red')
- self.added = self.printer('added', fg = 'green')
- self.changed = self.printer('changed', fg = 'red')
- self.untracked = self.printer('untracked', fg = 'red')
+ self.added = self.printer('added', fg='green')
+ self.changed = self.printer('changed', fg='red')
+ self.untracked = self.printer('untracked', fg='red')
class DiffColoring(Coloring):
def __init__(self, config):
Coloring.__init__(self, config, 'diff')
- self.project = self.printer('header', attr = 'bold')
+ self.project = self.printer('header', attr='bold')
-class _Annotation:
+class _Annotation(object):
def __init__(self, name, value, keep):
self.name = name
self.value = value
self.keep = keep
-class _CopyFile:
+class _CopyFile(object):
def __init__(self, src, dest, abssrc, absdest):
self.src = src
self.dest = dest
@@ -232,7 +232,7 @@
except IOError:
_error('Cannot copy file %s to %s', src, dest)
-class _LinkFile:
+class _LinkFile(object):
def __init__(self, src, dest, abssrc, absdest):
self.src = src
self.dest = dest
@@ -259,9 +259,9 @@
class RemoteSpec(object):
def __init__(self,
name,
- url = None,
- review = None,
- revision = None):
+ url=None,
+ review=None,
+ revision=None):
self.name = name
self.url = url
self.review = review
@@ -521,15 +521,15 @@
relpath,
revisionExpr,
revisionId,
- rebase = True,
- groups = None,
- sync_c = False,
- sync_s = False,
- clone_depth = None,
- upstream = None,
- parent = None,
- is_derived = False,
- dest_branch = None):
+ rebase=True,
+ groups=None,
+ sync_c=False,
+ sync_s=False,
+ clone_depth=None,
+ upstream=None,
+ parent=None,
+ is_derived=False,
+ dest_branch=None):
"""Init a Project object.
Args:
@@ -586,8 +586,8 @@
self.linkfiles = []
self.annotations = []
self.config = GitConfig.ForRepository(
- gitdir = self.gitdir,
- defaults = self.manifest.globalConfig)
+ gitdir=self.gitdir,
+ defaults=self.manifest.globalConfig)
if self.worktree:
self.work_git = self._GitGetByExec(self, bare=False, gitdir=gitdir)
@@ -880,8 +880,8 @@
cmd.append('--')
p = GitCommand(self,
cmd,
- capture_stdout = True,
- capture_stderr = True)
+ capture_stdout=True,
+ capture_stderr=True)
has_diff = False
for line in p.process.stdout:
if not has_diff:
@@ -966,7 +966,7 @@
return None
def UploadForReview(self, branch=None,
- people=([],[]),
+ people=([], []),
auto_topic=False,
draft=False,
dest_branch=None):
@@ -1027,13 +1027,13 @@
ref_spec = ref_spec + '%' + ','.join(rp)
cmd.append(ref_spec)
- if GitCommand(self, cmd, bare = True).Wait() != 0:
+ if GitCommand(self, cmd, bare=True).Wait() != 0:
raise UploadError('Upload failed')
msg = "posted to %s for %s" % (branch.remote.review, dest_branch)
self.bare_git.UpdateRef(R_PUB + branch.name,
R_HEADS + branch.name,
- message = msg)
+ message=msg)
## Sync ##
@@ -1134,7 +1134,7 @@
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
+ return False
if self.worktree:
self._InitMRef()
@@ -1330,7 +1330,7 @@
if cnt_mine > 0 and self.rebase:
def _dorebase():
- self._Rebase(upstream = '%s^1' % last_mine, onto = revid)
+ self._Rebase(upstream='%s^1' % last_mine, onto=revid)
self._CopyAndLinkFiles()
syncbuf.later2(self, _dorebase)
elif local_changes:
@@ -1385,11 +1385,11 @@
return True
all_refs = self.bare_ref.all
- if (R_HEADS + name) in all_refs:
+ if R_HEADS + name in all_refs:
return GitCommand(self,
['checkout', name, '--'],
- capture_stdout = True,
- capture_stderr = True).Wait() == 0
+ capture_stdout=True,
+ capture_stderr=True).Wait() == 0
branch = self.GetBranch(name)
branch.remote = self.GetRemote(self.remote.name)
@@ -1416,8 +1416,8 @@
if GitCommand(self,
['checkout', '-b', branch.name, revid],
- capture_stdout = True,
- capture_stderr = True).Wait() == 0:
+ capture_stdout=True,
+ capture_stderr=True).Wait() == 0:
branch.Save()
return True
return False
@@ -1463,8 +1463,8 @@
return GitCommand(self,
['checkout', name, '--'],
- capture_stdout = True,
- capture_stderr = True).Wait() == 0
+ capture_stdout=True,
+ capture_stderr=True).Wait() == 0
def AbandonBranch(self, name):
"""Destroy a local topic branch.
@@ -1498,8 +1498,8 @@
return GitCommand(self,
['branch', '-D', name],
- capture_stdout = True,
- capture_stderr = True).Wait() == 0
+ capture_stdout=True,
+ capture_stderr=True).Wait() == 0
def PruneHeads(self):
"""Prune any topic branches already merged into upstream.
@@ -1516,7 +1516,7 @@
rev = self.GetRevisionId(left)
if cb is not None \
and not self._revlist(HEAD + '...' + rev) \
- and not self.IsDirty(consider_untracked = False):
+ and not self.IsDirty(consider_untracked=False):
self.work_git.DetachHead(HEAD)
kill.append(cb)
@@ -1549,7 +1549,7 @@
kept = []
for branch in kill:
- if (R_HEADS + branch) in left:
+ if R_HEADS + branch in left:
branch = self.GetBranch(branch)
base = branch.LocalMerge
if not base:
@@ -1599,8 +1599,8 @@
def parse_gitmodules(gitdir, rev):
cmd = ['cat-file', 'blob', '%s:.gitmodules' % rev]
try:
- p = GitCommand(None, cmd, capture_stdout = True, capture_stderr = True,
- bare = True, gitdir = gitdir)
+ p = GitCommand(None, cmd, capture_stdout=True, capture_stderr=True,
+ bare=True, gitdir=gitdir)
except GitError:
return [], []
if p.Wait() != 0:
@@ -1612,8 +1612,8 @@
os.write(fd, p.stdout)
os.close(fd)
cmd = ['config', '--file', temp_gitmodules_path, '--list']
- p = GitCommand(None, cmd, capture_stdout = True, capture_stderr = True,
- bare = True, gitdir = gitdir)
+ p = GitCommand(None, cmd, capture_stdout=True, capture_stderr=True,
+ bare=True, gitdir=gitdir)
if p.Wait() != 0:
return [], []
gitmodules_lines = p.stdout.split('\n')
@@ -1646,8 +1646,8 @@
cmd = ['ls-tree', rev, '--']
cmd.extend(paths)
try:
- p = GitCommand(None, cmd, capture_stdout = True, capture_stderr = True,
- bare = True, gitdir = gitdir)
+ p = GitCommand(None, cmd, capture_stdout=True, capture_stderr=True,
+ bare=True, gitdir=gitdir)
except GitError:
return []
if p.Wait() != 0:
@@ -1682,24 +1682,24 @@
continue
remote = RemoteSpec(self.remote.name,
- url = url,
- review = self.remote.review,
- revision = self.remote.revision)
- subproject = Project(manifest = self.manifest,
- name = name,
- remote = remote,
- gitdir = gitdir,
- objdir = objdir,
- worktree = worktree,
- relpath = relpath,
- revisionExpr = self.revisionExpr,
- revisionId = rev,
- rebase = self.rebase,
- groups = self.groups,
- sync_c = self.sync_c,
- sync_s = self.sync_s,
- parent = self,
- is_derived = True)
+ url=url,
+ review=self.remote.review,
+ revision=self.remote.revision)
+ subproject = Project(manifest=self.manifest,
+ name=name,
+ remote=remote,
+ gitdir=gitdir,
+ objdir=objdir,
+ worktree=worktree,
+ relpath=relpath,
+ revisionExpr=self.revisionExpr,
+ revisionId=rev,
+ rebase=self.rebase,
+ groups=self.groups,
+ sync_c=self.sync_c,
+ sync_s=self.sync_s,
+ parent=self,
+ is_derived=True)
result.append(subproject)
result.extend(subproject.GetDerivedSubprojects())
return result
@@ -1764,8 +1764,15 @@
if is_sha1 or tag_name is not None:
if self._CheckForSha1():
return True
- if is_sha1 and (not self.upstream or ID_RE.match(self.upstream)):
- current_branch_only = False
+ if is_sha1 and not depth:
+ # When syncing a specific commit and --depth is not set:
+ # * if upstream is explicitly specified and is not a sha1, fetch only
+ # upstream as users expect only upstream to be fetch.
+ # Note: The commit might not be in upstream in which case the sync
+ # will fail.
+ # * otherwise, fetch all branches to make sure we end up with the
+ # specific commit.
+ current_branch_only = self.upstream and not ID_RE.match(self.upstream)
if not name:
name = self.remote.name
@@ -1840,12 +1847,17 @@
spec.append(tag_name)
branch = self.revisionExpr
- if is_sha1:
- branch = self.upstream
- if branch is not None and branch.strip():
- if not branch.startswith('refs/'):
- branch = R_HEADS + branch
- spec.append(str((u'+%s:' % branch) + remote.ToLocal(branch)))
+ if is_sha1 and depth:
+ # Shallow checkout of a specific commit, fetch from that commit and not
+ # the heads only as the commit might be deeper in the history.
+ spec.append(branch)
+ else:
+ if is_sha1:
+ branch = self.upstream
+ if branch is not None and branch.strip():
+ if not branch.startswith('refs/'):
+ branch = R_HEADS + branch
+ spec.append(str((u'+%s:' % branch) + remote.ToLocal(branch)))
cmd.extend(spec)
shallowfetch = self.config.GetString('repo.shallowfetch')
@@ -1853,9 +1865,9 @@
GitCommand(self, ['fetch', '--unshallow', name] + shallowfetch.split(),
bare=True, ssh_proxy=ssh_proxy).Wait()
if depth:
- self.config.SetString('repo.shallowfetch', ' '.join(spec))
+ self.config.SetString('repo.shallowfetch', ' '.join(spec))
else:
- self.config.SetString('repo.shallowfetch', None)
+ self.config.SetString('repo.shallowfetch', None)
ok = False
for _i in range(2):
@@ -2037,7 +2049,7 @@
if self._allrefs:
raise GitError('%s checkout %s ' % (self.name, rev))
- def _CherryPick(self, rev, quiet=False):
+ def _CherryPick(self, rev):
cmd = ['cherry-pick']
cmd.append(rev)
cmd.append('--')
@@ -2045,7 +2057,7 @@
if self._allrefs:
raise GitError('%s cherry-pick %s ' % (self.name, rev))
- def _Revert(self, rev, quiet=False):
+ def _Revert(self, rev):
cmd = ['revert']
cmd.append('--no-edit')
cmd.append(rev)
@@ -2062,7 +2074,7 @@
if GitCommand(self, cmd).Wait() != 0:
raise GitError('%s reset --hard %s ' % (self.name, rev))
- def _Rebase(self, upstream, onto = None):
+ def _Rebase(self, upstream, onto=None):
cmd = ['rebase']
if onto is not None:
cmd.extend(['--onto', onto])
@@ -2117,7 +2129,7 @@
m = self.manifest.manifestProject.config
for key in ['user.name', 'user.email']:
- if m.Has(key, include_defaults = False):
+ if m.Has(key, include_defaults=False):
self.config.SetString(key, m.GetString(key))
if self.manifest.IsMirror:
self.config.SetString('core.bare', 'true')
@@ -2126,15 +2138,6 @@
def _UpdateHooks(self):
if os.path.exists(self.gitdir):
- # Always recreate hooks since they can have been changed
- # since the latest update.
- hooks = self._gitdir_path('hooks')
- try:
- to_rm = os.listdir(hooks)
- except OSError:
- to_rm = []
- for old_hook in to_rm:
- os.remove(os.path.join(hooks, old_hook))
self._InitHooks()
def _InitHooks(self):
@@ -2197,7 +2200,7 @@
if cur != '' or self.bare_ref.get(ref) != self.revisionId:
msg = 'manifest set to %s' % self.revisionId
dst = self.revisionId + '^0'
- self.bare_git.UpdateRef(ref, dst, message = msg, detach = True)
+ self.bare_git.UpdateRef(ref, dst, message=msg, detach=True)
else:
remote = self.GetRemote(self.remote.name)
dst = remote.ToLocal(self.revisionExpr)
@@ -2341,10 +2344,10 @@
'-z',
'--others',
'--exclude-standard'],
- bare = False,
+ bare=False,
gitdir=self._gitdir,
- capture_stdout = True,
- capture_stderr = True)
+ capture_stdout=True,
+ capture_stderr=True)
if p.Wait() == 0:
out = p.stdout
if out:
@@ -2359,9 +2362,9 @@
p = GitCommand(self._project,
cmd,
gitdir=self._gitdir,
- bare = False,
- capture_stdout = True,
- capture_stderr = True)
+ bare=False,
+ capture_stdout=True,
+ capture_stderr=True)
try:
out = p.process.stdout.read()
r = {}
@@ -2467,10 +2470,10 @@
cmdv.extend(args)
p = GitCommand(self._project,
cmdv,
- bare = self._bare,
+ bare=self._bare,
gitdir=self._gitdir,
- capture_stdout = True,
- capture_stderr = True)
+ capture_stdout=True,
+ capture_stderr=True)
r = []
for line in p.process.stdout:
if line[-1] == '\n':
@@ -2520,10 +2523,10 @@
cmdv.extend(args)
p = GitCommand(self._project,
cmdv,
- bare = self._bare,
+ bare=self._bare,
gitdir=self._gitdir,
- capture_stdout = True,
- capture_stderr = True)
+ capture_stdout=True,
+ capture_stderr=True)
if p.Wait() != 0:
raise GitError('%s %s: %s' % (
self._project.name,
@@ -2588,9 +2591,9 @@
class _SyncColoring(Coloring):
def __init__(self, config):
Coloring.__init__(self, config, 'reposync')
- self.project = self.printer('header', attr = 'bold')
- self.info = self.printer('info')
- self.fail = self.printer('fail', fg='red')
+ self.project = self.printer('header', attr='bold')
+ self.info = self.printer('info')
+ self.fail = self.printer('fail', fg='red')
class SyncBuffer(object):
def __init__(self, config, detach_head=False):
@@ -2652,16 +2655,16 @@
"""
def __init__(self, manifest, name, gitdir, worktree):
Project.__init__(self,
- manifest = manifest,
- name = name,
- gitdir = gitdir,
- objdir = gitdir,
- worktree = worktree,
- remote = RemoteSpec('origin'),
- relpath = '.repo/%s' % name,
- revisionExpr = 'refs/heads/master',
- revisionId = None,
- groups = None)
+ manifest=manifest,
+ name=name,
+ gitdir=gitdir,
+ objdir=gitdir,
+ worktree=worktree,
+ remote=RemoteSpec('origin'),
+ relpath='.repo/%s' % name,
+ revisionExpr='refs/heads/master',
+ revisionId=None,
+ groups=None)
def PreSync(self):
if self.Exists:
@@ -2672,20 +2675,20 @@
self.revisionExpr = base
self.revisionId = None
- def MetaBranchSwitch(self, target):
+ def MetaBranchSwitch(self):
""" Prepare MetaProject for manifest branch switch
"""
# detach and delete manifest branch, allowing a new
# branch to take over
- syncbuf = SyncBuffer(self.config, detach_head = True)
+ syncbuf = SyncBuffer(self.config, detach_head=True)
self.Sync_LocalHalf(syncbuf)
syncbuf.Finish()
return GitCommand(self,
['update-ref', '-d', 'refs/heads/default'],
- capture_stdout = True,
- capture_stderr = True).Wait() == 0
+ capture_stdout=True,
+ capture_stderr=True).Wait() == 0
@property
diff --git a/subcmds/init.py b/subcmds/init.py
index b1fcb69..b73de71 100644
--- a/subcmds/init.py
+++ b/subcmds/init.py
@@ -233,7 +233,7 @@
sys.exit(1)
if opt.manifest_branch:
- m.MetaBranchSwitch(opt.manifest_branch)
+ m.MetaBranchSwitch()
syncbuf = SyncBuffer(m.config)
m.Sync_LocalHalf(syncbuf)