summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xmain.py7
-rw-r--r--subcmds/forall.py13
-rw-r--r--subcmds/sync.py21
3 files changed, 34 insertions, 7 deletions
diff --git a/main.py b/main.py
index 47f083df..6736abc9 100755
--- a/main.py
+++ b/main.py
@@ -45,6 +45,7 @@ from command import MirrorSafeCommand
45from subcmds.version import Version 45from subcmds.version import Version
46from editor import Editor 46from editor import Editor
47from error import DownloadError 47from error import DownloadError
48from error import InvalidProjectGroupsError
48from error import ManifestInvalidRevisionError 49from error import ManifestInvalidRevisionError
49from error import ManifestParseError 50from error import ManifestParseError
50from error import NoManifestException 51from error import NoManifestException
@@ -173,6 +174,12 @@ class _Repo(object):
173 else: 174 else:
174 print('error: no project in current directory', file=sys.stderr) 175 print('error: no project in current directory', file=sys.stderr)
175 result = 1 176 result = 1
177 except InvalidProjectGroupsError as e:
178 if e.name:
179 print('error: project group must be enabled for project %s' % e.name, file=sys.stderr)
180 else:
181 print('error: project group must be enabled for the project in the current directory', file=sys.stderr)
182 result = 1
176 finally: 183 finally:
177 elapsed = time.time() - start 184 elapsed = time.time() - start
178 hours, remainder = divmod(elapsed, 3600) 185 hours, remainder = divmod(elapsed, 3600)
diff --git a/subcmds/forall.py b/subcmds/forall.py
index ebc8beca..b93cd6d0 100644
--- a/subcmds/forall.py
+++ b/subcmds/forall.py
@@ -151,11 +151,15 @@ without iterating through the remaining projects.
151 attributes that we need. 151 attributes that we need.
152 152
153 """ 153 """
154 if not self.manifest.IsMirror:
155 lrev = project.GetRevisionId()
156 else:
157 lrev = None
154 return { 158 return {
155 'name': project.name, 159 'name': project.name,
156 'relpath': project.relpath, 160 'relpath': project.relpath,
157 'remote_name': project.remote.name, 161 'remote_name': project.remote.name,
158 'lrev': project.GetRevisionId(), 162 'lrev': lrev,
159 'rrev': project.revisionExpr, 163 'rrev': project.revisionExpr,
160 'annotations': dict((a.name, a.value) for a in project.annotations), 164 'annotations': dict((a.name, a.value) for a in project.annotations),
161 'gitdir': project.gitdir, 165 'gitdir': project.gitdir,
@@ -201,6 +205,13 @@ without iterating through the remaining projects.
201 mirror = self.manifest.IsMirror 205 mirror = self.manifest.IsMirror
202 rc = 0 206 rc = 0
203 207
208 smart_sync_manifest_name = "smart_sync_override.xml"
209 smart_sync_manifest_path = os.path.join(
210 self.manifest.manifestProject.worktree, smart_sync_manifest_name)
211
212 if os.path.isfile(smart_sync_manifest_path):
213 self.manifest.Override(smart_sync_manifest_path)
214
204 if not opt.regex: 215 if not opt.regex:
205 projects = self.GetProjects(args) 216 projects = self.GetProjects(args)
206 else: 217 else:
diff --git a/subcmds/sync.py b/subcmds/sync.py
index b4546c15..ec333ae7 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -517,6 +517,9 @@ later is required to fix a server side protocol bug.
517 self.manifest.Override(opt.manifest_name) 517 self.manifest.Override(opt.manifest_name)
518 518
519 manifest_name = opt.manifest_name 519 manifest_name = opt.manifest_name
520 smart_sync_manifest_name = "smart_sync_override.xml"
521 smart_sync_manifest_path = os.path.join(
522 self.manifest.manifestProject.worktree, smart_sync_manifest_name)
520 523
521 if opt.smart_sync or opt.smart_tag: 524 if opt.smart_sync or opt.smart_tag:
522 if not self.manifest.manifest_server: 525 if not self.manifest.manifest_server:
@@ -583,17 +586,16 @@ later is required to fix a server side protocol bug.
583 [success, manifest_str] = server.GetManifest(opt.smart_tag) 586 [success, manifest_str] = server.GetManifest(opt.smart_tag)
584 587
585 if success: 588 if success:
586 manifest_name = "smart_sync_override.xml" 589 manifest_name = smart_sync_manifest_name
587 manifest_path = os.path.join(self.manifest.manifestProject.worktree,
588 manifest_name)
589 try: 590 try:
590 f = open(manifest_path, 'w') 591 f = open(smart_sync_manifest_path, 'w')
591 try: 592 try:
592 f.write(manifest_str) 593 f.write(manifest_str)
593 finally: 594 finally:
594 f.close() 595 f.close()
595 except IOError: 596 except IOError as e:
596 print('error: cannot write manifest to %s' % manifest_path, 597 print('error: cannot write manifest to %s:\n%s'
598 % (smart_sync_manifest_path, e),
597 file=sys.stderr) 599 file=sys.stderr)
598 sys.exit(1) 600 sys.exit(1)
599 self._ReloadManifest(manifest_name) 601 self._ReloadManifest(manifest_name)
@@ -610,6 +612,13 @@ later is required to fix a server side protocol bug.
610 % (self.manifest.manifest_server, e.errcode, e.errmsg), 612 % (self.manifest.manifest_server, e.errcode, e.errmsg),
611 file=sys.stderr) 613 file=sys.stderr)
612 sys.exit(1) 614 sys.exit(1)
615 else: # Not smart sync or smart tag mode
616 if os.path.isfile(smart_sync_manifest_path):
617 try:
618 os.remove(smart_sync_manifest_path)
619 except OSError as e:
620 print('error: failed to remove existing smart sync override manifest: %s' %
621 e, file=sys.stderr)
613 622
614 rp = self.manifest.repoProject 623 rp = self.manifest.repoProject
615 rp.PreSync() 624 rp.PreSync()