Skip to content
This repository was archived by the owner on Sep 20, 2022. It is now read-only.

Commit 326ea7b

Browse files
committed
Cleanup
1 parent d06fe64 commit 326ea7b

5 files changed

Lines changed: 84 additions & 83 deletions

File tree

src/GitReleaseNotes.Website/Services/ReleaseNotesService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public async Task<SemanticReleaseNotes> GetReleaseNotesAsync(ReleaseNotesGenerat
3636
Log.Info("Generating release notes for '{0}'", "..."); // TODO log properly
3737

3838
var releaseNotesGenerator = _typeFactory.CreateInstanceWithParametersAndAutoCompletion<ReleaseNotesGenerator>(generationParameters);
39-
var releaseNotes = await releaseNotesGenerator.GenerateReleaseNotesAsync();
39+
var releaseNotes = await releaseNotesGenerator.GenerateReleaseNotesAsync(new SemanticReleaseNotes());
4040
return releaseNotes;
4141
}
4242
catch (Exception ex)

src/GitReleaseNotes/Extensions/GitReleaseNotesArgumentsExtensions.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using GitTools;
1+
using System.IO;
22

33
namespace GitReleaseNotes
44
{
@@ -8,8 +8,7 @@ public static ReleaseNotesGenerationParameters ToContext(this GitReleaseNotesArg
88
{
99
return new ReleaseNotesGenerationParameters
1010
{
11-
WorkingDirectory = arguments.WorkingDirectory,
12-
OutputFile = arguments.OutputFile,
11+
WorkingDirectory = arguments.WorkingDirectory ?? Directory.GetCurrentDirectory(),
1312
Categories = arguments.Categories,
1413
Version = arguments.Version,
1514
AllTags = arguments.AllTags,

src/GitReleaseNotes/Program.cs

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
using System;
22
using System.Diagnostics;
3+
using System.IO;
34
using System.Linq;
45
using Args;
56
using Args.Help;
67
using Args.Help.Formatters;
8+
using GitReleaseNotes.FileSystem;
79

810
namespace GitReleaseNotes
911
{
@@ -20,16 +22,19 @@ static int Main(string[] args)
2022

2123
if (args.Any(a => a == "/?" || a == "?" || a.Equals("/help", StringComparison.InvariantCultureIgnoreCase)))
2224
{
23-
var help = new HelpProvider().GenerateModelHelp(modelBindingDefinition);
24-
var f = new ConsoleHelpFormatter();
25-
f.WriteHelp(help, Console.Out);
25+
ShowHelp(modelBindingDefinition);
2626

2727
return 0;
2828
}
2929

3030
var exitCode = 0;
3131

3232
var arguments = modelBindingDefinition.CreateAndBind(args);
33+
if (string.IsNullOrEmpty(arguments.OutputFile))
34+
{
35+
ShowHelp(modelBindingDefinition);
36+
return 1;
37+
}
3338
var context = arguments.ToContext();
3439
//if (!context.Validate())
3540
//{
@@ -38,12 +43,31 @@ static int Main(string[] args)
3843

3944
try
4045
{
41-
var releaseNotesGenerator = new ReleaseNotesGenerator(context, new FileSystem.FileSystem());
42-
var task = releaseNotesGenerator.GenerateReleaseNotesAsync();
46+
var fileSystem = new FileSystem.FileSystem();
47+
var releaseFileWriter = new ReleaseFileWriter(fileSystem);
48+
string outputFile = null;
49+
var previousReleaseNotes = new SemanticReleaseNotes();
50+
51+
var outputPath = context.WorkingDirectory;
52+
var outputDirectory = new DirectoryInfo(outputPath);
53+
if (outputDirectory.Name == ".git")
54+
{
55+
outputPath = outputDirectory.Parent.FullName;
56+
}
4357

44-
// TODO Write out the file based on the argument
45-
46-
task.Wait();
58+
if (!string.IsNullOrEmpty(arguments.OutputFile))
59+
{
60+
outputFile = Path.IsPathRooted(arguments.OutputFile)
61+
? arguments.OutputFile
62+
: Path.Combine(outputPath, arguments.OutputFile);
63+
previousReleaseNotes = new ReleaseNotesFileReader(fileSystem, outputPath).ReadPreviousReleaseNotes(outputFile);
64+
}
65+
66+
var releaseNotesGenerator = new ReleaseNotesGenerator(context);
67+
var releaseNotes = releaseNotesGenerator.GenerateReleaseNotesAsync(previousReleaseNotes).Result;
68+
69+
var releaseNotesOutput = releaseNotes.ToString();
70+
releaseFileWriter.OutputReleaseNotesFile(releaseNotesOutput, outputFile);
4771

4872
Log.WriteLine("Done");
4973
}
@@ -66,5 +90,18 @@ static int Main(string[] args)
6690

6791
return exitCode;
6892
}
93+
94+
private static void ShowHelp(IModelBindingDefinition<GitReleaseNotesArguments> modelBindingDefinition, string reason = null)
95+
{
96+
var help = new HelpProvider().GenerateModelHelp(modelBindingDefinition);
97+
var f = new ConsoleHelpFormatter();
98+
f.WriteHelp(help, Console.Out);
99+
100+
if (reason != null)
101+
{
102+
Console.WriteLine();
103+
Console.WriteLine(reason);
104+
}
105+
}
69106
}
70107
}

src/GitReleaseNotes/ReleaseNotesGenerationParameters.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ public ReleaseNotesGenerationParameters()
1919
public RepositoryContext RepositorySettings { get; private set; }
2020
public IssueTrackerParameters IssueTracker { get; private set; }
2121

22-
[Obsolete("Release notes generation should have nothing to do with an output file")]
23-
public string OutputFile { get; set; }
24-
2522
public string WorkingDirectory { get; set; }
2623
}
2724
}

src/GitReleaseNotes/ReleaseNotesGenerator.cs

Lines changed: 36 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)