diff options
author | Matt Clay <matt@mystile.com> | 2017-03-15 11:10:50 -0700 |
---|---|---|
committer | Matt Clay <matt@mystile.com> | 2017-03-15 11:32:41 -0700 |
commit | c9ea993c88179911a2e6d2f90acb603f6f7ced1f (patch) | |
tree | 4200d44fe29e665821942830b722ba10225d3a29 | |
parent | d86e2e2aa9df99371c48add44e63dd72e7c0a7ab (diff) | |
download | ansible-c9ea993c88179911a2e6d2f90acb603f6f7ced1f.tar.gz |
Verify SHA in Shippable change detection.
(cherry picked from commit 5e9a2b8528a0f49f0a5b3e1fe7af9cef0b2cd107)
-rw-r--r-- | test/runner/lib/changes.py | 8 | ||||
-rw-r--r-- | test/runner/lib/git.py | 13 |
2 files changed, 18 insertions, 3 deletions
diff --git a/test/runner/lib/changes.py b/test/runner/lib/changes.py index 04205d1930..8fc27f9666 100644 --- a/test/runner/lib/changes.py +++ b/test/runner/lib/changes.py @@ -71,7 +71,7 @@ class ShippableChanges(object): self.paths = sorted(git.get_diff_names([self.branch])) else: merge_runs = self.get_merge_runs(self.project_id, self.branch) - last_successful_commit = self.get_last_successful_commit(merge_runs) + last_successful_commit = self.get_last_successful_commit(git, merge_runs) if last_successful_commit: self.paths = sorted(git.get_diff_names([last_successful_commit, self.commit])) @@ -96,8 +96,9 @@ class ShippableChanges(object): return response.json() @staticmethod - def get_last_successful_commit(merge_runs): + def get_last_successful_commit(git, merge_runs): """ + :type git: Git :type merge_runs: dict | list[dict] :rtype: str """ @@ -114,7 +115,8 @@ class ShippableChanges(object): if commit_sha not in known_commits: known_commits.add(commit_sha) if merge_run['statusCode'] == 30: - last_successful_commit = commit_sha + if git.is_valid_ref(commit_sha): + last_successful_commit = commit_sha return last_successful_commit diff --git a/test/runner/lib/git.py b/test/runner/lib/git.py index b732a5dbe1..4161347646 100644 --- a/test/runner/lib/git.py +++ b/test/runner/lib/git.py @@ -4,6 +4,7 @@ from __future__ import absolute_import, print_function from lib.util import ( CommonConfig, + SubprocessError, run_command, ) @@ -55,6 +56,18 @@ class Git(object): cmd = ['merge-base', '--fork-point', branch] return self.run_git(cmd).strip() + def is_valid_ref(self, ref): + """ + :type ref: str + :rtype: bool + """ + cmd = ['show', ref] + try: + self.run_git(cmd) + return True + except SubprocessError: + return False + def run_git_split(self, cmd, separator=None): """ :type cmd: list[str] |