forall: add an --ignore-missing option
In CrOS, our infra has to deal with partial checkouts constantly
(for a variety of reasons). To help reset back to a good state,
we run git commands via `repo forall`, but don't care about the
missing checkouts. Add a flag so we can disambiguate between
missing repos and failing git subcommands.
Bug: https://crbug.com/1013377
Bug: https://crbug.com/1013623
Change-Id: Ie3498c6d111276c60d2ecedbba21bfa778588d50
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/241935
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
Tested-by: Mike Frysinger <vapier@google.com>
diff --git a/subcmds/forall.py b/subcmds/forall.py
index c9de26b..96eac54 100644
--- a/subcmds/forall.py
+++ b/subcmds/forall.py
@@ -139,6 +139,9 @@
p.add_option('-e', '--abort-on-errors',
dest='abort_on_errors', action='store_true',
help='Abort if a command exits unsuccessfully')
+ p.add_option('--ignore-missing', action='store_true',
+ help='Silently skip & do not exit non-zero due missing '
+ 'checkouts')
g = p.add_option_group('Output')
g.add_option('-p',
@@ -323,6 +326,10 @@
cwd = project['worktree']
if not os.path.exists(cwd):
+ # Allow the user to silently ignore missing checkouts so they can run on
+ # partial checkouts (good for infra recovery tools).
+ if opt.ignore_missing:
+ return 0
if ((opt.project_header and opt.verbose)
or not opt.project_header):
print('skipping %s/' % project['relpath'], file=sys.stderr)