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 | ||
