mirror of
https://gerrit.googlesource.com/git-repo
synced 2024-12-21 07:16:21 +00:00
Add --inverse-regex option to forall subcommand
Make it possible to exclude projects using regex/wildcard. The syntax is similar to that of the -r option, e.g.: repo forall -i ^platform/ ^device/ -c 'echo $REPO_PROJECT' Change-Id: Id250de5665152228c044c79337d3ac15b5696484
This commit is contained in:
parent
936d6185eb
commit
1f0564406b
10
command.py
10
command.py
@ -193,14 +193,20 @@ class Command(object):
|
|||||||
result.sort(key=_getpath)
|
result.sort(key=_getpath)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def FindProjects(self, args):
|
def FindProjects(self, args, inverse=False):
|
||||||
result = []
|
result = []
|
||||||
patterns = [re.compile(r'%s' % a, re.IGNORECASE) for a in args]
|
patterns = [re.compile(r'%s' % a, re.IGNORECASE) for a in args]
|
||||||
for project in self.GetProjects(''):
|
for project in self.GetProjects(''):
|
||||||
for pattern in patterns:
|
for pattern in patterns:
|
||||||
if pattern.search(project.name) or pattern.search(project.relpath):
|
match = pattern.search(project.name) or pattern.search(project.relpath)
|
||||||
|
if not inverse and match:
|
||||||
result.append(project)
|
result.append(project)
|
||||||
break
|
break
|
||||||
|
if inverse and match:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if inverse:
|
||||||
|
result.append(project)
|
||||||
result.sort(key=lambda project: project.relpath)
|
result.sort(key=lambda project: project.relpath)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -120,6 +120,9 @@ without iterating through the remaining projects.
|
|||||||
p.add_option('-r', '--regex',
|
p.add_option('-r', '--regex',
|
||||||
dest='regex', action='store_true',
|
dest='regex', action='store_true',
|
||||||
help="Execute the command only on projects matching regex or wildcard expression")
|
help="Execute the command only on projects matching regex or wildcard expression")
|
||||||
|
p.add_option('-i', '--inverse-regex',
|
||||||
|
dest='inverse_regex', action='store_true',
|
||||||
|
help="Execute the command only on projects not matching regex or wildcard expression")
|
||||||
p.add_option('-g', '--groups',
|
p.add_option('-g', '--groups',
|
||||||
dest='groups',
|
dest='groups',
|
||||||
help="Execute the command only on projects matching the specified groups")
|
help="Execute the command only on projects matching the specified groups")
|
||||||
@ -215,10 +218,12 @@ without iterating through the remaining projects.
|
|||||||
if os.path.isfile(smart_sync_manifest_path):
|
if os.path.isfile(smart_sync_manifest_path):
|
||||||
self.manifest.Override(smart_sync_manifest_path)
|
self.manifest.Override(smart_sync_manifest_path)
|
||||||
|
|
||||||
if not opt.regex:
|
if opt.regex:
|
||||||
projects = self.GetProjects(args, groups=opt.groups)
|
|
||||||
else:
|
|
||||||
projects = self.FindProjects(args)
|
projects = self.FindProjects(args)
|
||||||
|
elif opt.inverse_regex:
|
||||||
|
projects = self.FindProjects(args, inverse=True)
|
||||||
|
else:
|
||||||
|
projects = self.GetProjects(args, groups=opt.groups)
|
||||||
|
|
||||||
os.environ['REPO_COUNT'] = str(len(projects))
|
os.environ['REPO_COUNT'] = str(len(projects))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user