Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -125,13 +125,15 @@ static PullRequestInfo buildPullRequestInfo(
}

// complete with CI vars if user didn't provide all information
PullRequestInfo ciInfo = PullRequestInfo.merge(userInfo, ciProviderInfo.buildPullRequestInfo());
PullRequestInfo ciInfo =
PullRequestInfo.coalesce(userInfo, ciProviderInfo.buildPullRequestInfo());
String headSha = ciInfo.getHeadCommit().getSha();
if (Strings.isNotBlank(headSha)) {
// if head sha present try to populate author, committer and message info through git client
try {
CommitInfo commitInfo = gitClient.getCommitInfo(headSha, true);
return PullRequestInfo.merge(ciInfo, new PullRequestInfo(null, null, commitInfo, null));
return PullRequestInfo.coalesce(
ciInfo, new PullRequestInfo(null, null, null, commitInfo, null));
} catch (Exception ignored) {
}
}
Expand All @@ -145,6 +147,7 @@ private static PullRequestInfo buildUserPullRequestInfo(
new PullRequestInfo(
config.getGitPullRequestBaseBranch(),
config.getGitPullRequestBaseBranchSha(),
null,
new CommitInfo(config.getGitCommitHeadSha()),
null);

Expand All @@ -164,10 +167,11 @@ private static PullRequestInfo buildUserPullRequestInfo(
new PullRequestInfo(
null,
mergeBase,
null,
new CommitInfo(environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA)),
null);

return PullRequestInfo.merge(userInfo, ddCiInfo);
return PullRequestInfo.coalesce(userInfo, ddCiInfo);
}

