This repository has been archived by the owner on Jan 18, 2021. It is now read-only.
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #11 from mockito/concise-release-notes
Progress on concise release notes
- Loading branch information
Showing
14 changed files
with
179 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8 changes: 6 additions & 2 deletions
8
src/main/groovy/org/mockito/release/notes/generator/ReleaseNotesGenerators.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,22 @@ | ||
package org.mockito.release.notes.generator; | ||
|
||
import org.mockito.release.exec.Exec; | ||
import org.mockito.release.exec.ProcessRunner; | ||
import org.mockito.release.notes.improvements.Improvements; | ||
import org.mockito.release.notes.improvements.ImprovementsProvider; | ||
import org.mockito.release.notes.vcs.ContributionsProvider; | ||
import org.mockito.release.notes.vcs.ReleaseDateProvider; | ||
import org.mockito.release.notes.vcs.Vcs; | ||
|
||
import java.io.File; | ||
|
||
public class ReleaseNotesGenerators { | ||
|
||
public static ReleaseNotesGenerator releaseNotesGenerator(File workDir, String authToken) { | ||
ContributionsProvider contributionsProvider = Vcs.getGitProvider(Exec.getProcessRunner(workDir)); | ||
ProcessRunner processRunner = Exec.getProcessRunner(workDir); | ||
ContributionsProvider contributionsProvider = Vcs.getContributionsProvider(processRunner); | ||
ImprovementsProvider improvementsProvider = Improvements.getGitHubProvider(authToken); | ||
return new DefaultReleaseNotesGenerator(contributionsProvider, improvementsProvider); | ||
ReleaseDateProvider releaseDateProvider = Vcs.getReleaseDateProvider(processRunner); | ||
return new DefaultReleaseNotesGenerator(contributionsProvider, improvementsProvider, releaseDateProvider); | ||
} | ||
} |
34 changes: 34 additions & 0 deletions
34
src/main/groovy/org/mockito/release/notes/internal/DateFormat.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package org.mockito.release.notes.internal; | ||
|
||
import java.text.ParseException; | ||
import java.text.SimpleDateFormat; | ||
import java.util.Date; | ||
import java.util.TimeZone; | ||
|
||
/** | ||
* Date parsing and formatting utilities | ||
*/ | ||
public class DateFormat { | ||
|
||
/** | ||
* Parses date in iso format, e.g. "yyyy-MM-dd HH:mm:ss Z" | ||
*/ | ||
public static Date parseDate(String date) { | ||
String pattern = "yyyy-MM-dd HH:mm:ss Z"; | ||
SimpleDateFormat format = new SimpleDateFormat(pattern); | ||
try { | ||
return format.parse(date.trim()); | ||
} catch (ParseException e) { | ||
throw new RuntimeException("Problems parsing date: [" + date + "]. Required format is: [" + pattern + "].", e); | ||
} | ||
} | ||
|
||
/** | ||
* Parses date in iso format, e.g. "yyyy-MM-dd HH:mm:ss Z" | ||
*/ | ||
public static String formatDate(Date date) { | ||
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm"); | ||
f.setTimeZone(TimeZone.getTimeZone("UTC")); | ||
return f.format(date); | ||
} | ||
} |
33 changes: 33 additions & 0 deletions
33
src/main/groovy/org/mockito/release/notes/vcs/DefaultReleaseDateProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
package org.mockito.release.notes.vcs; | ||
|
||
import org.mockito.release.exec.ProcessRunner; | ||
|
||
import java.util.Collection; | ||
import java.util.Date; | ||
import java.util.HashMap; | ||
import java.util.Map; | ||
|
||
import static org.mockito.release.notes.internal.DateFormat.parseDate; | ||
|
||
class DefaultReleaseDateProvider implements ReleaseDateProvider { | ||
|
||
private final ProcessRunner runner; | ||
|
||
DefaultReleaseDateProvider(ProcessRunner runner) { | ||
this.runner = runner; | ||
} | ||
|
||
@Override | ||
public Map<String, Date> getReleaseDates(Collection<String> versions, String tagPrefix) { | ||
Map<String, Date> out = new HashMap<String, Date>(); | ||
for (String version: versions) { | ||
String tag = tagPrefix + version; | ||
String date = runner.run("git", "log", "--pretty=%ad", "--date=iso", tag, "-n", "1"); | ||
//example output returned by running git command: 2017-01-29 08:14:09 -0800 | ||
Date d = parseDate(date.trim()); | ||
out.put(version, d); | ||
} | ||
|
||
return out; | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
src/main/groovy/org/mockito/release/notes/vcs/ReleaseDateProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package org.mockito.release.notes.vcs; | ||
|
||
import java.util.Collection; | ||
import java.util.Date; | ||
import java.util.Map; | ||
|
||
/** | ||
* Provides release dates for versions | ||
*/ | ||
public interface ReleaseDateProvider { | ||
|
||
/** | ||
* Provides release dates for given versions. | ||
* | ||
* @param versions for example: 1.2.0, 1.1.0, 1.0.0 | ||
* @param tagPrefix optional tag prefix, adding it to the version String should create vcs addressable revision, tag. | ||
* Typically it is "v" or empty String if no tag prefix is used. | ||
*/ | ||
Map<String, Date> getReleaseDates(Collection<String> versions, String tagPrefix); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
src/test/groovy/org/mockito/release/notes/internal/DateFormatTest.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package org.mockito.release.notes.internal | ||
|
||
import spock.lang.Specification | ||
|
||
class DateFormatTest extends Specification { | ||
|
||
def "parses date"() { | ||
def date = DateFormat.parseDate("2017-01-29 08:14:09 -0800") | ||
|
||
expect: | ||
//Ensure that the TZ is correct | ||
DateFormat.formatDate(date) == "2017-01-29 16:14" | ||
} | ||
|
||
def "throws meaningful exception when date cannot be parsed"() { | ||
when: | ||
DateFormat.parseDate("2017-01- 08:14:09 -0800") | ||
|
||
then: | ||
def ex = thrown(RuntimeException) | ||
ex.message.contains("2017-01- 08:14:09 -0800") | ||
} | ||
} |
29 changes: 29 additions & 0 deletions
29
src/test/groovy/org/mockito/release/notes/vcs/DefaultReleaseDateProviderTest.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package org.mockito.release.notes.vcs | ||
|
||
import org.mockito.release.exec.ProcessRunner | ||
import org.mockito.release.notes.internal.DateFormat | ||
import spock.lang.Specification | ||
|
||
class DefaultReleaseDateProviderTest extends Specification { | ||
|
||
def runner = Mock(ProcessRunner) | ||
def provider = new DefaultReleaseDateProvider(runner) | ||
|
||
def "no versions"() { | ||
expect: | ||
provider.getReleaseDates([], "v").isEmpty() | ||
} | ||
|
||
def "provides release dates"() { | ||
runner.run("git", "log", "--pretty=%ad", "--date=iso", "v1.0.0", "-n", "1") >> "\n2017-01-29 08:14:09 -0800\n" | ||
runner.run("git", "log", "--pretty=%ad", "--date=iso", "v2.0.0", "-n", "1") >> "\n2017-01-30 10:14:09 -0400\n" | ||
|
||
when: | ||
def dates = provider.getReleaseDates(["1.0.0", "2.0.0"], "v") | ||
|
||
then: | ||
dates.size() == 2 | ||
DateFormat.formatDate(dates["1.0.0"]) == "2017-01-29 16:14" | ||
DateFormat.formatDate(dates["2.0.0"]) == "2017-01-30 14:14" | ||
} | ||
} |