Skip to content

Commit e2ab2de

Browse files
committed
Make clear explanation about url and comp on any EVCSException #57
1 parent f193d3a commit e2ab2de

File tree

3 files changed

+100
-38
lines changed

3 files changed

+100
-38
lines changed

src/main/java/org/scm4j/releaser/ExtendedStatusBuilder.java

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
import org.scm4j.releaser.branch.ReleaseBranchFactory;
99
import org.scm4j.releaser.branch.ReleaseBranchPatch;
1010
import org.scm4j.releaser.conf.*;
11+
import org.scm4j.releaser.exceptions.EBuildStatus;
1112
import org.scm4j.releaser.exceptions.EMinorUpgradeDowngrade;
1213
import org.scm4j.releaser.exceptions.ENoReleaseBranchForPatch;
1314
import org.scm4j.releaser.exceptions.ENoReleases;
1415
import org.scm4j.releaser.exceptions.EReleaseMDepsNotLocked;
16+
import org.scm4j.releaser.exceptions.EReleaserException;
1517
import org.scm4j.vcs.api.IVCS;
1618
import org.scm4j.vcs.api.VCSCommit;
1719
import org.scm4j.vcs.api.VCSTag;
@@ -54,31 +56,38 @@ public ExtendedStatus getAndCachePatchStatus(String coords, CachedStatuses cache
5456
}
5557

