Skip to content
This repository was archived by the owner on Mar 19, 2019. It is now read-only.

Commit b3cec2f

Browse files
authored
Rug 0.11.0 (#92)
* Changes for ProjectGenerator * Remove temp fix for generator tests fixes #78 * Rev version and update bom * Add -t and -V to test * Allow for . periods in group ids fixes #84 * Update CHANGELOG * Format help and version just a tiny bit fixes #83 * Update CHANGELOG * Fix typo in CHANGELOG * Allow default value for project_name fixes #85 * Break cycle * Extract Git functionality into a seperate class * Make test more robust * Rev Antlr version * Update rug-resolver fixes #88 * Rev for next release * Call compilers only for local archive projects * Change spinner chars * Add to .gitignore * New rug-resolver version * Allow to specify output format of describe fixes #86 * Make sure lifecycle test doesn't mess up other tests * Add support for @validator methods * Reuse Log from parent class * Extract validations into seperate method * Fix NPE when no commnand line options have been set * Changes for ProjectGenerator * Remove DSL executors * Re-enable snapshot repo * Write out log entries for successful editor invocations fixes #87 * Sort output * Update to rug 0..11.0 * Spinner should go clockwise * Use caching compiler * Update rug-resolver fixes #88 * Changes for ProjectGenerator * Changes for ProjectGenerator * Update rug-resolver fixes #88 * Update for Rug 0.11.0
1 parent a52ea13 commit b3cec2f

31 files changed

+828
-664
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
<timestamp>${maven.build.timestamp}</timestamp>
1616
<java.version>1.8</java.version>
1717
<maven.version>3.3.9</maven.version>
18-
<rug.version>0.10.0</rug.version>
19-
<rug-resolver.version>0.10.4</rug-resolver.version>
18+
<rug.version>0.11.0</rug.version>
19+
<rug-resolver.version>0.11.0</rug-resolver.version>
2020
</properties>
2121
<licenses>
2222
<license>

src/main/java/com/atomist/rug/cli/Constants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class Constants {
1111
public static final String ARTIFACT = "rug-cli";
1212

1313
public static final String RUG_ARTIFACT = "rug";
14-
public static final String RUG_VERSION_RANGE = "[0.10.0,1.0.0)";
14+
public static final String RUG_VERSION_RANGE = "[0.11.0,1.0.0)";
1515

1616
public static final String ATOMIST_ROOT = ".atomist";
1717
public static final String CLI_CONFIG_NAME = "cli.yml";

src/main/java/com/atomist/rug/cli/command/AbstractCompilingAndOperationLoadingCommand.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static scala.collection.JavaConversions.asJavaCollection;
44

5+
import java.io.File;
56
import java.net.URI;
67
import java.util.Collection;
78
import java.util.List;
@@ -25,6 +26,8 @@
2526
import com.atomist.rug.cli.utils.FileUtils;
2627
import com.atomist.rug.compiler.Compiler;
2728
import com.atomist.rug.compiler.ServiceLoaderCompilerRegistry;
29+
import com.atomist.rug.compiler.typescript.TypeScriptCompiler;
30+
import com.atomist.rug.compiler.typescript.compilation.CompilerFactory;
2831
import com.atomist.rug.kind.service.ConsoleMessageBuilder;
2932
import com.atomist.rug.loader.DecoratingOperationsLoader;
3033
import com.atomist.rug.loader.HandlerOperationsLoader;
@@ -72,6 +75,10 @@ private ArtifactSource compile(ArtifactDescriptor artifact, ArtifactSource sourc
7275
// Only compile local archives
7376
if (artifact instanceof LocalArtifactDescriptor) {
7477

78+
String root = new File(new File(artifact.uri()),
79+
".atomist" + File.separator + "target" + File.separator + ".jscache")
80+
.getAbsolutePath();
81+
7582
// Get all registered and supported compilers
7683
Collection<Compiler> compilers = asJavaCollection(
7784
ServiceLoaderCompilerRegistry.findAll(source));
@@ -82,6 +89,7 @@ private ArtifactSource compile(ArtifactDescriptor artifact, ArtifactSource sourc
8289
"Processing script sources").run(indicator -> {
8390
ArtifactSource compiledSource = source;
8491
for (Compiler compiler : compilers) {
92+
compiler = wrapCompiler(compiler, root);
8593
indicator.report(String.format("Invoking %s on %s script sources",
8694
compiler.name(),
8795
StringUtils.collectionToCommaDelimitedString(
@@ -104,6 +112,16 @@ private ArtifactSource compile(ArtifactDescriptor artifact, ArtifactSource sourc
104112
return source;
105113
}
106114

115+
private Compiler wrapCompiler(Compiler compiler, String root) {
116+
if (compiler instanceof TypeScriptCompiler) {
117+
return new TypeScriptCompiler(
118+
CompilerFactory.cachingCompiler(CompilerFactory.create(), root));
119+
}
120+
else {
121+
return compiler;
122+
}
123+
}
124+
107125
private HandlerOperationsLoader createOperationsLoader(URI[] uri) {
108126
HandlerOperationsLoader loader = new DecoratingOperationsLoader(
109127
new UriBasedDependencyResolver(uri,

src/main/java/com/atomist/rug/cli/command/describe/DescribeCommand.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ public class DescribeCommand extends AbstractAnnotationBasedCommand {
5959
@Validator
6060
public void validate(OperationsAndHandlers operationsAndHandlers, ArtifactDescriptor artifact,
6161
ArtifactSource source, String kind, String name, String format) {
62-
6362
switch (kind) {
6463
case "editor":
6564
break;
@@ -230,12 +229,19 @@ private void describeName(Manifest manifest) {
230229
private void describeOperations(ArtifactDescriptor artifact,
231230
OperationsAndHandlers operationsAndHandlers) {
232231
Operations operations = operationsAndHandlers.operations();
233-
Collection<ProjectEditor> editors = asJavaCollection(operations.editors());
234-
Collection<ProjectGenerator> generators = asJavaCollection(operations.generators());
235-
Collection<Executor> executors = asJavaCollection(operations.executors());
236-
Collection<ProjectReviewer> reviewers = asJavaCollection(operations.reviewers());
237-
Collection<SystemEventHandler> handlers = operationsAndHandlers.handlers().handlers();
232+
Collection<ProjectEditor> editors = asJavaCollection(operations.editors()).stream()
233+
.sorted((o1, o2) -> o1.name().compareTo(o2.name())).collect(Collectors.toList());
234+
Collection<ProjectGenerator> generators = asJavaCollection(operations.generators()).stream()
235+
.sorted((o1, o2) -> o1.name().compareTo(o2.name())).collect(Collectors.toList());
236+
Collection<Executor> executors = asJavaCollection(operations.executors()).stream()
237+
.sorted((o1, o2) -> o1.name().compareTo(o2.name())).collect(Collectors.toList());
238+
Collection<ProjectReviewer> reviewers = asJavaCollection(operations.reviewers()).stream()
239+
.sorted((o1, o2) -> o1.name().compareTo(o2.name())).collect(Collectors.toList());
240+
Collection<SystemEventHandler> handlers = operationsAndHandlers.handlers().handlers()
241+
.stream().sorted((o1, o2) -> o1.name().compareTo(o2.name()))
242+
.collect(Collectors.toList());
238243
log.newline();
244+
239245
if (!generators.isEmpty()) {
240246
log.info(Style.cyan(Constants.DIVIDER) + " " + Style.bold("Generators"));
241247
listOperations(artifact, generators);

src/main/java/com/atomist/rug/cli/command/edit/EditCommand.java

Lines changed: 29 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,12 @@
33
import static scala.collection.JavaConversions.asJavaCollection;
44

55
import java.io.File;
6-
import java.io.IOException;
6+
import java.util.Collection;
77
import java.util.List;
88
import java.util.Optional;
99
import java.util.stream.Collectors;
1010

1111
import org.apache.commons.lang3.text.WordUtils;
12-
import org.eclipse.jgit.api.Git;
13-
import org.eclipse.jgit.api.Status;
14-
import org.eclipse.jgit.api.errors.GitAPIException;
15-
import org.eclipse.jgit.lib.Repository;
16-
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
1712

1813
import com.atomist.project.ProjectOperationArguments;
1914
import com.atomist.project.ProvenanceInfoWriter;
@@ -24,24 +19,27 @@
2419
import com.atomist.project.edit.ProjectEditor;
2520
import com.atomist.project.edit.SuccessfulModification;
2621
import com.atomist.rug.cli.Constants;
27-
import com.atomist.rug.cli.RunnerException;
2822
import com.atomist.rug.cli.command.AbstractDeltaHandlingCommand;
2923
import com.atomist.rug.cli.command.CommandException;
3024
import com.atomist.rug.cli.command.annotation.Argument;
3125
import com.atomist.rug.cli.command.annotation.Command;
3226
import com.atomist.rug.cli.command.annotation.Option;
3327
import com.atomist.rug.cli.command.utils.ArtifactSourceUtils;
3428
import com.atomist.rug.cli.command.utils.OperationUtils;
29+
import com.atomist.rug.cli.output.ProgressReporter;
3530
import com.atomist.rug.cli.output.ProgressReportingOperationRunner;
3631
import com.atomist.rug.cli.output.Style;
3732
import com.atomist.rug.cli.utils.ArtifactDescriptorUtils;
3833
import com.atomist.rug.cli.utils.FileUtils;
3934
import com.atomist.rug.cli.utils.GitUtils;
4035
import com.atomist.rug.cli.utils.StringUtils;
36+
import com.atomist.rug.kind.core.ChangeLogEntry;
4137
import com.atomist.rug.resolver.ArtifactDescriptor;
4238
import com.atomist.source.ArtifactSource;
4339
import com.atomist.source.Delta;
4440

41+
import scala.collection.JavaConverters;
42+
4543
public class EditCommand extends AbstractDeltaHandlingCommand {
4644

4745
@Command
@@ -57,8 +55,8 @@ public void run(Operations operations, ArtifactDescriptor artifact,
5755
}
5856

5957
String fqName = artifact.group() + "." + artifact.artifact() + "." + name;
60-
Optional<ProjectEditor> opt =asJavaCollection(operations.editors())
61-
.stream().filter(g -> g.name().equals(name)).findFirst();
58+
Optional<ProjectEditor> opt = asJavaCollection(operations.editors()).stream()
59+
.filter(g -> g.name().equals(name)).findFirst();
6260
if (!opt.isPresent()) {
6361
// try again with a properly namespaced name
6462
opt = asJavaCollection(operations.editors()).stream()
@@ -72,9 +70,9 @@ public void run(Operations operations, ArtifactDescriptor artifact,
7270
else {
7371
log.newline();
7472
log.info(Style.cyan(Constants.DIVIDER) + " " + Style.bold("Editors"));
75-
asJavaCollection(operations.editors()).forEach(
76-
e -> log.info(Style.yellow(" %s", StringUtils.stripName(e.name(), artifact))
77-
+ "\n " + WordUtils.wrap(e.description(), Constants.WRAP_LENGTH, "\n ", false)));
73+
asJavaCollection(operations.editors()).forEach(e -> log.info(Style.yellow(" %s",
74+
StringUtils.stripName(e.name(), artifact)) + "\n "
75+
+ WordUtils.wrap(e.description(), Constants.WRAP_LENGTH, "\n ", false)));
7876
StringUtils.printClosestMatch(fqName, artifact, operations.editorNames());
7977
throw new CommandException(
8078
String.format("Specified editor %s could not be found in %s:%s:%s",
@@ -84,21 +82,26 @@ public void run(Operations operations, ArtifactDescriptor artifact,
8482
}
8583

8684
private void invoke(ArtifactDescriptor artifact, String name, ProjectEditor editor,
87-
ProjectOperationArguments arguments, String rootName, boolean dryRun, boolean repo) {
85+
ProjectOperationArguments arguments, String rootName, boolean dryRun, boolean commit) {
8886

8987
File root = FileUtils.createProjectRoot(rootName);
9088

91-
if (repo) {
92-
isClean(root);
89+
if (commit) {
90+
GitUtils.isClean(root);
9391
}
9492

9593
ArtifactSource source = ArtifactSourceUtils.createArtifactSource(root);
9694

9795
ModificationAttempt result = new ProgressReportingOperationRunner<ModificationAttempt>(
9896
String.format("Running editor %s of %s",
9997
StringUtils.stripName(editor.name(), artifact),
100-
ArtifactDescriptorUtils.coordinates(artifact)))
101-
.run(indicator -> editor.modify(source, arguments));
98+
ArtifactDescriptorUtils.coordinates(artifact))).run(indicator -> {
99+
ModificationAttempt r = editor.modify(source, arguments);
100+
101+
printLogEntries(indicator, r);
102+
103+
return r;
104+
});
102105

103106
if (result instanceof SuccessfulModification) {
104107

@@ -113,11 +116,11 @@ private void invoke(ArtifactDescriptor artifact, String name, ProjectEditor edit
113116
log.newline();
114117
log.info(Style.cyan(Constants.DIVIDER) + " " + Style.bold("Changes"));
115118

116-
List<Delta> deltas = asJavaCollection(resultSource.cachedDeltas())
117-
.stream().collect(Collectors.toList());
119+
List<Delta> deltas = asJavaCollection(resultSource.cachedDeltas()).stream()
120+
.collect(Collectors.toList());
118121

119122
iterateDeltas(deltas, source, resultSource, root, dryRun);
120-
if (repo) {
123+
if (commit) {
121124
log.newline();
122125
GitUtils.commitFiles(editor, arguments, root);
123126
}
@@ -145,21 +148,12 @@ else if (result instanceof FailedModificationAttempt) {
145148
}
146149
}
147150

148-
private void isClean(File root) {
149-
FileRepositoryBuilder builder = new FileRepositoryBuilder();
150-
try (Repository repository = builder.setGitDir(new File(root, ".git")).readEnvironment()
151-
.findGitDir().build()) {
152-
try (Git git = new Git(repository)) {
153-
Status status = git.status().call();
154-
if (!status.isClean()) {
155-
throw new CommandException(String.format(
156-
"Working tree at %s not clean. Please commit or stash your changes before running an editor with -R.",
157-
root.getAbsolutePath()), "edit");
158-
}
159-
}
160-
}
161-
catch (IllegalStateException | IOException | GitAPIException e) {
162-
throw new RunnerException(e);
151+
private void printLogEntries(ProgressReporter indicator, ModificationAttempt r) {
152+
if (r instanceof SuccessfulModification) {
153+
Collection<ChangeLogEntry<ArtifactSource>> logEntries = JavaConverters
154+
.asJavaCollectionConverter(((SuccessfulModification) r).changeLogEntries())
155+
.asJavaCollection();
156+
logEntries.forEach(l -> indicator.report(" " + l.comment()));
163157
}
164158
}
165159
}

src/main/java/com/atomist/rug/cli/command/generate/GenerateCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ private void invoke(ArtifactDescriptor artifact, String name, ProjectGenerator g
100100
ArtifactSource result = new ProgressReportingOperationRunner<ArtifactSource>(
101101
String.format("Running generator %s of %s", generator.name(),
102102
ArtifactDescriptorUtils.coordinates(artifact)))
103-
.run(indicator -> generator.generate(arguments));
103+
.run(indicator -> generator.generate(projectName, arguments));
104104

105105
// Add provenance info to output
106106
result = new ProvenanceInfoWriter().write(result, generator, arguments,

src/main/java/com/atomist/rug/cli/command/test/TestCommand.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,13 @@
44
import static scala.collection.JavaConversions.asScalaBuffer;
55

66
import java.io.File;
7-
import java.util.ArrayList;
87
import java.util.Collections;
98
import java.util.List;
109
import java.util.Optional;
1110
import java.util.stream.Collectors;
1211

1312
import com.atomist.project.archive.DefaultAtomistConfig$;
1413
import com.atomist.project.archive.Operations;
15-
import com.atomist.project.edit.ProjectEditor;
1614
import com.atomist.rug.cli.Constants;
1715
import com.atomist.rug.cli.Log;
1816
import com.atomist.rug.cli.command.AbstractAnnotationBasedCommand;
@@ -26,7 +24,6 @@
2624
import com.atomist.rug.cli.tree.ArtifactSourceTreeCreator;
2725
import com.atomist.rug.cli.tree.LogVisitor;
2826
import com.atomist.rug.cli.utils.ArtifactDescriptorUtils;
29-
import com.atomist.rug.loader.DecoratingOperationsLoader.DecoratedProjectGenerator;
3027
import com.atomist.rug.resolver.ArtifactDescriptor;
3128
import com.atomist.rug.test.RugTestParser;
3229
import com.atomist.rug.test.TestLoader;
@@ -36,7 +33,6 @@
3633
import com.atomist.source.ArtifactSource;
3734
import com.atomist.source.FileArtifact;
3835

39-
import scala.collection.JavaConverters;
4036
import scala.collection.Seq;
4137

4238
public class TestCommand extends AbstractAnnotationBasedCommand {
@@ -47,17 +43,6 @@ public class TestCommand extends AbstractAnnotationBasedCommand {
4743
public void run(Operations operations, ArtifactDescriptor artifact,
4844
@Argument(index = 1) String testName) {
4945

50-
// TODO CD remove when https://github.com/atomist/rug/issues/197 is fixed
51-
List<ProjectEditor> editors = new ArrayList<>();
52-
editors.addAll(
53-
JavaConverters.asJavaCollectionConverter(operations.editors()).asJavaCollection());
54-
editors.addAll(JavaConverters.asJavaCollectionConverter(operations.generators())
55-
.asJavaCollection().stream().filter(g -> g instanceof DecoratedProjectGenerator)
56-
.map(g -> ((DecoratedProjectGenerator) g).editor()).collect(Collectors.toList()));
57-
operations = new Operations(operations.generators(),
58-
JavaConverters.asScalaBufferConverter(editors).asScala(), operations.reviewers(),
59-
operations.executors());
60-
6146
File workingDir = CommandUtils.getRequiredWorkingDirectory();
6247
ArtifactSource source = ArtifactSourceUtils.createArtifactSource(workingDir);
6348

src/main/java/com/atomist/rug/cli/output/SpinningProgressReporter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
public class SpinningProgressReporter extends Thread implements ProgressReporter {
77

88
// private static final String animNix = "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏";
9-
private static final String animNix = "⣾⣽⣻⢿⡿⣟⣯⣷";
9+
private static final String animNix = org.apache.commons.lang3.StringUtils.reverse("⣾⣽⣻⢿⡿⣟⣯⣷");
1010
private static final String animWin32 = "|/-\\";
1111
private static final boolean isWindows = System.getProperty("os.name").startsWith("Windows");
1212

src/main/java/com/atomist/rug/cli/utils/GitUtils.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.io.IOException;
55

66
import org.eclipse.jgit.api.Git;
7+
import org.eclipse.jgit.api.Status;
78
import org.eclipse.jgit.api.errors.GitAPIException;
89
import org.eclipse.jgit.lib.Repository;
910
import org.eclipse.jgit.revwalk.RevCommit;
@@ -16,6 +17,7 @@
1617
import com.atomist.rug.cli.Constants;
1718
import com.atomist.rug.cli.Log;
1819
import com.atomist.rug.cli.RunnerException;
20+
import com.atomist.rug.cli.command.CommandException;
1921

2022
public abstract class GitUtils {
2123

@@ -61,4 +63,21 @@ public static void commitFiles(ProjectEditor editor, ProjectOperationArguments a
6163
}
6264
}
6365

66+
public static void isClean(File root) {
67+
FileRepositoryBuilder builder = new FileRepositoryBuilder();
68+
try (Repository repository = builder.setGitDir(new File(root, ".git")).readEnvironment()
69+
.findGitDir().build()) {
70+
try (Git git = new Git(repository)) {
71+
Status status = git.status().call();
72+
if (!status.isClean()) {
73+
throw new CommandException(String.format(
74+
"Working tree at %s not clean. Please commit or stash your changes before running an editor with -R.",
75+
root.getAbsolutePath()), "edit");
76+
}
77+
}
78+
}
79+
catch (IllegalStateException | IOException | GitAPIException e) {
80+
throw new RunnerException(e);
81+
}
82+
}
6483
}

src/test/java/com/atomist/rug/cli/command/edit/EditCommandIntegrationTest.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,26 +28,30 @@ public void testSuccessfulEdit() throws Exception {
2828

2929
}
3030

31+
@Test
32+
public void testSuccessfulEditWithLogs() throws Exception {
33+
assertSuccess("Added valid program in Whitespace(tm) programming language", "edit",
34+
"LogEntriesTesting", "-l", "-d");
35+
36+
}
37+
3138
@Test
3239
public void testUnSuccessfulEditWithInvalidParameter() throws Exception {
3340
assertFailure("Invalid parameter value\n project_name = $#%$#%$#^$%$W...@432", "edit",
34-
"atomist-rugs:common-editors:AddReadme",
35-
"project_name=$#%$#%$#^$%$W...@432", "description=Some", "-a", "0.5.0");
41+
"atomist-rugs:common-editors:AddReadme", "project_name=$#%$#%$#^$%$W...@432",
42+
"description=Some", "-a", "0.5.0");
3643
}
3744

3845
@Test
3946
public void testUnSuccessfulEditWithMissingParameters() throws Exception {
4047
assertFailure("Missing parameter value\n project_name", "edit",
41-
"atomist-rugs:common-editors:AddReadme", "description=Some", "-a",
42-
"0.5.0");
48+
"atomist-rugs:common-editors:AddReadme", "description=Some", "-a", "0.5.0");
4349
}
4450

4551
@Test
4652
public void testUnSuccessfulEditWithInvalidName() throws Exception {
47-
assertFailure("Did you mean?\n" +
48-
" AddReadme", "edit",
49-
"atomist-rugs:common-editors:AddRame", "description=Some", "-a",
50-
"0.5.0");
53+
assertFailure("Did you mean?\n" + " AddReadme", "edit",
54+
"atomist-rugs:common-editors:AddRame", "description=Some", "-a", "0.5.0");
5155
}
5256

5357
@Test

0 commit comments

Comments
 (0)