| Index: tools/push-to-trunk/test_scripts.py
|
| diff --git a/tools/push-to-trunk/test_scripts.py b/tools/push-to-trunk/test_scripts.py
|
| index d32c4e16c2cc2fb252992ee7c9216144bcb6a457..242efba8bcbbc30732bfaa6fa5f703b88f450ab6 100644
|
| --- a/tools/push-to-trunk/test_scripts.py
|
| +++ b/tools/push-to-trunk/test_scripts.py
|
| @@ -31,15 +31,17 @@ import tempfile
|
| import traceback
|
| import unittest
|
|
|
| -import common_includes
|
| -from common_includes import *
|
| -import push_to_trunk
|
| -from push_to_trunk import *
|
| import auto_roll
|
| from auto_roll import AutoRollOptions
|
| from auto_roll import CheckLastPush
|
| from auto_roll import FetchLatestRevision
|
| from auto_roll import SETTINGS_LOCATION
|
| +import common_includes
|
| +from common_includes import *
|
| +import merge_to_branch
|
| +from merge_to_branch import *
|
| +import push_to_trunk
|
| +from push_to_trunk import *
|
|
|
|
|
| TEST_CONFIG = {
|
| @@ -56,11 +58,15 @@ TEST_CONFIG = {
|
| CHROMIUM: "/tmp/test-v8-push-to-trunk-tempfile-chromium",
|
| DEPS_FILE: "/tmp/test-v8-push-to-trunk-tempfile-chromium/DEPS",
|
| SETTINGS_LOCATION: None,
|
| + ALREADY_MERGING_SENTINEL_FILE:
|
| + "/tmp/test-merge-to-branch-tempfile-already-merging",
|
| + COMMIT_HASHES_FILE: "/tmp/test-merge-to-branch-tempfile-PATCH_COMMIT_HASHES",
|
| + TEMPORARY_PATCH_FILE: "/tmp/test-merge-to-branch-tempfile-temporary-patch",
|
| }
|
|
|
|
|
| def MakeOptions(s=0, l=None, f=False, m=True, r=None, c=None, a=None,
|
| - status_password=None):
|
| + status_password=None, revert_bleeding_edge=None, p=None):
|
| """Convenience wrapper."""
|
| class Options(object):
|
| pass
|
| @@ -69,10 +75,12 @@ def MakeOptions(s=0, l=None, f=False, m=True, r=None, c=None, a=None,
|
| options.l = l
|
| options.f = f
|
| options.m = m
|
| - options.r = r
|
| + options.reviewer = r
|
| options.c = c
|
| options.a = a
|
| + options.p = p
|
| options.status_password = status_password
|
| + options.revert_bleeding_edge = revert_bleeding_edge
|
| return options
|
|
|
|
|
| @@ -228,7 +236,7 @@ class SimpleMock(object):
|
| try:
|
| expected_call = self._recipe[self._index]
|
| except IndexError:
|
| - raise Exception("Calling %s %s" % (self._name, " ".join(args)))
|
| + raise NoRetryException("Calling %s %s" % (self._name, " ".join(args)))
|
|
|
| # Pack expectations without arguments into a list.
|
| if not isinstance(expected_call, list):
|
| @@ -303,6 +311,10 @@ class ScriptTest(unittest.TestCase):
|
|
|
| MOCKS = {
|
| "git": GitMock,
|
| + # TODO(machenbach): Little hack to reuse the git mock for the one svn call
|
| + # in merge-to-branch. The command should be made explicit in the test
|
| + # expectations.
|
| + "svn": GitMock,
|
| "vi": LogMock,
|
| }
|
|
|
| @@ -837,6 +849,124 @@ Performance and stability improvements on all platforms.""", commit)
|
| auto_roll.RunAutoRoll(TEST_CONFIG, AutoRollOptions(MakeOptions()), self)
|
| self.assertRaises(Exception, RunAutoRoll)
|
|
|
| + def testMergeToBranch(self):
|
| + TEST_CONFIG[ALREADY_MERGING_SENTINEL_FILE] = self.MakeEmptyTempFile()
|
| + TEST_CONFIG[DOT_GIT_LOCATION] = self.MakeEmptyTempFile()
|
| + TEST_CONFIG[VERSION_FILE] = self.MakeTempVersionFile()
|
| + os.environ["EDITOR"] = "vi"
|
| + extra_patch = self.MakeEmptyTempFile()
|
| +
|
| + def VerifyPatch(patch):
|
| + return lambda: self.assertEquals(patch,
|
| + FileToText(TEST_CONFIG[TEMPORARY_PATCH_FILE]))
|
| +
|
| + msg = """Merged r12345, r23456, r34567, r45678, r56789 into trunk branch.
|
| +
|
| +Title4
|
| +
|
| +Title2
|
| +
|
| +Title3
|
| +
|
| +Title1
|
| +
|
| +Title5
|
| +
|
| +BUG=123,234,345,456,567,v8:123
|
| +LOG=N
|
| +"""
|
| +
|
| + def VerifySVNCommit():
|
| + commit = FileToText(TEST_CONFIG[COMMITMSG_FILE])
|
| + self.assertEquals(msg, commit)
|
| + version = FileToText(TEST_CONFIG[VERSION_FILE])
|
| + self.assertTrue(re.search(r"#define MINOR_VERSION\s+22", version))
|
| + self.assertTrue(re.search(r"#define BUILD_NUMBER\s+5", version))
|
| + self.assertTrue(re.search(r"#define PATCH_LEVEL\s+1", version))
|
| + self.assertTrue(re.search(r"#define IS_CANDIDATE_VERSION\s+0", version))
|
| +
|
| + self.ExpectGit([
|
| + ["status -s -uno", ""],
|
| + ["status -s -b -uno", "## some_branch\n"],
|
| + ["svn fetch", ""],
|
| + ["branch", " branch1\n* branch2\n"],
|
| + ["checkout -b %s" % TEST_CONFIG[TEMP_BRANCH], ""],
|
| + ["branch", " branch1\n* branch2\n"],
|
| + ["checkout -b %s svn/trunk" % TEST_CONFIG[BRANCHNAME], ""],
|
| + ["log svn/bleeding_edge --reverse --format=%H --grep=\"Port r12345\"",
|
| + "hash1\nhash2"],
|
| + ["svn find-rev hash1 svn/bleeding_edge", "45678"],
|
| + ["log -1 --format=%s hash1", "Title1"],
|
| + ["svn find-rev hash2 svn/bleeding_edge", "23456"],
|
| + ["log -1 --format=%s hash2", "Title2"],
|
| + ["log svn/bleeding_edge --reverse --format=%H --grep=\"Port r23456\"",
|
| + ""],
|
| + ["log svn/bleeding_edge --reverse --format=%H --grep=\"Port r34567\"",
|
| + "hash3"],
|
| + ["svn find-rev hash3 svn/bleeding_edge", "56789"],
|
| + ["log -1 --format=%s hash3", "Title3"],
|
| + ["svn find-rev \"r12345\" svn/bleeding_edge", "hash4"],
|
| + ["svn find-rev \"r23456\" svn/bleeding_edge", "hash2"],
|
| + ["svn find-rev \"r34567\" svn/bleeding_edge", "hash3"],
|
| + ["svn find-rev \"r45678\" svn/bleeding_edge", "hash1"],
|
| + ["svn find-rev \"r56789\" svn/bleeding_edge", "hash5"],
|
| + ["log -1 --format=%s hash4", "Title4"],
|
| + ["log -1 --format=%s hash2", "Title2"],
|
| + ["log -1 --format=%s hash3", "Title3"],
|
| + ["log -1 --format=%s hash1", "Title1"],
|
| + ["log -1 --format=%s hash5", "Title5"],
|
| + ["log -1 hash4", "Title4\nBUG=123\nBUG=234"],
|
| + ["log -1 hash2", "Title2\n BUG = v8:123,345"],
|
| + ["log -1 hash3", "Title3\nLOG=n\nBUG=567, 456"],
|
| + ["log -1 hash1", "Title1"],
|
| + ["log -1 hash5", "Title5"],
|
| + ["log -1 -p hash4", "patch4"],
|
| + ["apply --index --reject \"%s\"" % TEST_CONFIG[TEMPORARY_PATCH_FILE],
|
| + "", VerifyPatch("patch4")],
|
| + ["log -1 -p hash2", "patch2"],
|
| + ["apply --index --reject \"%s\"" % TEST_CONFIG[TEMPORARY_PATCH_FILE],
|
| + "", VerifyPatch("patch2")],
|
| + ["log -1 -p hash3", "patch3"],
|
| + ["apply --index --reject \"%s\"" % TEST_CONFIG[TEMPORARY_PATCH_FILE],
|
| + "", VerifyPatch("patch3")],
|
| + ["log -1 -p hash1", "patch1"],
|
| + ["apply --index --reject \"%s\"" % TEST_CONFIG[TEMPORARY_PATCH_FILE],
|
| + "", VerifyPatch("patch1")],
|
| + ["log -1 -p hash5", "patch5"],
|
| + ["apply --index --reject \"%s\"" % TEST_CONFIG[TEMPORARY_PATCH_FILE],
|
| + "", VerifyPatch("patch5")],
|
| + ["apply --index --reject \"%s\"" % extra_patch, ""],
|
| + ["commit -a -F \"%s\"" % TEST_CONFIG[COMMITMSG_FILE], ""],
|
| + ["cl upload -r \"reviewer@chromium.org\" --send-mail", ""],
|
| + ["checkout %s" % TEST_CONFIG[BRANCHNAME], ""],
|
| + ["cl presubmit", "Presubmit successfull\n"],
|
| + ["cl dcommit -f --bypass-hooks", "Closing issue\n", VerifySVNCommit],
|
| + ["svn fetch", ""],
|
| + ["log -1 --format=%%H --grep=\"%s\" svn/trunk" % msg, "hash6"],
|
| + ["svn find-rev hash6", "1324"],
|
| + [("copy -r 1324 https://v8.googlecode.com/svn/trunk "
|
| + "https://v8.googlecode.com/svn/tags/3.22.5.1 -m "
|
| + "\"Tagging version 3.22.5.1\""), ""],
|
| + ["checkout -f some_branch", ""],
|
| + ["branch -D %s" % TEST_CONFIG[TEMP_BRANCH], ""],
|
| + ["branch -D %s" % TEST_CONFIG[BRANCHNAME], ""],
|
| + ])
|
| +
|
| + self.ExpectReadline([
|
| + "Y", # Automatically add corresponding ports (34567, 56789)?
|
| + "Y", # Automatically increment patch level?
|
| + "reviewer@chromium.org", # V8 reviewer.
|
| + "LGTM", # Enter LGTM for V8 CL.
|
| + ])
|
| +
|
| + options = MakeOptions(p=extra_patch, f=True)
|
| + # r12345 and r34567 are patches. r23456 (included) and r45678 are the MIPS
|
| + # ports of r12345. r56789 is the MIPS port of r34567.
|
| + args = ["trunk", "12345", "23456", "34567"]
|
| + self.assertTrue(merge_to_branch.ProcessOptions(options, args))
|
| + RunMergeToBranch(TEST_CONFIG, MergeToBranchOptions(options, args), self)
|
| +
|
| +
|
| class SystemTest(unittest.TestCase):
|
| def testReload(self):
|
| step = MakeStep(step_class=PrepareChangeLog, number=0, state={}, config={},
|
|
|