private static String getRepoRoot(CIInfo ciInfo, GitClient.Factory gitClientFactory) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(APPVEYOR_REPO_BRANCH)),
null,
null,
new CommitInfo(environment.get(APPVEYOR_PR_HEAD_COMMIT)),
environment.get(APPVEYOR_PR_NUMBER));
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(AZURE_PR_TARGET_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(AZURE_PR_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(BITBUCKET_PR_DESTINATION_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(BITBUCKET_PR_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(BITRISE_GIT_BRANCH_DEST)),
null,
null,
CommitInfo.NOOP,
environment.get(BITRISE_PR_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(BUDDY_RUN_PR_BASE_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(BUDDY_RUN_PR_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(BUILDKITE_PULL_REQUEST_BASE_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(BUILDKITE_PULL_REQUEST_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public Map<String, String> getCiTags(CIInfo ciInfo, PullRequestInfo pullRequestI
.withAdditionalTags(ciInfo.getAdditionalTags())
.withPullRequestBaseBranch(pullRequestInfo)
.withPullRequestBaseBranchSha(pullRequestInfo)
.withPullRequestBaseBranchHeadSha(pullRequestInfo)
.withGitCommitHeadSha(pullRequestInfo)
.withGitCommitHeadAuthorName(pullRequestInfo)
.withGitCommitHeadAuthorEmail(pullRequestInfo)
Expand Down Expand Up @@ -130,13 +131,16 @@ public CITagsBuilder withAdditionalTags(final Map<String, String> additionalTags
}

public CITagsBuilder withPullRequestBaseBranch(final PullRequestInfo pullRequestInfo) {
return putTagValue(
Tags.GIT_PULL_REQUEST_BASE_BRANCH, pullRequestInfo.getPullRequestBaseBranch());
return putTagValue(Tags.GIT_PULL_REQUEST_BASE_BRANCH, pullRequestInfo.getBaseBranch());
}

public CITagsBuilder withPullRequestBaseBranchSha(final PullRequestInfo pullRequestInfo) {
return putTagValue(Tags.GIT_PULL_REQUEST_BASE_BRANCH_SHA, pullRequestInfo.getBaseBranchSha());
}

public CITagsBuilder withPullRequestBaseBranchHeadSha(final PullRequestInfo pullRequestInfo) {
return putTagValue(
Tags.GIT_PULL_REQUEST_BASE_BRANCH_SHA, pullRequestInfo.getPullRequestBaseBranchSha());
Tags.GIT_PULL_REQUEST_BASE_BRANCH_HEAD_SHA, pullRequestInfo.getBaseBranchHeadSha());
}

public CITagsBuilder withGitCommitHeadSha(final PullRequestInfo pullRequestInfo) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ public CIInfo buildCIInfo() {
@Nonnull
@Override
public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(null, null, CommitInfo.NOOP, environment.get(CIRCLECI_PR_NUMBER));
return new PullRequestInfo(
null, null, null, CommitInfo.NOOP, environment.get(CIRCLECI_PR_NUMBER));
}

private String buildPipelineUrl(final String pipelineId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(CF_PULL_REQUEST_TARGET_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(CF_PULL_REQUEST_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(DRONE_PULL_REQUEST_TARGET_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(DRONE_PULL_REQUEST_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(GITLAB_PULL_REQUEST_BASE_BRANCH)),
null,
null,
new CommitInfo(environment.get(GITLAB_PULL_REQUEST_COMMIT_HEAD_SHA)),
environment.get(GITLAB_PULL_REQUEST_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public PullRequestInfo buildPullRequestInfo() {
moshi.adapter(Types.newParameterizedType(Map.class, String.class, Object.class));
Map<String, Object> eventJson = mapJsonAdapter.fromJson(event);

String baseSha = null;
String baseBranchHeadSha = null;
String headSha = null;
String prNumber = null;

Expand All @@ -120,7 +120,7 @@ public PullRequestInfo buildPullRequestInfo() {

Map<String, Object> base = (Map<String, Object>) pullRequest.get("base");
if (base != null) {
baseSha = (String) base.get("sha");
baseBranchHeadSha = (String) base.get("sha");
}

Double number = (Double) pullRequest.get("number");
Expand All @@ -129,11 +129,12 @@ public PullRequestInfo buildPullRequestInfo() {
}
}

return new PullRequestInfo(baseRef, baseSha, new CommitInfo(headSha), prNumber);
return new PullRequestInfo(
baseRef, null, baseBranchHeadSha, new CommitInfo(headSha), prNumber);

} catch (Exception e) {
LOGGER.warn("Error while parsing GitHub event", e);
return new PullRequestInfo(baseRef, null, CommitInfo.NOOP, null);
return new PullRequestInfo(baseRef, null, null, CommitInfo.NOOP, null);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(JENKINS_PR_BASE_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(JENKINS_PR_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,37 @@
public class PullRequestInfo {

public static final PullRequestInfo EMPTY =
new PullRequestInfo(null, null, CommitInfo.NOOP, null);
new PullRequestInfo(null, null, null, CommitInfo.NOOP, null);

private final String pullRequestBaseBranch;
private final String pullRequestBaseBranchSha;
private final String baseBranch;
private final String baseBranchSha;
private final String baseBranchHeadSha;
@Nonnull private final CommitInfo headCommit;
private final String pullRequestNumber;

public PullRequestInfo(
String pullRequestBaseBranch,
String pullRequestBaseBranchSha,
String baseBranch,
String baseBranchSha,
String baseBranchHeadSha,
@Nonnull CommitInfo headCommit,
String pullRequestNumber) {
this.pullRequestBaseBranch = pullRequestBaseBranch;
this.pullRequestBaseBranchSha = pullRequestBaseBranchSha;
this.baseBranch = baseBranch;
this.baseBranchSha = baseBranchSha;
this.baseBranchHeadSha = baseBranchHeadSha;
this.headCommit = headCommit;
this.pullRequestNumber = pullRequestNumber;
}

public String getPullRequestBaseBranch() {
return pullRequestBaseBranch;
public String getBaseBranch() {
return baseBranch;
}

public String getPullRequestBaseBranchSha() {
return pullRequestBaseBranchSha;
public String getBaseBranchSha() {
return baseBranchSha;
}

public String getBaseBranchHeadSha() {
return baseBranchHeadSha;
}

@Nonnull
Expand All @@ -44,38 +51,36 @@ public String getPullRequestNumber() {
}

public boolean isEmpty() {
return Strings.isBlank(pullRequestBaseBranch)
&& Strings.isBlank(pullRequestBaseBranchSha)
return Strings.isBlank(baseBranch)
&& Strings.isBlank(baseBranchSha)
&& Strings.isBlank(baseBranchHeadSha)
&& headCommit.isEmpty()
&& Strings.isBlank(pullRequestNumber);
}

public boolean isComplete() {
return Strings.isNotBlank(pullRequestBaseBranch)
&& Strings.isNotBlank(pullRequestBaseBranchSha)
return Strings.isNotBlank(baseBranch)
&& Strings.isNotBlank(baseBranchSha)
&& Strings.isNotBlank(baseBranchHeadSha)
&& headCommit.isComplete()
&& Strings.isNotBlank(pullRequestNumber);
}

/**
* Merges info by completing the empty information fields with the fallback's
* Combine infos by completing the empty information fields in {@code first} with {@code second}'s
*
* @param info Base PR info
* @param fallback Fallback PR info
* @return Completed PR info
* @param first Base PR info
* @param second Fallback PR info
* @return Combined PR info
*/
public static PullRequestInfo merge(PullRequestInfo info, PullRequestInfo fallback) {
public static PullRequestInfo coalesce(
final PullRequestInfo first, final PullRequestInfo second) {
return new PullRequestInfo(
Strings.isNotBlank(info.pullRequestBaseBranch)
? info.pullRequestBaseBranch
: fallback.pullRequestBaseBranch,
Strings.isNotBlank(info.pullRequestBaseBranchSha)
? info.pullRequestBaseBranchSha
: fallback.pullRequestBaseBranchSha,
CommitInfo.merge(info.headCommit, fallback.headCommit),
Strings.isNotBlank(info.pullRequestNumber)
? info.pullRequestNumber
: fallback.pullRequestNumber);
Strings.coalesce(first.baseBranch, second.baseBranch),
Strings.coalesce(first.baseBranchSha, second.baseBranchSha),
Strings.coalesce(first.baseBranchHeadSha, second.baseBranchHeadSha),
CommitInfo.coalesce(first.headCommit, second.headCommit),
Strings.coalesce(first.pullRequestNumber, second.pullRequestNumber));
}

@Override
Expand All @@ -87,26 +92,29 @@ public boolean equals(Object o) {
return false;
}
PullRequestInfo that = (PullRequestInfo) o;
return Objects.equals(pullRequestBaseBranch, that.pullRequestBaseBranch)
&& Objects.equals(pullRequestBaseBranchSha, that.pullRequestBaseBranchSha)
return Objects.equals(baseBranch, that.baseBranch)
&& Objects.equals(baseBranchSha, that.baseBranchSha)
&& Objects.equals(baseBranchHeadSha, that.baseBranchHeadSha)
&& Objects.equals(headCommit, that.headCommit)
&& Objects.equals(pullRequestNumber, that.pullRequestNumber);
}

@Override
public int hashCode() {
return Objects.hash(
pullRequestBaseBranch, pullRequestBaseBranchSha, headCommit, pullRequestNumber);
return Objects.hash(baseBranch, baseBranchSha, headCommit, pullRequestNumber);
}

@Override
public String toString() {
return "PR{"
+ "baseBranch='"
+ pullRequestBaseBranch
+ baseBranch
+ '\''
+ ", baseSHA='"
+ pullRequestBaseBranchSha
+ baseBranchSha
+ '\''
+ ", baseHeadSHA='"
+ baseBranchHeadSha
+ '\''
+ ", headCommit='"
+ headCommit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(TEAMCITY_PULL_REQUEST_TARGET_BRANCH)),
null,
null,
CommitInfo.NOOP,
environment.get(TEAMCITY_PULL_REQUEST_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public PullRequestInfo buildPullRequestInfo() {
return new PullRequestInfo(
normalizeBranch(environment.get(TRAVIS_GIT_BRANCH)),
null,
null,
new CommitInfo(environment.get(TRAVIS_PR_HEAD_SHA)),
environment.get(TRAVIS_PR_NUMBER));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -423,10 +423,16 @@ private Diff getPullRequestDiff(boolean impactedTestsDetectionEnabled, String de
// ensure repo is not shallow before attempting to get git diff
gitRepoUnshallow.unshallow();

String baseCommitSha = pullRequestInfo.getPullRequestBaseBranchSha();
String baseCommitSha = pullRequestInfo.getBaseBranchSha();
if (baseCommitSha == null && pullRequestInfo.getBaseBranchHeadSha() != null) {
baseCommitSha =
gitClient.getMergeBase(
pullRequestInfo.getBaseBranchHeadSha(), pullRequestInfo.getHeadCommit().getSha());
}

if (baseCommitSha == null) {
baseCommitSha =
gitClient.getBaseCommitSha(pullRequestInfo.getPullRequestBaseBranch(), defaultBranch);
gitClient.getBaseCommitSha(pullRequestInfo.getBaseBranch(), defaultBranch);
}

Diff diff = gitClient.getGitDiff(baseCommitSha, pullRequestInfo.getHeadCommit().getSha());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class CiVisibilityRepoServicesTest extends Specification {
setup:
def expectedInfo = new PullRequestInfo(
"master",
"baseSha",
"baseSha", null,
new CommitInfo(
"sourceSha",
new PersonInfo("john", "[email protected]", "never"),
Expand All @@ -47,18 +47,18 @@ class CiVisibilityRepoServicesTest extends Specification {
)

def config = Stub(Config)
config.getGitPullRequestBaseBranch() >> expectedInfo.getPullRequestBaseBranch()
config.getGitPullRequestBaseBranch() >> expectedInfo.getBaseBranch()

def environment = Stub(CiEnvironment)
environment.get(Constants.DDCI_PULL_REQUEST_TARGET_SHA) >> "targetSha"
environment.get(Constants.DDCI_PULL_REQUEST_SOURCE_SHA) >> expectedInfo.getHeadCommit().getSha()

def repoUnshallow = Stub(GitRepoUnshallow)
def ciProviderInfo = Stub(CIProviderInfo)
ciProviderInfo.buildPullRequestInfo() >> new PullRequestInfo(null, null, CommitInfo.NOOP, expectedInfo.getPullRequestNumber())
ciProviderInfo.buildPullRequestInfo() >> new PullRequestInfo(null, null, null, CommitInfo.NOOP, expectedInfo.getPullRequestNumber())

def gitClient = Stub(GitClient)
gitClient.getMergeBase("targetSha", "sourceSha") >> expectedInfo.getPullRequestBaseBranchSha()
gitClient.getMergeBase("targetSha", "sourceSha") >> expectedInfo.getBaseBranchSha()
gitClient.getCommitInfo("sourceSha", true) >> expectedInfo.getHeadCommit()

expect:
Expand Down
Loading