From 0369a069ade1602879c16dd33dc592bed3f17c0f Mon Sep 17 00:00:00 2001 From: Graham Christensen Date: Wed, 29 Jul 2015 17:02:54 -0500 Subject: [PATCH] Support filtering by group on forall and list subcmd Enable operating against groups of repositories. As it stands, it isn't compatible with `-r/--regex`. `repo forall -g groupname -c pwd` will run `pwd` for all projects in groupname. `repo forall -g thisgroup,-butnotthisone -c pwd` will run `pwd` for all projects in `thisgroup` but not `butnotthisone`. `repo list -g groupname -n` will list all the names of repos in `groupname`. Change-Id: Ia75c50ce52541d1c8cea2874b20a4db2e0e54960 --- command.py | 5 +++-- subcmds/forall.py | 5 ++++- subcmds/list.py | 5 ++++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/command.py b/command.py index 207ef46b..38cacd3b 100644 --- a/command.py +++ b/command.py @@ -126,7 +126,7 @@ class Command(object): pass return project - def GetProjects(self, args, missing_ok=False, submodules_ok=False): + def GetProjects(self, args, groups='', missing_ok=False, submodules_ok=False): """A list of projects that match the arguments. """ all_projects_list = self.manifest.projects @@ -134,7 +134,8 @@ class Command(object): mp = self.manifest.manifestProject - groups = mp.config.GetString('manifest.groups') + if not groups: + groups = mp.config.GetString('manifest.groups') if not groups: groups = 'default,platform-' + platform.system().lower() groups = [x for x in re.split(r'[,\s]+', groups) if x] diff --git a/subcmds/forall.py b/subcmds/forall.py index b93cd6d0..96dc99d1 100644 --- a/subcmds/forall.py +++ b/subcmds/forall.py @@ -120,6 +120,9 @@ without iterating through the remaining projects. p.add_option('-r', '--regex', dest='regex', action='store_true', help="Execute the command only on projects matching regex or wildcard expression") + p.add_option('-g', '--groups', + dest='groups', + help="Execute the command only on projects matching the specified groups") p.add_option('-c', '--command', help='Command (and arguments) to execute', dest='command', @@ -213,7 +216,7 @@ without iterating through the remaining projects. self.manifest.Override(smart_sync_manifest_path) if not opt.regex: - projects = self.GetProjects(args) + projects = self.GetProjects(args, groups=opt.groups) else: projects = self.FindProjects(args) diff --git a/subcmds/list.py b/subcmds/list.py index 945c28d8..ca51c5f7 100644 --- a/subcmds/list.py +++ b/subcmds/list.py @@ -35,6 +35,9 @@ This is similar to running: repo forall -c 'echo "$REPO_PATH : $REPO_PROJECT"'. p.add_option('-r', '--regex', dest='regex', action='store_true', help="Filter the project list based on regex or wildcard matching of strings") + p.add_option('-g', '--groups', + dest='groups', + help="Filter the project list based on the groups the project is in") p.add_option('-f', '--fullpath', dest='fullpath', action='store_true', help="Display the full work tree path instead of the relative path") @@ -62,7 +65,7 @@ This is similar to running: repo forall -c 'echo "$REPO_PATH : $REPO_PROJECT"'. sys.exit(1) if not opt.regex: - projects = self.GetProjects(args) + projects = self.GetProjects(args, groups=opt.groups) else: projects = self.FindProjects(args)