summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Clay <matt@mystile.com>2017-03-15 11:10:50 -0700
committerMatt Clay <matt@mystile.com>2017-03-15 11:32:41 -0700
commitc9ea993c88179911a2e6d2f90acb603f6f7ced1f (patch)
tree4200d44fe29e665821942830b722ba10225d3a29
parentd86e2e2aa9df99371c48add44e63dd72e7c0a7ab (diff)
downloadansible-c9ea993c88179911a2e6d2f90acb603f6f7ced1f.tar.gz
Verify SHA in Shippable change detection.
(cherry picked from commit 5e9a2b8528a0f49f0a5b3e1fe7af9cef0b2cd107)
-rw-r--r--test/runner/lib/changes.py8
-rw-r--r--test/runner/lib/git.py13
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]