Suppress error handling for test coverage in push and merge scripts.

- This adds a suppression of lines concerning error handling for the test coverage analysis
- Fixes also calling push-to-trunk from auto-roll

TEST=tools/push-to-trunk/script_test.py
TBR=ulan@chromium.org

Review URL: https://codereview.chromium.org/196883003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19838 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
machenbach@chromium.org 2014-03-12 10:45:23 +00:00
parent 3aac1d3c07
commit 7c778096b1
6 changed files with 37 additions and 36 deletions

View File

@ -82,7 +82,7 @@ class FetchLatestRevision(Step):
def RunStep(self):
match = re.match(r"^r(\d+) ", self.GitSVNLog())
if not match:
if not match: # pragma: no cover
self.Die("Could not extract current svn revision from log.")
self["latest"] = match.group(1)
@ -96,7 +96,7 @@ class CheckLastPush(Step):
# TODO(machenbach): This metric counts all revisions. It could be
# improved by counting only the revisions on bleeding_edge.
if int(self["latest"]) - last_push < 10:
if int(self["latest"]) - last_push < 10: # pragma: no cover
# This makes sure the script doesn't push twice in a row when the cron
# job retries several times.
self.Die("Last push too recently: %d" % last_push)
@ -138,8 +138,9 @@ class PushToTrunk(Step):
# TODO(machenbach): Update the script before calling it.
try:
if self._options.push:
P = push_to_trunk.PushToTrunk
self._side_effect_handler.Call(
PushToTrunk(push_to_trunk.CONFIG, self._side_effect_handler).Run,
P(push_to_trunk.CONFIG, self._side_effect_handler).Run,
["-a", self._options.author,
"-c", self._options.chromium,
"-r", self._options.reviewer,
@ -163,7 +164,7 @@ class AutoRoll(ScriptsBase):
help="A file with the password to the status app.")
def _ProcessOptions(self, options):
if not options.author or not options.reviewer:
if not options.author or not options.reviewer: # pragma: no cover
print "You need to specify author and reviewer."
return False
options.requires_editor = False
@ -181,5 +182,5 @@ class AutoRoll(ScriptsBase):
]
if __name__ == "__main__":
if __name__ == "__main__": # pragma: no cover
sys.exit(AutoRoll(CONFIG).Run())

View File

@ -192,7 +192,7 @@ def Command(cmd, args="", prefix="", pipe=True):
# Wrapper for side effects.
class SideEffectHandler(object):
class SideEffectHandler(object): # pragma: no cover
def Call(self, fun, *args, **kwargs):
return fun(*args, **kwargs)
@ -270,7 +270,7 @@ class Step(GitRecipesMixin):
# Persist state.
TextToFile(json.dumps(self._state), state_file)
def RunStep(self):
def RunStep(self): # pragma: no cover
raise NotImplementedError
def Retry(self, cb, retry_on=None, wait_plan=None):
@ -295,7 +295,7 @@ class Step(GitRecipesMixin):
except Exception:
got_exception = True
if got_exception or retry_on(result):
if not wait_plan:
if not wait_plan: # pragma: no cover
raise Exception("Retried too often. Giving up.")
wait_time = wait_plan.pop()
print "Waiting for %f seconds." % wait_time
@ -343,7 +343,7 @@ class Step(GitRecipesMixin):
raise Exception(msg)
def DieNoManualMode(self, msg=""):
if not self._options.manual:
if not self._options.manual: # pragma: no cover
msg = msg or "Only available in manual mode."
self.Die(msg)
@ -365,17 +365,17 @@ class Step(GitRecipesMixin):
def InitialEnvironmentChecks(self):
# Cancel if this is not a git checkout.
if not os.path.exists(self._config[DOT_GIT_LOCATION]):
if not os.path.exists(self._config[DOT_GIT_LOCATION]): # pragma: no cover
self.Die("This is not a git checkout, this script won't work for you.")
# Cancel if EDITOR is unset or not executable.
if (self._options.requires_editor and (not os.environ.get("EDITOR") or
Command("which", os.environ["EDITOR"]) is None)):
Command("which", os.environ["EDITOR"]) is None)): # pragma: no cover
self.Die("Please set your EDITOR environment variable, you'll need it.")
def CommonPrepare(self):
# Check for a clean workdir.
if not self.GitIsWorkdirClean():
if not self.GitIsWorkdirClean(): # pragma: no cover
self.Die("Workspace is not clean. Please commit or undo your changes.")
# Persist current branch.
@ -507,7 +507,7 @@ class ScriptsBase(object):
def _ProcessOptions(self, options):
return True
def _Steps(self):
def _Steps(self): # pragma: no cover
raise Exception("Not implemented.")
def MakeOptions(self, args=None):
@ -522,13 +522,13 @@ class ScriptsBase(object):
self._PrepareOptions(parser)
if args is None:
if args is None: # pragma: no cover
options = parser.parse_args()
else:
options = parser.parse_args(args)
# Process common options.
if options.step < 0:
if options.step < 0: # pragma: no cover
print "Bad step number %d" % options.step
parser.print_help()
return None

