in grails-forge-core/src/main/java/org/grails/forge/diff/FeatureDiffer.java [85:163]
public void produceDiff(
ProjectGenerator projectGenerator,
GeneratorContext generatorContext,
ConsoleOutput consoleOutput) throws Exception {
MapOutputHandler outputHandler = new MapOutputHandler();
Project project = generatorContext.getProject();
ApplicationType applicationType = generatorContext.getApplicationType();
projectGenerator.generate(
applicationType,
project,
new Options(generatorContext.getTestFramework(), generatorContext.getJdkVersion()),
generatorContext.getOperatingSystem(),
Collections.emptyList(),
outputHandler,
ConsoleOutput.NOOP
);
Map<String, String> oldProject = outputHandler.getProject();
outputHandler = new MapOutputHandler();
projectGenerator.generate(
applicationType,
project,
outputHandler,
generatorContext
);
Map<String, String> newProject = outputHandler.getProject();
for (Map.Entry<String, String> entry: newProject.entrySet()) {
String oldFile = oldProject.remove(entry.getKey());
if (entry.getValue() == null) {
continue;
}
List<String> oldFileLines = oldFile == null ? Collections.emptyList() : toLines(oldFile);
String newFile = entry.getValue();
List<String> newFileLines = toLines(newFile);
Patch<String> diff = DiffUtils.diff(oldFileLines, newFileLines);
List<String> unifiedDiff = UnifiedDiffUtils
.generateUnifiedDiff(entry.getKey(), entry.getKey(), oldFileLines, diff, 3);
if (!unifiedDiff.isEmpty()) {
for (String delta : unifiedDiff) {
if (delta.startsWith("+")) {
consoleOutput.green(delta);
} else if (delta.startsWith("-")) {
consoleOutput.red(delta);
} else {
consoleOutput.out(delta);
}
}
consoleOutput.out("\n");
}
}
for (Map.Entry<String, String> entry: oldProject.entrySet()) {
if (entry.getValue() == null) {
continue;
}
List<String> oldFileLines = toLines(entry.getValue());
Patch<String> diff = DiffUtils.diff(oldFileLines, Collections.emptyList());
List<String> unifiedDiff = UnifiedDiffUtils.generateUnifiedDiff(entry.getKey(), entry.getKey(), oldFileLines, diff, 3);
if (!unifiedDiff.isEmpty()) {
for (String delta : unifiedDiff) {
if (delta.startsWith("+")) {
consoleOutput.green(delta);
} else if (delta.startsWith("-")) {
consoleOutput.red(delta);
} else {
consoleOutput.out(delta);
}
}
consoleOutput.out("\n");
}
}
}