Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(221)

Unified Diff: tools/push-to-trunk/merge_to_branch.py

Issue 173983002: Refactoring: Redesign option parsing in push and merge scripts. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/push-to-trunk/common_includes.py ('k') | tools/push-to-trunk/push_to_trunk.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/push-to-trunk/merge_to_branch.py
diff --git a/tools/push-to-trunk/merge_to_branch.py b/tools/push-to-trunk/merge_to_branch.py
index 5f0b6a6e5532c9276b7dff274a011a9bbe92d40b..61f4ef7ea7d18638ed76de974d1f14770dc9ca32 100755
--- a/tools/push-to-trunk/merge_to_branch.py
+++ b/tools/push-to-trunk/merge_to_branch.py
@@ -27,7 +27,7 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
from collections import OrderedDict
-import optparse
+import argparse
import sys
from common_includes import *
@@ -50,36 +50,22 @@ CONFIG = {
}
-class MergeToBranchOptions(CommonOptions):
- def __init__(self, options, args):
- super(MergeToBranchOptions, self).__init__(options, True)
- self.requires_editor = True
- self.wait_for_lgtm = True
- self.delete_sentinel = options.f
- self.message = getattr(options, "message", "")
- self.revert = getattr(options, "r", False)
- self.revert_bleeding_edge = getattr(options, "revert_bleeding_edge", False)
- self.patch = getattr(options, "p", "")
- self.args = args
-
-
class Preparation(Step):
MESSAGE = "Preparation."
def RunStep(self):
if os.path.exists(self.Config(ALREADY_MERGING_SENTINEL_FILE)):
- if self._options.delete_sentinel:
+ if self._options.force:
os.remove(self.Config(ALREADY_MERGING_SENTINEL_FILE))
- elif self._options.s == 0:
+ elif self._options.step == 0:
self.Die("A merge is already in progress")
open(self.Config(ALREADY_MERGING_SENTINEL_FILE), "a").close()
self.InitialEnvironmentChecks()
if self._options.revert_bleeding_edge:
self["merge_to_branch"] = "bleeding_edge"
- elif self._options.args[0]:
- self["merge_to_branch"] = self._options.args[0]
- self._options.args = self._options.args[1:]
+ elif self._options.branch:
+ self["merge_to_branch"] = self._options.branch
else:
self.Die("Please specify a branch to merge to")
@@ -99,7 +85,8 @@ class SearchArchitecturePorts(Step):
MESSAGE = "Search for corresponding architecture ports."
def RunStep(self):
- self["full_revision_list"] = list(OrderedDict.fromkeys(self._options.args))
+ self["full_revision_list"] = list(
+ OrderedDict.fromkeys(self._options.revisions))
port_revision_list = []
for revision in self["full_revision_list"]:
# Search for commits which matches the "Port rXXX" pattern.
@@ -287,76 +274,58 @@ class CleanUp(Step):
print "patches: %s" % self["revision_list"]
-def RunMergeToBranch(config,
- options,
- side_effect_handler=DEFAULT_SIDE_EFFECT_HANDLER):
- step_classes = [
- Preparation,
- CreateBranch,
- SearchArchitecturePorts,
- FindGitRevisions,
- ApplyPatches,
- PrepareVersion,
- IncrementVersion,
- CommitLocal,
- UploadStep,
- CommitRepository,
- PrepareSVN,
- TagRevision,
- CleanUp,
- ]
-
- RunScript(step_classes, config, options, side_effect_handler)
-
-
-def BuildOptions():
- result = optparse.OptionParser()
- result.set_usage("""%prog [OPTIONS]... [BRANCH] [REVISION]...
-
-Performs the necessary steps to merge revisions from bleeding_edge
-to other branches, including trunk.""")
- result.add_option("-f",
- help="Delete sentinel file.",
- default=False, action="store_true")
- result.add_option("-m", "--message",
- help="Specify a commit message for the patch.")
- result.add_option("-r", "--revert",
- help="Revert specified patches.",
- default=False, action="store_true")
- result.add_option("-R", "--revert-bleeding-edge",
- help="Revert specified patches from bleeding edge.",
- default=False, action="store_true")
- result.add_option("-p", "--patch", dest="p",
- help="Specify a patch file to apply as part of the merge.")
- result.add_option("-s", "--step", dest="s",
- help="Specify the step where to start work. Default: 0.",
- default=0, type="int")
- return result
-
-
-def ProcessOptions(options, args):
- revert_from_bleeding_edge = 1 if options.revert_bleeding_edge else 0
- min_exp_args = 2 - revert_from_bleeding_edge
- if len(args) < min_exp_args:
- if not options.p:
- print "Either a patch file or revision numbers must be specified"
- return False
- if not options.message:
- print "You must specify a merge comment if no patches are specified"
- return False
- if options.s < 0:
- print "Bad step number %d" % options.s
- return False
- return True
-
-
-def Main():
- parser = BuildOptions()
- (options, args) = parser.parse_args()
- if not ProcessOptions(options, args):
- parser.print_help()
- return 1
- RunMergeToBranch(CONFIG, MergeToBranchOptions(options, args))
+class MergeToBranch(ScriptsBase):
+ def _Description(self):
+ return ("Performs the necessary steps to merge revisions from "
+ "bleeding_edge to other branches, including trunk.")
+
+ def _PrepareOptions(self, parser):
+ group = parser.add_mutually_exclusive_group(required=True)
+ group.add_argument("--branch", help="The branch to merge to.")
+ group.add_argument("-R", "--revert-bleeding-edge",
+ help="Revert specified patches from bleeding edge.",
+ default=False, action="store_true")
+ parser.add_argument("revisions", nargs="*",
+ help="The revisions to merge.")
+ parser.add_argument("-f", "--force",
+ help="Delete sentinel file.",
+ default=False, action="store_true")
+ parser.add_argument("-m", "--message",
+ help="A commit message for the patch.")
+ parser.add_argument("--revert",
+ help="Revert specified patches.",
+ default=False, action="store_true")
+ parser.add_argument("-p", "--patch",
+ help="A patch file to apply as part of the merge.")
+
+ def _ProcessOptions(self, options):
+ # TODO(machenbach): Add a test that covers revert from bleeding_edge
+ if len(options.revisions) < 1:
+ if not options.patch:
+ print "Either a patch file or revision numbers must be specified"
+ return False
+ if not options.message:
+ print "You must specify a merge comment if no patches are specified"
+ return False
+ return True
+
+ def _Steps(self):
+ return [
+ Preparation,
+ CreateBranch,
+ SearchArchitecturePorts,
+ FindGitRevisions,
+ ApplyPatches,
+ PrepareVersion,
+ IncrementVersion,
+ CommitLocal,
+ UploadStep,
+ CommitRepository,
+ PrepareSVN,
+ TagRevision,
+ CleanUp,
+ ]
+
if __name__ == "__main__":
- sys.exit(Main())
+ sys.exit(MergeToBranch(CONFIG).Run())
« no previous file with comments | « tools/push-to-trunk/common_includes.py ('k') | tools/push-to-trunk/push_to_trunk.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698