View File

@ -68,7 +68,7 @@ class GitRecipesMixin(object):
for line in self.Git("status -s -b -uno").strip().splitlines():
match = re.match(r"^## (.+)", line)
if match: return match.group(1)
raise Exception("Couldn't find curent branch.")
raise Exception("Couldn't find curent branch.") # pragma: no cover
@Strip
def GitLog(self, n=0, format="", grep="", git_hash="", parent_hash="",

View File

@ -57,7 +57,7 @@ class Preparation(Step):
if os.path.exists(self.Config(ALREADY_MERGING_SENTINEL_FILE)):
if self._options.force:
os.remove(self.Config(ALREADY_MERGING_SENTINEL_FILE))
elif self._options.step == 0:
elif self._options.step == 0: # pragma: no cover
self.Die("A merge is already in progress")
open(self.Config(ALREADY_MERGING_SENTINEL_FILE), "a").close()
@ -66,7 +66,7 @@ class Preparation(Step):
self["merge_to_branch"] = "bleeding_edge"
elif self._options.branch:
self["merge_to_branch"] = self._options.branch
else:
else: # pragma: no cover
self.Die("Please specify a branch to merge to")
self.CommonPrepare()
@ -95,7 +95,7 @@ class SearchArchitecturePorts(Step):
branch="svn/bleeding_edge")
for git_hash in git_hashes.splitlines():
svn_revision = self.GitSVNFindSVNRev(git_hash, "svn/bleeding_edge")
if not svn_revision:
if not svn_revision: # pragma: no cover
self.Die("Cannot determine svn revision for %s" % git_hash)
revision_title = self.GitLog(n=1, format="%s", git_hash=git_hash)
@ -123,7 +123,7 @@ class FindGitRevisions(Step):
self["patch_commit_hashes"] = []
for revision in self["full_revision_list"]:
next_hash = self.GitSVNFindGitHash(revision, "svn/bleeding_edge")
if not next_hash:
if not next_hash: # pragma: no cover
self.Die("Cannot determine git hash for r%s" % revision)
self["patch_commit_hashes"].append(next_hash)
@ -131,7 +131,7 @@ class FindGitRevisions(Step):
self["revision_list"] = ", ".join(map(lambda s: "r%s" % s,
self["full_revision_list"]))
if not self["revision_list"]:
if not self["revision_list"]: # pragma: no cover
self.Die("Revision list is empty.")
if self._options.revert:
@ -232,7 +232,7 @@ class PrepareSVN(Step):
self.GitSVNFetch()
commit_hash = self.GitLog(n=1, format="%H", grep=self["new_commit_msg"],
branch="svn/%s" % self["merge_to_branch"])
if not commit_hash:
if not commit_hash: # pragma: no cover
self.Die("Unable to map git commit to svn revision.")
self["svn_revision"] = self.GitSVNFindSVNRev(commit_hash)
print "subversion revision number is r%s" % self["svn_revision"]
@ -327,5 +327,5 @@ class MergeToBranch(ScriptsBase):
]
if __name__ == "__main__":
if __name__ == "__main__": # pragma: no cover
sys.exit(MergeToBranch(CONFIG).Run())

View File

