Merge "project.RemoteFetch: Handle depth cases more robustly"
diff --git a/main.py b/main.py
index 47f083d..6736abc 100755
--- a/main.py
+++ b/main.py
@@ -45,6 +45,7 @@
from subcmds.version import Version
from editor import Editor
from error import DownloadError
+from error import InvalidProjectGroupsError
from error import ManifestInvalidRevisionError
from error import ManifestParseError
from error import NoManifestException
@@ -173,6 +174,12 @@
else:
print('error: no project in current directory', file=sys.stderr)
result = 1
+ except InvalidProjectGroupsError as e:
+ if e.name:
+ print('error: project group must be enabled for project %s' % e.name, file=sys.stderr)
+ else:
+ print('error: project group must be enabled for the project in the current directory', file=sys.stderr)
+ result = 1
finally:
elapsed = time.time() - start
hours, remainder = divmod(elapsed, 3600)
diff --git a/manifest_xml.py b/manifest_xml.py
index cfbd9ef..130e17c 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -253,11 +253,13 @@
else:
value = p.work_git.rev_parse(HEAD + '^0')
e.setAttribute('revision', value)
- if peg_rev_upstream and value != p.revisionExpr:
- # Only save the origin if the origin is not a sha1, and the default
- # isn't our value, and the if the default doesn't already have that
- # covered.
- e.setAttribute('upstream', p.revisionExpr)
+ if peg_rev_upstream:
+ if p.upstream:
+ e.setAttribute('upstream', p.upstream)
+ elif value != p.revisionExpr:
+ # Only save the origin if the origin is not a sha1, and the default
+ # isn't our value
+ e.setAttribute('upstream', p.revisionExpr)
else:
revision = self.remotes[remoteName].revision or d.revisionExpr
if not revision or revision != p.revisionExpr:
diff --git a/subcmds/cherry_pick.py b/subcmds/cherry_pick.py
index 520e4c3..1f7dffd 100644
--- a/subcmds/cherry_pick.py
+++ b/subcmds/cherry_pick.py
@@ -76,6 +76,7 @@
capture_stdout = True,
capture_stderr = True)
p.stdin.write(new_msg)
+ p.stdin.close()
if p.Wait() != 0:
print("error: Failed to update commit message", file=sys.stderr)
sys.exit(1)
diff --git a/subcmds/forall.py b/subcmds/forall.py
index ebc8bec..b93cd6d 100644
--- a/subcmds/forall.py
+++ b/subcmds/forall.py
@@ -151,11 +151,15 @@
attributes that we need.
"""
+ if not self.manifest.IsMirror:
+ lrev = project.GetRevisionId()
+ else:
+ lrev = None
return {
'name': project.name,
'relpath': project.relpath,
'remote_name': project.remote.name,
- 'lrev': project.GetRevisionId(),
+ 'lrev': lrev,
'rrev': project.revisionExpr,
'annotations': dict((a.name, a.value) for a in project.annotations),
'gitdir': project.gitdir,
@@ -201,6 +205,13 @@
mirror = self.manifest.IsMirror
rc = 0
+ smart_sync_manifest_name = "smart_sync_override.xml"
+ smart_sync_manifest_path = os.path.join(
+ self.manifest.manifestProject.worktree, smart_sync_manifest_name)
+
+ if os.path.isfile(smart_sync_manifest_path):
+ self.manifest.Override(smart_sync_manifest_path)
+
if not opt.regex:
projects = self.GetProjects(args)
else:
diff --git a/subcmds/sync.py b/subcmds/sync.py
index b4546c1..ec333ae 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -517,6 +517,9 @@
self.manifest.Override(opt.manifest_name)
manifest_name = opt.manifest_name
+ smart_sync_manifest_name = "smart_sync_override.xml"
+ smart_sync_manifest_path = os.path.join(
+ self.manifest.manifestProject.worktree, smart_sync_manifest_name)
if opt.smart_sync or opt.smart_tag:
if not self.manifest.manifest_server:
@@ -583,17 +586,16 @@
[success, manifest_str] = server.GetManifest(opt.smart_tag)
if success:
- manifest_name = "smart_sync_override.xml"
- manifest_path = os.path.join(self.manifest.manifestProject.worktree,
- manifest_name)
+ manifest_name = smart_sync_manifest_name
try:
- f = open(manifest_path, 'w')
+ f = open(smart_sync_manifest_path, 'w')
try:
f.write(manifest_str)
finally:
f.close()
- except IOError:
- print('error: cannot write manifest to %s' % manifest_path,
+ except IOError as e:
+ print('error: cannot write manifest to %s:\n%s'
+ % (smart_sync_manifest_path, e),
file=sys.stderr)
sys.exit(1)
self._ReloadManifest(manifest_name)
@@ -610,6 +612,13 @@
% (self.manifest.manifest_server, e.errcode, e.errmsg),
file=sys.stderr)
sys.exit(1)
+ else: # Not smart sync or smart tag mode
+ if os.path.isfile(smart_sync_manifest_path):
+ try:
+ os.remove(smart_sync_manifest_path)
+ except OSError as e:
+ print('error: failed to remove existing smart sync override manifest: %s' %
+ e, file=sys.stderr)
rp = self.manifest.repoProject
rp.PreSync()