diff options
Diffstat (limited to 'subcmds/branches.py')
-rw-r--r-- | subcmds/branches.py | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/subcmds/branches.py b/subcmds/branches.py index 59b5cb28..08c6389c 100644 --- a/subcmds/branches.py +++ b/subcmds/branches.py | |||
@@ -98,6 +98,22 @@ is shown, then the branch appears in all projects. | |||
98 | """ | 98 | """ |
99 | PARALLEL_JOBS = DEFAULT_LOCAL_JOBS | 99 | PARALLEL_JOBS = DEFAULT_LOCAL_JOBS |
100 | 100 | ||
101 | @classmethod | ||
102 | def _ExpandProjectToBranches(cls, project_idx): | ||
103 | """Expands a project into a list of branch names & associated info. | ||
104 | |||
105 | Args: | ||
106 | project_idx: project.Project index | ||
107 | |||
108 | Returns: | ||
109 | List[Tuple[str, git_config.Branch, int]] | ||
110 | """ | ||
111 | branches = [] | ||
112 | project = cls.get_parallel_context()["projects"][project_idx] | ||
113 | for name, b in project.GetBranches().items(): | ||
114 | branches.append((name, b, project_idx)) | ||
115 | return branches | ||
116 | |||
101 | def Execute(self, opt, args): | 117 | def Execute(self, opt, args): |
102 | projects = self.GetProjects( | 118 | projects = self.GetProjects( |
103 | args, all_manifests=not opt.this_manifest_only | 119 | args, all_manifests=not opt.this_manifest_only |
@@ -107,17 +123,20 @@ is shown, then the branch appears in all projects. | |||
107 | project_cnt = len(projects) | 123 | project_cnt = len(projects) |
108 | 124 | ||
109 | def _ProcessResults(_pool, _output, results): | 125 | def _ProcessResults(_pool, _output, results): |
110 | for name, b in itertools.chain.from_iterable(results): | 126 | for name, b, project_idx in itertools.chain.from_iterable(results): |
127 | b.project = projects[project_idx] | ||
111 | if name not in all_branches: | 128 | if name not in all_branches: |
112 | all_branches[name] = BranchInfo(name) | 129 | all_branches[name] = BranchInfo(name) |
113 | all_branches[name].add(b) | 130 | all_branches[name].add(b) |
114 | 131 | ||
115 | self.ExecuteInParallel( | 132 | with self.ParallelContext(): |
116 | opt.jobs, | 133 | self.get_parallel_context()["projects"] = projects |
117 | expand_project_to_branches, | 134 | self.ExecuteInParallel( |
118 | projects, | 135 | opt.jobs, |
119 | callback=_ProcessResults, | 136 | self._ExpandProjectToBranches, |
120 | ) | 137 | range(len(projects)), |
138 | callback=_ProcessResults, | ||
139 | ) | ||
121 | 140 | ||
122 | names = sorted(all_branches) | 141 | names = sorted(all_branches) |
123 | 142 | ||
@@ -191,19 +210,3 @@ is shown, then the branch appears in all projects. | |||
191 | else: | 210 | else: |
192 | out.write(" in all projects") | 211 | out.write(" in all projects") |
193 | out.nl() | 212 | out.nl() |
194 | |||
195 | |||
196 | def expand_project_to_branches(project): | ||
197 | """Expands a project into a list of branch names & associated information. | ||
198 | |||
199 | Args: | ||
200 | project: project.Project | ||
201 | |||
202 | Returns: | ||
203 | List[Tuple[str, git_config.Branch]] | ||
204 | """ | ||
205 | branches = [] | ||
206 | for name, b in project.GetBranches().items(): | ||
207 | b.project = project | ||
208 | branches.append((name, b)) | ||
209 | return branches | ||