Verify SHA in Shippable change detection.

pull/22684/head
Matt Clay 8 years ago
parent 273786d0bd
commit 5e9a2b8528

@ -71,7 +71,7 @@ class ShippableChanges(object):
self.paths = sorted(git.get_diff_names([self.branch])) self.paths = sorted(git.get_diff_names([self.branch]))
else: else:
merge_runs = self.get_merge_runs(self.project_id, self.branch) 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: if last_successful_commit:
self.paths = sorted(git.get_diff_names([last_successful_commit, self.commit])) self.paths = sorted(git.get_diff_names([last_successful_commit, self.commit]))
@ -96,8 +96,9 @@ class ShippableChanges(object):
return response.json() return response.json()
@staticmethod @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] :type merge_runs: dict | list[dict]
:rtype: str :rtype: str
""" """
@ -114,6 +115,7 @@ class ShippableChanges(object):
if commit_sha not in known_commits: if commit_sha not in known_commits:
known_commits.add(commit_sha) known_commits.add(commit_sha)
if merge_run['statusCode'] == 30: if merge_run['statusCode'] == 30:
if git.is_valid_ref(commit_sha):
last_successful_commit = commit_sha last_successful_commit = commit_sha
return last_successful_commit return last_successful_commit

@ -4,6 +4,7 @@ from __future__ import absolute_import, print_function
from lib.util import ( from lib.util import (
CommonConfig, CommonConfig,
SubprocessError,
run_command, run_command,
) )
@ -55,6 +56,18 @@ class Git(object):
cmd = ['merge-base', '--fork-point', branch] cmd = ['merge-base', '--fork-point', branch]
return self.run_git(cmd).strip() 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): def run_git_split(self, cmd, separator=None):
""" """
:type cmd: list[str] :type cmd: list[str]

Loading…
Cancel
Save