@@ -18,87 +18,55 @@ public class ReleaseNotesGenerator
1818 private static readonly ILog Log = GitReleaseNotesEnvironment . Log ;
1919
2020 private readonly ReleaseNotesGenerationParameters _generationParameters ;
21- private readonly IFileSystem _fileSystem ;
2221
23- public ReleaseNotesGenerator ( ReleaseNotesGenerationParameters generationParameters , IFileSystem fileSystem )
22+ public ReleaseNotesGenerator ( ReleaseNotesGenerationParameters generationParameters )
2423 {
2524 _generationParameters = generationParameters ;
26- _fileSystem = fileSystem ;
2725 }
2826
29- public async Task < SemanticReleaseNotes > GenerateReleaseNotesAsync ( )
27+ public async Task < SemanticReleaseNotes > GenerateReleaseNotesAsync ( SemanticReleaseNotes releaseNotesToUpdate )
3028 {
31- var context = _generationParameters ;
32-
33- using ( var temporaryFilesContext = new TemporaryFilesContext ( ) )
29+ var gitRepository = new Repository ( Repository . Discover ( _generationParameters . WorkingDirectory ) ) ;
30+ IIssueTracker issueTracker ;
31+ if ( _generationParameters . IssueTracker . Type . HasValue )
3432 {
35- //var gitPreparer = new GitPreparer();
36- //var gitRepositoryDirectory = gitPreparer.Prepare(_generationParameters.RepositorySettings, temporaryFilesContext);
37- var startingPath = context . WorkingDirectory ?? Directory . GetCurrentDirectory ( ) ;
38- var gitRepository = new Repository ( Repository . Discover ( startingPath ) ) ;
39- IIssueTracker issueTracker ;
40- if ( context . IssueTracker . Type . HasValue )
41- {
42- issueTracker = IssueTrackerFactory . CreateIssueTracker ( new IssueTrackerSettings ( context . IssueTracker . Server ,
43- context . IssueTracker . Type . Value )
44- {
45- Project = context . IssueTracker . ProjectId ,
46- Authentication = context . IssueTracker . Authentication
47- } ) ;
48- }
49- else
50- {
51- if ( ! TryRemote ( gitRepository , "upstream" , context , out issueTracker ) &&
52- ! TryRemote ( gitRepository , "origin" , context , out issueTracker ) )
33+ issueTracker = IssueTrackerFactory . CreateIssueTracker ( new IssueTrackerSettings ( _generationParameters . IssueTracker . Server ,
34+ _generationParameters . IssueTracker . Type . Value )
5335 {
54- throw new Exception ( "Unable to guess issue tracker through remote, specify issue tracker type on the command line" ) ;
55- }
56- }
57-
58- var releaseFileWriter = new ReleaseFileWriter ( _fileSystem ) ;
59- string outputFile = null ;
60- var previousReleaseNotes = new SemanticReleaseNotes ( ) ;
61-
62- var outputPath = startingPath ;
63- var outputDirectory = new DirectoryInfo ( outputPath ) ;
64- if ( outputDirectory . Name == ".git" )
65- {
66- outputPath = outputDirectory . Parent . FullName ;
67- }
68-
69- if ( ! string . IsNullOrEmpty ( context . OutputFile ) )
70- {
71- outputFile = Path . IsPathRooted ( context . OutputFile )
72- ? context . OutputFile
73- : Path . Combine ( outputPath , context . OutputFile ) ;
74- previousReleaseNotes = new ReleaseNotesFileReader ( _fileSystem , outputPath ) . ReadPreviousReleaseNotes ( outputFile ) ;
75- }
76-
77- var categories = new Categories ( context . Categories , context . AllLabels ) ;
78- var tagToStartFrom = context . AllTags
79- ? gitRepository . GetFirstCommit ( )
80- : gitRepository . GetLastTaggedCommit ( ) ?? gitRepository . GetFirstCommit ( ) ;
81- var currentReleaseInfo = gitRepository . GetCurrentReleaseInfo ( ) ;
82- if ( ! string . IsNullOrEmpty ( context . Version ) )
83- {
84- currentReleaseInfo . Name = context . Version ;
85- currentReleaseInfo . When = DateTimeOffset . Now ;
86- }
87- else
36+ Project = _generationParameters . IssueTracker . ProjectId ,
37+ Authentication = _generationParameters . IssueTracker . Authentication
38+ } ) ;
39+ }
40+ else
41+ {
42+ if ( ! TryRemote ( gitRepository , "upstream" , _generationParameters , out issueTracker ) &&
43+ ! TryRemote ( gitRepository , "origin" , _generationParameters , out issueTracker ) )
8844 {
89- currentReleaseInfo . Name = "vNext" ;
45+ throw new Exception ( "Unable to guess issue tracker through remote, specify issue tracker type on the command line" ) ;
9046 }
47+ }
9148
92- var releaseNotes = await GenerateReleaseNotesAsync (
93- context , gitRepository , issueTracker ,
94- previousReleaseNotes , categories ,
95- tagToStartFrom , currentReleaseInfo ) ;
49+ var categories = new Categories ( _generationParameters . Categories , _generationParameters . AllLabels ) ;
50+ var tagToStartFrom = _generationParameters . AllTags
51+ ? gitRepository . GetFirstCommit ( )
52+ : gitRepository . GetLastTaggedCommit ( ) ?? gitRepository . GetFirstCommit ( ) ;
53+ var currentReleaseInfo = gitRepository . GetCurrentReleaseInfo ( ) ;
54+ if ( ! string . IsNullOrEmpty ( _generationParameters . Version ) )
55+ {
56+ currentReleaseInfo . Name = _generationParameters . Version ;
57+ currentReleaseInfo . When = DateTimeOffset . Now ;
58+ }
59+ else
60+ {
61+ currentReleaseInfo . Name = "vNext" ;
62+ }
9663
97- var releaseNotesOutput = releaseNotes . ToString ( ) ;
98- releaseFileWriter . OutputReleaseNotesFile ( releaseNotesOutput , outputFile ) ;
64+ var releaseNotes = await GenerateReleaseNotesAsync (
65+ _generationParameters , gitRepository , issueTracker ,
66+ releaseNotesToUpdate , categories ,
67+ tagToStartFrom , currentReleaseInfo ) ;
9968
100- return releaseNotes ;
101- }
69+ return releaseNotes ;
10270 }
10371
10472 private static bool TryRemote ( Repository gitRepository , string name , ReleaseNotesGenerationParameters context ,
0 commit comments