summaryrefslogtreecommitdiffstats
path: root/subcmds/abandon.py
diff options
context:
space:
mode:
Diffstat (limited to 'subcmds/abandon.py')
-rw-r--r--subcmds/abandon.py30
1 files changed, 18 insertions, 12 deletions
diff --git a/subcmds/abandon.py b/subcmds/abandon.py
index e280d69e..3208be6b 100644
--- a/subcmds/abandon.py
+++ b/subcmds/abandon.py
@@ -70,8 +70,10 @@ It is equivalent to "git branch -D <branchname>".
70 else: 70 else:
71 args.insert(0, "'All local branches'") 71 args.insert(0, "'All local branches'")
72 72
73 def _ExecuteOne(self, all_branches, nb, project): 73 @classmethod
74 def _ExecuteOne(cls, all_branches, nb, project_idx):
74 """Abandon one project.""" 75 """Abandon one project."""
76 project = cls.get_parallel_context()["projects"][project_idx]
75 if all_branches: 77 if all_branches:
76 branches = project.GetBranches() 78 branches = project.GetBranches()
77 else: 79 else:
@@ -89,7 +91,7 @@ It is equivalent to "git branch -D <branchname>".
89 if status is not None: 91 if status is not None:
90 ret[name] = status 92 ret[name] = status
91 93
92 return (ret, project, errors) 94 return (ret, project_idx, errors)
93 95
94 def Execute(self, opt, args): 96 def Execute(self, opt, args):
95 nb = args[0].split() 97 nb = args[0].split()
@@ -102,7 +104,8 @@ It is equivalent to "git branch -D <branchname>".
102 _RelPath = lambda p: p.RelPath(local=opt.this_manifest_only) 104 _RelPath = lambda p: p.RelPath(local=opt.this_manifest_only)
103 105
104 def _ProcessResults(_pool, pm, states): 106 def _ProcessResults(_pool, pm, states):
105 for results, project, errors in states: 107 for results, project_idx, errors in states:
108 project = all_projects[project_idx]
106 for branch, status in results.items(): 109 for branch, status in results.items():
107 if status: 110 if status:
108 success[branch].append(project) 111 success[branch].append(project)
@@ -111,15 +114,18 @@ It is equivalent to "git branch -D <branchname>".
111 aggregate_errors.extend(errors) 114 aggregate_errors.extend(errors)
112 pm.update(msg="") 115 pm.update(msg="")
113 116
114 self.ExecuteInParallel( 117 with self.ParallelContext():
115 opt.jobs, 118 self.get_parallel_context()["projects"] = all_projects
116 functools.partial(self._ExecuteOne, opt.all, nb), 119 self.ExecuteInParallel(
117 all_projects, 120 opt.jobs,
118 callback=_ProcessResults, 121 functools.partial(self._ExecuteOne, opt.all, nb),
119 output=Progress( 122 range(len(all_projects)),
120 f"Abandon {nb}", len(all_projects), quiet=opt.quiet 123 callback=_ProcessResults,
121 ), 124 output=Progress(
122 ) 125 f"Abandon {nb}", len(all_projects), quiet=opt.quiet
126 ),
127 chunksize=1,
128 )
123 129
124 width = max( 130 width = max(
125 itertools.chain( 131 itertools.chain(