Skip to content

Commit

Permalink
JENKINS-51476: JGit retrieving revision number
Browse files Browse the repository at this point in the history
  • Loading branch information
klimas7 committed May 23, 2018
1 parent a324ac6 commit 3398257
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 8 deletions.
Expand Up @@ -17,7 +17,8 @@
public class RevisionInfoFactory {

private static final Logger LOGGER = Logger.getLogger(RevisionInfoFactory.class.getName());
public static final Pattern AUTHOR_LINE_PATTERN = Pattern.compile("author (.* <.*@.*>) (\\d{10}) ([\\+-]\\d{4})");
private static final Pattern AUTHOR_LINE_PATTERN = Pattern.compile("author (.* <.*@.*>) (\\d{10}) ([\\+-]\\d{4})");
private static final Pattern AUTHOR_LINE_PATTERN_GENERAL_DATE = Pattern.compile("author (.* <.*@.*>) (.*)");

private GitClient gitClient;
private String branch;
Expand Down Expand Up @@ -46,15 +47,17 @@ public List<RevisionInfo> getRevisions() throws InterruptedException {
}

private String prettyRevisionInfo(Revision revision) {
List<String> raw = null;
String shortSha1 = revision.getSha1String().substring(0, 8);

List<String> raw;
try {
raw = gitClient.showRevision(revision.getSha1());
} catch (GitException e1) {
LOGGER.log(Level.SEVERE, Messages.GitParameterDefinition_unexpectedError(), e1);
return "";
return shortSha1;
} catch (InterruptedException e1) {
LOGGER.log(Level.SEVERE, Messages.GitParameterDefinition_unexpectedError(), e1);
return "";
return shortSha1;
}

String authorLine = getAuthorLine(raw);
Expand All @@ -63,11 +66,18 @@ private String prettyRevisionInfo(Revision revision) {
String author = matcher.group(1);
String timestamp = matcher.group(2);
DateTime date = new DateTime(Long.parseLong(timestamp) * 1000); //Convert UNIX timestamp to date
return revision.getSha1String().substring(0, 8) + " " + date.toString("yyyy:MM:dd HH:mm") + " " + author;
} else {
LOGGER.log(Level.WARNING, Messages.GitParameterDefinition_notFindAuthorPattern(authorLine));
return "";
return shortSha1 + " " + date.toString("yyyy-MM-dd HH:mm") + " " + author;
}

matcher = AUTHOR_LINE_PATTERN_GENERAL_DATE.matcher(authorLine);
if (matcher.find()) {
String author = matcher.group(1);
String date = matcher.group(2);
return shortSha1 + " " + date + " " + author;
}

LOGGER.log(Level.WARNING, Messages.GitParameterDefinition_notFindAuthorPattern(authorLine));
return shortSha1;
}

private String getAuthorLine(List<String> rows) {
Expand Down
@@ -1,5 +1,83 @@
package net.uaznia.lukanus.hudson.plugins.gitparameter;

import hudson.plugins.git.GitException;
import org.eclipse.jgit.lib.ObjectId;
import org.jenkinsci.plugins.gitclient.GitClient;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class RevisionInfoFactoryTest {
private static final String COMMIT_HASH_1 = "ee650d9b5dbc39ec1bdfc6608f49db94ce8d7be4";
private static final ObjectId SHA1_1 = ObjectId.fromString(COMMIT_HASH_1);
private static final String[] RAW_1 = {"tree ee650d9b5dbc39ec1bdfc6608f49db94ce8d7be4",
"parent 3409e0e7a3c0a2887b14c95d803b90f9314606aa",
"author klimas7 <klimas7@gmail.com> 1523905899 +0200",
"committer klimas7 <klimas7@gmail.com> 1523905899 +0200"};


private static final String COMMIT_HASH_2 = "b9a246e842a5478fe01b52eb93e0e23cdb79f616";
private static final ObjectId SHA1_2 = ObjectId.fromString(COMMIT_HASH_2);
private static final String[] RAW_2 = {"tree b9a246e842a5478fe01b52eb93e0e23cdb79f616",
"parent 3409e0e7a3c0a2887b14c95d803b90f9314606aa",
"author klimas7 <klimas7@gmail.com> 2018-05-23T15:28:13+0200",
"committer klimas7 <klimas7@gmail.com> 2018-05-23T15:28:13+0200"};

private static final String COMMIT_HASH_3 = "b9a246e842a5478fe01b52eb93e0e23cdb79f616";
private static final ObjectId SHA1_3 = ObjectId.fromString(COMMIT_HASH_3);
private static final String[] RAW_NO_AUTHOR = {"tree b9a246e842a5478fe01b52eb93e0e23cdb79f616",
"parent 3409e0e7a3c0a2887b14c95d803b90f9314606aa",
"committer klimas7 <klimas7@gmail.com> 2018-05-23T15:28:13+0200"};
private static final String SHORT_COMMIT_HASH_3 = COMMIT_HASH_3.substring(0, 8);

@Test
public void testGetRevisions() throws InterruptedException {
GitClient gitClient = mock(GitClient.class);
when(gitClient.revListAll()).thenReturn(Arrays.asList(SHA1_1, SHA1_2));
when(gitClient.showRevision(SHA1_1)).thenReturn(Arrays.asList(RAW_1));
when(gitClient.showRevision(SHA1_2)).thenReturn(Arrays.asList(RAW_2));

RevisionInfoFactory revisionInfoFactory = new RevisionInfoFactory(gitClient, null);
List<RevisionInfo> revisions = revisionInfoFactory.getRevisions();

assertEquals(2, revisions.size());
assertEquals("ee650d9b 2018-04-16 21:11 klimas7 <klimas7@gmail.com>", revisions.get(0).getRevisionInfo());
assertEquals("b9a246e8 2018-05-23T15:28:13+0200 klimas7 <klimas7@gmail.com>", revisions.get(1).getRevisionInfo());
}

@Test
public void testNoAuthor() throws InterruptedException {
GitClient gitClient = mock(GitClient.class);
when(gitClient.revListAll()).thenReturn(Arrays.asList(SHA1_3));
when(gitClient.showRevision(SHA1_3)).thenReturn(Arrays.asList(RAW_NO_AUTHOR));

RevisionInfoFactory revisionInfoFactory = new RevisionInfoFactory(gitClient, null);
List<RevisionInfo> revisions = revisionInfoFactory.getRevisions();

assertEquals(1, revisions.size());
RevisionInfo revisionInfo = revisions.get(0);
assertEquals(SHORT_COMMIT_HASH_3, revisionInfo.getRevisionInfo());
assertEquals(COMMIT_HASH_3, revisionInfo.getSha1());
}

@Test
public void testGitException() throws InterruptedException {
GitClient gitClient = mock(GitClient.class);
when(gitClient.revListAll()).thenReturn(Arrays.asList(SHA1_3));
when(gitClient.showRevision(SHA1_3)).thenThrow(new GitException());

RevisionInfoFactory revisionInfoFactory = new RevisionInfoFactory(gitClient, null);
List<RevisionInfo> revisions = revisionInfoFactory.getRevisions();

assertEquals(1, revisions.size());
RevisionInfo revisionInfo = revisions.get(0);
assertEquals(SHORT_COMMIT_HASH_3, revisionInfo.getRevisionInfo());
assertEquals(COMMIT_HASH_3, revisionInfo.getSha1());
}
}

0 comments on commit 3398257

Please sign in to comment.