# Copyright (C) 2008 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import itertools from color import Coloring from command import DEFAULT_LOCAL_JOBS from command import PagedCommand class Prune(PagedCommand): COMMON = True helpSummary = "Prune (delete) already merged topics" helpUsage = """ %prog [...] """ PARALLEL_JOBS = DEFAULT_LOCAL_JOBS def _ExecuteOne(self, project): """Process one project.""" return project.PruneHeads() def Execute(self, opt, args): projects = self.GetProjects( args, all_manifests=not opt.this_manifest_only ) # NB: Should be able to refactor this module to display summary as # results come back from children. def _ProcessResults(_pool, _output, results): return list(itertools.chain.from_iterable(results)) all_branches = self.ExecuteInParallel( opt.jobs, self._ExecuteOne, projects, callback=_ProcessResults, ordered=True, ) if not all_branches: return class Report(Coloring): def __init__(self, config): Coloring.__init__(self, config, "status") self.project = self.printer("header", attr="bold") out = Report(all_branches[0].project.config) out.project("Pending Branches") out.nl() project = None for branch in all_branches: if project != branch.project: project = branch.project out.nl() out.project( "project %s/" % project.RelPath(local=opt.this_manifest_only) ) out.nl() print( "%s %-33s " % ( branch.name == project.CurrentBranch and "*" or " ", branch.name, ), end="", ) if not branch.base_exists: print( "(ignoring: tracking branch is gone: %s)" % (branch.base,) ) else: commits = branch.commits date = branch.date print( "(%2d commit%s, %s)" % (len(commits), len(commits) != 1 and "s" or " ", date) )