5658
public ExtendedStatus getAndCacheStatus(Component comp, CachedStatuses cache, IProgress progress, boolean patch) {
57-
VCSRepository repo = repoFactory.getVCSRepository(comp);
58-
ExtendedStatus existing = cache.putIfAbsent(repo.getUrl(), ExtendedStatus.DUMMY);
59-
60-
while (ExtendedStatus.DUMMY == existing) {
61-
try {
62-
Thread.sleep(PARALLEL_CALCULATION_AWAIT_TIME);
63-
existing = cache.get(repo.getUrl());
64-
} catch (InterruptedException e) {
65-
throw new RuntimeException(e);
59+
try {
60+
VCSRepository repo = repoFactory.getVCSRepository(comp);
61+
ExtendedStatus existing = cache.putIfAbsent(repo.getUrl(), ExtendedStatus.DUMMY);
62+
63+
while (ExtendedStatus.DUMMY == existing) {
64+
try {
65+
Thread.sleep(PARALLEL_CALCULATION_AWAIT_TIME);
66+
existing = cache.get(repo.getUrl());
67+
} catch (InterruptedException e) {
68+
throw new RuntimeException(e);
69+
}
6670
}
71+
72+
if (null != existing) {
73+
return new ExtendedStatus(existing.getNextVersion(), existing.getStatus(), existing.getSubComponents(), comp, repo);
74+
}
75+
76+
DelayedTagsFile dtf = new DelayedTagsFile();
77+
DelayedTag dt = dtf.getDelayedTagByUrl(repo.getUrl());
78+
79+
ExtendedStatus res = patch ?
80+
getPatchStatus(comp, cache, progress, repo, dt) :
81+
getMinorStatus(comp, cache, progress, repo, dt);
82+
83+
cache.replace(repo.getUrl(), res);
84+
return res;
85+
} catch (Exception e) {
86+
if (e instanceof EReleaserException) {
87+
throw e;
88+
}
89+
throw new EBuildStatus(e, comp);
6790
}
68-
69-
if (null != existing) {
70-
return new ExtendedStatus(existing.getNextVersion(), existing.getStatus(), existing.getSubComponents(), comp, repo);
71-
}
72-
73-
DelayedTagsFile dtf = new DelayedTagsFile();
74-
DelayedTag dt = dtf.getDelayedTagByUrl(repo.getUrl());
75-
76-
ExtendedStatus res = patch ?
77-
getPatchStatus(comp, cache, progress, repo, dt) :
78-
getMinorStatus(comp, cache, progress, repo, dt);
79-
80-
cache.replace(repo.getUrl(), res);
81-
return res;
8291
}
8392

8493
private ExtendedStatus getMinorStatus(Component comp, CachedStatuses cache, IProgress progress, VCSRepository repo, DelayedTag dt) {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.scm4j.releaser.exceptions;
2+
3+
import org.scm4j.releaser.conf.Component;
4+
5+
public class EBuildStatus extends EReleaserException {
6+
7+
private static final long serialVersionUID = 1L;
8+
private final Component comp;
9+
10+
public EBuildStatus(Exception e, Component comp) {
11+
super(e);
12+
this.comp = comp;
13+
}
14+
15+
@Override
16+
public String getMessage() {
17+
return String.format("Status build failed for %s: %s", comp.toString(), getCause().getMessage());
18+
}
19+
20+
public Component getComp() {
21+
return comp;
22+
}
23+
}

src/test/java/org/scm4j/releaser/cli/CLITest.java

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,25 @@
11
package org.scm4j.releaser.cli;
22

3+
import static org.fusesource.jansi.Ansi.ansi;
4+
import static org.junit.Assert.assertEquals;
5+
import static org.junit.Assert.assertTrue;
6+
import static org.mockito.Matchers.any;
7+
import static org.mockito.Matchers.eq;
8+
import static org.mockito.Mockito.doReturn;
9+
import static org.mockito.Mockito.doThrow;
10+
import static org.mockito.Mockito.mock;
11+
import static org.mockito.Mockito.never;
12+
import static org.mockito.Mockito.spy;
13+
import static org.mockito.Mockito.verify;
14+
import static org.scm4j.releaser.testutils.VerificationModeSometime.sometime;
15+
16+
import java.io.File;
17+
import java.io.PrintStream;
18+
import java.net.URL;
19+
import java.nio.charset.StandardCharsets;
20+
import java.util.ArrayList;
21+
import java.util.List;
22+
323
import org.apache.commons.io.FileUtils;
424
import org.apache.commons.io.filefilter.FileFilterUtils;
525
import org.fusesource.jansi.Ansi;
@@ -12,38 +32,31 @@
1232
import org.mockito.Matchers;
1333
import org.scm4j.commons.progress.IProgress;
1434
import org.scm4j.commons.regexconfig.EConfig;
15-
import org.scm4j.releaser.*;
35+
import org.scm4j.releaser.ActionTreeBuilder;
36+
import org.scm4j.releaser.CachedStatuses;
37+
import org.scm4j.releaser.Constants;
38+
import org.scm4j.releaser.ExtendedStatus;
39+
import org.scm4j.releaser.ExtendedStatusBuilder;
40+
import org.scm4j.releaser.Utils;
1641
import org.scm4j.releaser.actions.IAction;
1742
import org.scm4j.releaser.conf.Component;
1843
import org.scm4j.releaser.conf.DefaultConfigUrls;
1944
import org.scm4j.releaser.conf.IConfigUrls;
2045
import org.scm4j.releaser.conf.VCSRepositoryFactory;
46+
import org.scm4j.releaser.exceptions.EBuildStatus;
2147
import org.scm4j.releaser.exceptions.EReleaserException;
2248
import org.scm4j.releaser.exceptions.cmdline.ECmdLineNoCommand;
2349
import org.scm4j.releaser.exceptions.cmdline.ECmdLineNoProduct;
2450
import org.scm4j.releaser.exceptions.cmdline.ECmdLineUnknownCommand;
2551
import org.scm4j.releaser.exceptions.cmdline.ECmdLineUnknownOption;
2652
import org.scm4j.releaser.testutils.TestEnvironment;
2753

28-
import java.io.File;
29-
import java.io.PrintStream;
30-
import java.net.URL;
31-
import java.nio.charset.StandardCharsets;
32-
import java.util.ArrayList;
33-
import java.util.List;
34-
35-
import static org.fusesource.jansi.Ansi.ansi;
36-
import static org.junit.Assert.*;
37-
import static org.mockito.Matchers.any;
38-
import static org.mockito.Matchers.eq;
39-
import static org.mockito.Mockito.*;
40-
import static org.scm4j.releaser.testutils.VerificationModeSometime.sometime;
41-
4254
public class CLITest {
4355

4456
private static final String TEST_CONFIG_CONTENT = "# test config content";
4557
private static final String TEST_EXCEPTION_MESSAGE = "test exception";
4658
private static final String UNTILL = "eu.untill:unTill";
59+
private static final String UNTILLDB = "eu.untill:unTillDb";
4760
private IAction mockedAction;
4861
private PrintStream mockedPS;
4962
private CLI mockedCLI;
@@ -298,6 +311,23 @@ public void testInitWorkingDir() throws Exception {
298311
assertEquals(srcFileNames.size(), dstFileNames.size());
299312
assertEquals(TEST_CONFIG_CONTENT, FileUtils.readFileToString(customConfigTemplateFile, StandardCharsets.UTF_8));
300313
}
314+
315+
@Test
316+
public void testBriefCompInfoOnBuildStatusFailure() throws Exception {
317+
String[] args = new String[] { CLICommand.STATUS.getCmdLineStr(), UNTILLDB };
318+
RuntimeException testException = new RuntimeException("test exception");
319+
try (TestEnvironment env = new TestEnvironment()) {
320+
env.generateTestEnvironment();
321+
Component compUnTillDb = new Component(UNTILLDB);
322+
doThrow(testException).when(mockedRepoFactory).getVCSRepository(compUnTillDb);
323+
mockedCLI = spy(new CLI(mockedPS, new ExtendedStatusBuilder(mockedRepoFactory), mockedActionTreeBuilder, mockedRepoFactory));
324+
325+
assertEquals(CLI.EXIT_CODE_ERROR, mockedCLI.exec(args));
326+
assertTrue(mockedCLI.getLastException() instanceof EBuildStatus);
327+
assertEquals(compUnTillDb, ((EBuildStatus) mockedCLI.getLastException()).getComp());
328+
verify(mockedPS, sometime()).println(Matchers.contains(((EBuildStatus) mockedCLI.getLastException()).getMessage()));
329+
}
330+
}
301331

302332
private File getResourceFile(Class<?> forClass) throws Exception {
303333
URL url = forClass.getResource(CLI.CONFIG_TEMPLATES_ROSURCE_PATH);

0 commit comments

Comments
 (0)