@ -95,11 +95,11 @@ class DetectLastPush(Step):
# the push commit message.
last_push_title = self.GitLog(n=1, format="%s", git_hash=last_push)
last_push_be_svn = PUSH_MESSAGE_RE.match(last_push_title).group(1)
if not last_push_be_svn:
if not last_push_be_svn: # pragma: no cover
self.Die("Could not retrieve bleeding edge revision for trunk push %s"
% last_push)
last_push_bleeding_edge = self.GitSVNFindGitHash(last_push_be_svn)
if not last_push_bleeding_edge:
if not last_push_bleeding_edge: # pragma: no cover
self.Die("Could not retrieve bleeding edge git hash for trunk push %s"
% last_push)
@ -129,7 +129,7 @@ class PrepareChangeLog(Step):
# Fetch from Rietveld but only retry once with one second delay since
# there might be many revisions.
body = self.ReadURL(cl_url, wait_plan=[1])
except urllib2.URLError:
except urllib2.URLError: # pragma: no cover
pass
return body
@ -186,7 +186,7 @@ class EditChangeLog(Step):
changelog_entry = "\n".join(map(Fill80, changelog_entry.splitlines()))
changelog_entry = changelog_entry.lstrip()
if changelog_entry == "":
if changelog_entry == "": # pragma: no cover
self.Die("Empty ChangeLog entry.")
# Safe new change log for adding it later to the trunk patch.
@ -290,7 +290,7 @@ class SquashCommits(Step):
strip = lambda line: line.strip()
text = SplitMapJoin("\n\n", SplitMapJoin("\n", strip, " "), "\n\n")(text)
if not text:
if not text: # pragma: no cover
self.Die("Commit message editing failed.")
TextToFile(text, self.Config(COMMITMSG_FILE))
os.remove(self.Config(CHANGELOG_ENTRY_FILE))
@ -347,7 +347,7 @@ class SanityCheck(Step):
if not self.Confirm("Please check if your local checkout is sane: Inspect "
"%s, compile, run tests. Do you want to commit this new trunk "
"revision to the repository?" % self.Config(VERSION_FILE)):
self.Die("Execution canceled.")
self.Die("Execution canceled.") # pragma: no cover
class CommitSVN(Step):
@ -355,7 +355,7 @@ class CommitSVN(Step):
def RunStep(self):
result = self.GitSVNDCommit()
if not result:
if not result: # pragma: no cover
self.Die("'git svn dcommit' failed.")
result = filter(lambda x: re.search(r"^Committed r[0-9]+", x),
result.splitlines())
@ -405,10 +405,10 @@ class SwitchChromium(Step):
os.chdir(self["chrome_path"])
self.InitialEnvironmentChecks()
# Check for a clean workdir.
if not self.GitIsWorkdirClean():
if not self.GitIsWorkdirClean(): # pragma: no cover
self.Die("Workspace is not clean. Please commit or undo your changes.")
# Assert that the DEPS file is there.
if not os.path.exists(self.Config(DEPS_FILE)):
if not os.path.exists(self.Config(DEPS_FILE)): # pragma: no cover
self.Die("DEPS file not present.")
@ -468,7 +468,7 @@ class CleanUp(Step):
print("Congratulations, you have successfully created the trunk "
"revision %s and rolled it into Chromium. Please don't forget to "
"update the v8rel spreadsheet:" % self["version"])
else:
else: # pragma: no cover
print("Congratulations, you have successfully created the trunk "
"revision %s. Please don't forget to roll this new version into "
"Chromium, and to update the v8rel spreadsheet:"
@ -500,7 +500,7 @@ class PushToTrunk(ScriptsBase):
parser.add_argument("-l", "--last-push",
help="The git commit ID of the last push to trunk.")
def _ProcessOptions(self, options):
def _ProcessOptions(self, options): # pragma: no cover
if not options.manual and not options.reviewer:
print "A reviewer (-r) is required in (semi-)automatic mode."
return False
@ -543,5 +543,5 @@ class PushToTrunk(ScriptsBase):
]
if __name__ == "__main__":
if __name__ == "__main__": # pragma: no cover
sys.exit(PushToTrunk(CONFIG).Run())

View File

@ -802,7 +802,7 @@ Performance and stability improvements on all platforms.""", commit)
])
auto_roll.AutoRoll(TEST_CONFIG, self).Run(
AUTO_ROLL_ARGS + ["--status-password", password])
AUTO_ROLL_ARGS + ["--status-password", password, "--push"])
state = json.loads(FileToText("%s-state.json"
% TEST_CONFIG[PERSISTFILE_BASENAME]))