diff --git a/pom.xml b/pom.xml
index a2f4d38..e0ed9a3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,10 +50,10 @@
- 1.580.1
-
- 6
-
+
+ 2.46.3
+
+ 7
diff --git a/src/main/java/com/github/terma/jenkins/githubprcoveragestatus/GitUtils.java b/src/main/java/com/github/terma/jenkins/githubprcoveragestatus/GitUtils.java
index b44bbbe..f80ca60 100644
--- a/src/main/java/com/github/terma/jenkins/githubprcoveragestatus/GitUtils.java
+++ b/src/main/java/com/github/terma/jenkins/githubprcoveragestatus/GitUtils.java
@@ -23,6 +23,8 @@
@SuppressWarnings("WeakerAccess")
public class GitUtils {
+ public static final Pattern HTTP_GITHUB_REPO_URL = Pattern.compile("^(http[s]?://[^/]*/[^/]*/[^/]*).*");
+
public static final Pattern HTTP_GITHUB_USER_REPO_PATTERN = Pattern.compile("^(http[s]?://[^/]*)/([^/]*/[^/]*).*");
public static final Pattern SSH_GITHUB_USER_REPO_PATTERN = Pattern.compile("^.+:(.+)");
@@ -40,6 +42,33 @@ public static String getRepoName(String gitRepoUrl) {
return userRepo[1];
}
+ /**
+ * Extract repo URL part form Git URL. For example https://github.com/terma/test/pull/1
+ * should be converted to https://github.com/terma/test
+ *
+ * @param gitUrl - any type of Git URL
+ * @return repo URL exclude branches or pull request parts
+ */
+ public static String getRepoUrl(String gitUrl) {
+ String repoUrl = null;
+
+ if (gitUrl != null) {
+ if (gitUrl.startsWith("git@")) {
+ repoUrl = gitUrl;
+ } else {
+ Matcher m = HTTP_GITHUB_REPO_URL.matcher(gitUrl);
+ if (m.matches()) repoUrl = m.group(1);
+ }
+ }
+
+ if (repoUrl == null) {
+ throw new IllegalArgumentException(String.format("Invalid Git Hub repository URL: %s", gitUrl));
+ }
+
+ if (repoUrl.endsWith(".git")) repoUrl = repoUrl.substring(0, repoUrl.length() - ".git".length());
+ return repoUrl;
+ }
+
/**
* Extract user name and repo name from Git URL.
* For example: https://github.com/terma/jenkins-github-coverage-updater.git
@@ -62,7 +91,7 @@ public static String getUserRepo(final String gitRepoUrl) {
}
if (userRepo == null) {
- throw new IllegalStateException(String.format("Invalid Git Hub repository URL: %s", gitRepoUrl));
+ throw new IllegalArgumentException(String.format("Invalid Git Hub repository URL: %s", gitRepoUrl));
}
if (userRepo.endsWith(".git")) userRepo = userRepo.substring(0, userRepo.length() - ".git".length());
diff --git a/src/main/java/com/github/terma/jenkins/githubprcoveragestatus/PrIdAndUrlUtils.java b/src/main/java/com/github/terma/jenkins/githubprcoveragestatus/PrIdAndUrlUtils.java
index b0498d1..96ca7c6 100644
--- a/src/main/java/com/github/terma/jenkins/githubprcoveragestatus/PrIdAndUrlUtils.java
+++ b/src/main/java/com/github/terma/jenkins/githubprcoveragestatus/PrIdAndUrlUtils.java
@@ -75,12 +75,20 @@ public static int getPrId(
return id;
}
+ /**
+ * @param scmVars - scmVars
+ * @param build - build
+ * @param listener - listener
+ * @return - Git URL always Repo URL even if CHANGE_URL passed which in general PR URL
+ * @throws IOException inherited
+ * @throws InterruptedException inherited
+ */
public static String getGitUrl(final Map scmVars, final Run build, final TaskListener listener) throws IOException, InterruptedException {
Map envVars = build.getEnvironment(listener);
final String gitUrl = envVars.get(GIT_URL_PROPERTY);
final String changeUrl = envVars.get(CHANGE_URL_PROPERTY);
if (gitUrl != null) return gitUrl;
- else if (changeUrl != null) return changeUrl;
+ else if (changeUrl != null) return GitUtils.getRepoUrl(changeUrl); // change URL is full path to PR, so we normalize it to repo URL before return
else if (scmVars != null && scmVars.containsKey(GIT_URL_PROPERTY)) return scmVars.get(GIT_URL_PROPERTY);
else throw new UnsupportedOperationException("Can't find " + GIT_URL_PROPERTY
+ " or " + CHANGE_URL_PROPERTY + " in envs: " + envVars);
diff --git a/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/GitUtilsTest.java b/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/GitUtilsTest.java
index 05e909c..9c4d141 100644
--- a/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/GitUtilsTest.java
+++ b/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/GitUtilsTest.java
@@ -39,6 +39,38 @@ public void getUserRepo() {
GitUtils.getUserRepo("git@github.com:terma/jenkins-github-coverage-updater"));
}
+ @Test
+ public void getRepoUrl() {
+ try {
+ GitUtils.getRepoUrl(null);
+ Assert.fail();
+ } catch (IllegalArgumentException e) {
+ // all good
+ }
+
+ Assert.assertEquals(
+ "https://github.com/terma/jenkins-github-coverage-updater",
+ GitUtils.getRepoUrl("https://github.com/terma/jenkins-github-coverage-updater"));
+
+ Assert.assertEquals("https://github.com/terma/jenkins-github-coverage-updater",
+ GitUtils.getRepoUrl("https://github.com/terma/jenkins-github-coverage-updater.git"));
+
+ Assert.assertEquals("git@github.com:terma/jenkins-github-coverage-updater",
+ GitUtils.getRepoUrl("git@github.com:terma/jenkins-github-coverage-updater.git"));
+
+ Assert.assertEquals("git@github.com:terma/jenkins-github-coverage-updater",
+ GitUtils.getRepoUrl("git@github.com:terma/jenkins-github-coverage-updater"));
+
+ Assert.assertEquals("https://github.com/terma/test",
+ GitUtils.getRepoUrl("https://github.com/terma/test/pull/1"));
+
+ Assert.assertEquals("http://github.com/terma/test",
+ GitUtils.getRepoUrl("http://github.com/terma/test/pull/1"));
+
+ Assert.assertEquals("https://github.com/terma/test",
+ GitUtils.getRepoUrl("https://github.com/terma/test/tree/branch"));
+ }
+
@Test
public void getRepoName() {
Assert.assertEquals(
diff --git a/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/JacocoParserTest.java b/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/JacocoParserTest.java
index 25ef44b..cd12a95 100644
--- a/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/JacocoParserTest.java
+++ b/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/JacocoParserTest.java
@@ -50,7 +50,7 @@ public void throwExceptionWhenExtractCoverageFromJacocoAndNoLineTag() throws IOE
Assert.fail("Where is my exception?");
} catch (Exception e) {
String messageWithoutAbsolutePath = e.getMessage().replace(filePath, "FILE_PATH");
- Assert.assertEquals(
+ assertStringEqualsIgnoreSlashR(
"Strange Jacoco report!\n" +
"File path: FILE_PATH\n" +
"Can't extract float value by XPath: /report/counter[@type='LINE']/@missed\n" +
@@ -73,7 +73,7 @@ public void throwExceptionWhenExtractCoverageFromJacocoAndMissedNotNumber() thro
Assert.fail("Where is my exception?");
} catch (Exception e) {
String messageWithoutAbsolutePath = e.getMessage().replace(filePath, "FILE_PATH");
- Assert.assertEquals(
+ assertStringEqualsIgnoreSlashR(
"Strange Jacoco report!\n" +
"File path: FILE_PATH\n" +
"Can't extract float value by XPath: /report/counter[@type='LINE']/@missed\n" +
@@ -97,7 +97,7 @@ public void throwExceptionWhenExtractCoverageFromJacocoAndCoveredNotNumber() thr
Assert.fail("Where is my exception?");
} catch (Exception e) {
String messageWithoutAbsolutePath = e.getMessage().replace(filePath, "FILE_PATH");
- Assert.assertEquals(
+ assertStringEqualsIgnoreSlashR(
"Strange Jacoco report!\n" +
"File path: FILE_PATH\n" +
"Can't extract float value by XPath: /report/counter[@type='LINE']/@covered\n" +
@@ -121,4 +121,8 @@ public void throwExceptionWhenExtractCoverageFromJacocoAndNoFile() throws IOExce
}
}
+ private static void assertStringEqualsIgnoreSlashR(String a, String b) {
+ Assert.assertEquals(a.replaceAll("\\r", ""), b.replaceAll("\\r", ""));
+ }
+
}
diff --git a/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/PrIdAndUrlUtilsTest.java b/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/PrIdAndUrlUtilsTest.java
index 80c1482..c2ef4a4 100644
--- a/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/PrIdAndUrlUtilsTest.java
+++ b/src/test/java/com/github/terma/jenkins/githubprcoveragestatus/PrIdAndUrlUtilsTest.java
@@ -41,6 +41,7 @@ public class PrIdAndUrlUtilsTest {
private static final int PR_ID_INT = 12;
private static final int CHANGE_ID_INT = 13;
private static final int SCM_ENVS_PR_ID_INT = 14;
+ private static final String CHANGE_URL = "http://test.github.com/terma/test-repo/pr/123";
private Run build = mock(Run.class);
private EnvVars envVars = mock(EnvVars.class);
@@ -120,9 +121,9 @@ public void getGitUrlGitUrlHasPriority() throws IOException, InterruptedExceptio
@Test
public void getGitUrlIfGitUrlsNullChangeUrlIsUsed() throws IOException, InterruptedException {
when(envVars.get(PrIdAndUrlUtils.GIT_URL_PROPERTY)).thenReturn(null);
- when(envVars.get(PrIdAndUrlUtils.CHANGE_URL_PROPERTY)).thenReturn(CHANGE_ID);
+ when(envVars.get(PrIdAndUrlUtils.CHANGE_URL_PROPERTY)).thenReturn(CHANGE_URL);
- Assert.assertEquals(CHANGE_ID, PrIdAndUrlUtils.getGitUrl(null, build, listener));
+ Assert.assertEquals("http://test.github.com/terma/test-repo", PrIdAndUrlUtils.getGitUrl(null, build, listener));
}
@Test