Skip to content

Commit

Permalink
Cleanup, typo and improvements
Browse files Browse the repository at this point in the history
Signed-off-by: Pierre Belloy <[email protected]>
  • Loading branch information
pbe-axelor authored and admin committed Sep 19, 2019
1 parent dfec37e commit 2803bc3
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,6 @@
import com.axelor.tools.changelog.Release;
import com.axelor.tools.changelog.ReleaseGenerator;
import com.axelor.tools.changelog.ReleaseProcessor;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.file.FileTree;
import org.gradle.api.internal.tasks.options.Option;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.SkipWhenEmpty;
import org.gradle.api.tasks.TaskAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
Expand All @@ -42,18 +32,23 @@
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
import org.gradle.api.file.FileTree;
import org.gradle.api.internal.tasks.options.Option;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.SkipWhenEmpty;
import org.gradle.api.tasks.TaskAction;

public class GenerateChangeLog extends DefaultTask {

private final Logger LOG = LoggerFactory.getLogger(this.getClass());

private static final String CHANGELOG_FILENAME = "CHANGELOG.md";
private static final String CHANGELOG_PATH = "CHANGELOG.md";

private String version = VersionUtils.getVersion().version.replace("-SNAPSHOT", "");

private boolean preview;

@Option(option = "preview", description = "Preview mode.")
@Option(option = "preview", description = "Don’t actually write/delete anything, just print")
public void setPreview(boolean preview) {
this.preview = preview;
}
Expand All @@ -71,18 +66,19 @@ public void setFiles(FileTree files) {
@TaskAction
public void generate() throws IOException {
List<ChangelogEntry> entries = getChangelogEntries();
if(ObjectUtils.isEmpty(entries)) {
getLogger().info("No change log entries to process. Skipping.");

if (ObjectUtils.isEmpty(entries)) {
getLogger().lifecycle("No unreleased change log entries to process");
return;
}

String newChangelog = generate(entries);

if(preview) {
System.out.println("Generated change log : ");
System.out.println("--------------------");
System.out.println(newChangelog);
System.out.println("--------------------");
if (preview) {
getLogger().lifecycle("Generated change log : ");
getLogger().lifecycle("--------------------");
getLogger().lifecycle(newChangelog);
getLogger().lifecycle("--------------------");
return;
}

Expand All @@ -91,9 +87,11 @@ public void generate() throws IOException {
}

private List<ChangelogEntry> getChangelogEntries() throws IOException {
getLogger().lifecycle("Processing unreleased change log entries");
ChangelogEntryParser parser = new ChangelogEntryParser();
List<ChangelogEntry> entries = new ArrayList<>();
for (File file : getFiles()) {
getLogger().debug("Processing {}", file);
entries.add(parser.parse(file));
}
return entries;
Expand All @@ -108,28 +106,32 @@ private String generate(List<ChangelogEntry> entries) {
}

private void write(String newChangelog) throws IOException {
File mFile = new File(CHANGELOG_FILENAME);
getLogger().lifecycle("Generating new CHANGELOG.md file");

File changelogFile = new File(CHANGELOG_PATH);

StringBuilder contentBuilder = new StringBuilder();
try (BufferedReader br = new BufferedReader(new FileReader(mFile))) {
try (BufferedReader br = new BufferedReader(new FileReader(changelogFile))) {

String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
contentBuilder.append(sCurrentLine).append(System.lineSeparator());
}
}

mFile.delete();
changelogFile.delete();

try (FileOutputStream fos = new FileOutputStream(mFile)) {
try (FileOutputStream fos = new FileOutputStream(changelogFile)) {
fos.write((newChangelog + contentBuilder.toString()).getBytes());
fos.flush();
}
}

private void clean() {
getLogger().lifecycle("Clean up unreleased change log entries");
for (File file : getFiles()) {
try {
getLogger().lifecycle("Deleteting {}", file);
Files.delete(file.toPath());
} catch (IOException ex) {
throw new GradleException("Could not delete file: " + file, ex);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,20 @@ public void setTitle(String title) {
this.title = title;
}

public EntryType getType() {
return type;
}

public String getTitle() {
return title;
}

public void setType(EntryType type) {
this.type = type;
}

public EntryType getType() {
return type;
}

@Override
public String toString() {
return "ChangelogEntry [title=" + getTitle() + ", type=" + getType() + "]";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
*/
package com.axelor.tools.changelog;

import com.axelor.common.ObjectUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
Expand All @@ -27,7 +28,11 @@
public class ChangelogEntryParser {

public ChangelogEntry parse(File file) throws IOException {
return createEntry(loadYaml(file));
Map<String, Object> values = loadYaml(file);
if (ObjectUtils.isEmpty(values)) {
throw new IllegalStateException(file + " content is empty");
}
return createEntry(values);
}

@SuppressWarnings("unchecked")
Expand All @@ -42,12 +47,14 @@ private ChangelogEntry createEntry(Map<String, Object> entries) {
ChangelogEntry changelogEntry = new ChangelogEntry();
for (Map.Entry<String, Object> item : entries.entrySet()) {
String value = item.getValue().toString();
if(value == null) continue;
if ("title".equalsIgnoreCase(item.getKey())) {
changelogEntry.setTitle(value);
changelogEntry.setTitle(value.trim());
} else if ("type".equalsIgnoreCase(item.getKey())) {
changelogEntry.setType(EntryType.valueOf(value.toUpperCase()));
}
}
return changelogEntry;
}

}
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ task updateVersion(type: com.axelor.gradle.tasks.UpdateVersion) {
}

task generateChangeLog(type: com.axelor.gradle.tasks.GenerateChangeLog) {
description "Generate full change logs from incoming entries."
description "Generate change logs from unreleased entries."
group "Axelor"
files = fileTree(projectDir) {
include 'changelogs/unreleased/*.yml'
Expand Down
2 changes: 2 additions & 0 deletions changelogs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ To generate the `CHANGELOG.md` with unreleased entries, run following gradle tas

The unreleased entries are also automatically removed from `changelogs/unreleased`.

`--preview` arguments can also be used to preview the generated change log without deleting/updating files.

#### Source

* [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
Expand Down

0 comments on commit 2803bc3

Please sign in to comment.