From 2a00350ee91c0fd81ae645073bdbf22749e0ba2c Mon Sep 17 00:00:00 2001 From: Geert van Horrik Date: Thu, 12 Nov 2015 15:04:22 +0100 Subject: [PATCH 1/5] (*) Use parameters instead of context (there is no context) (x) Expand output path to a full path to support relative paths (such as . or ..) --- .../Extensions/GitReleaseNotesArgumentsExtensions.cs | 2 +- src/GitReleaseNotes/Program.cs | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/GitReleaseNotes/Extensions/GitReleaseNotesArgumentsExtensions.cs b/src/GitReleaseNotes/Extensions/GitReleaseNotesArgumentsExtensions.cs index 3f2e582..3285555 100644 --- a/src/GitReleaseNotes/Extensions/GitReleaseNotesArgumentsExtensions.cs +++ b/src/GitReleaseNotes/Extensions/GitReleaseNotesArgumentsExtensions.cs @@ -19,7 +19,7 @@ public static AuthSettings ToIssueTrackerSettings(this AuthenticationContext aut throw new ArgumentException("Authentication context has an unsupported configuration"); } - public static ReleaseNotesGenerationParameters ToContext(this GitReleaseNotesArguments arguments) + public static ReleaseNotesGenerationParameters ToParameters(this GitReleaseNotesArguments arguments) { return new ReleaseNotesGenerationParameters { diff --git a/src/GitReleaseNotes/Program.cs b/src/GitReleaseNotes/Program.cs index b518ce9..ec27105 100644 --- a/src/GitReleaseNotes/Program.cs +++ b/src/GitReleaseNotes/Program.cs @@ -35,7 +35,8 @@ static int Main(string[] args) ShowHelp(modelBindingDefinition); return 1; } - var context = arguments.ToContext(); + + var parameters = arguments.ToParameters(); //if (!context.Validate()) //{ // return -1; @@ -48,13 +49,16 @@ static int Main(string[] args) string outputFile = null; var previousReleaseNotes = new SemanticReleaseNotes(); - var outputPath = context.WorkingDirectory; + var outputPath = parameters.WorkingDirectory; var outputDirectory = new DirectoryInfo(outputPath); if (outputDirectory.Name == ".git") { outputPath = outputDirectory.Parent.FullName; } + // In case the user puts in a relative path as current directory, first get the full path + outputPath = Path.GetFullPath(outputPath); + if (!string.IsNullOrEmpty(arguments.OutputFile)) { outputFile = Path.IsPathRooted(arguments.OutputFile) @@ -63,7 +67,7 @@ static int Main(string[] args) previousReleaseNotes = new ReleaseNotesFileReader(fileSystem, outputPath).ReadPreviousReleaseNotes(outputFile); } - var releaseNotesGenerator = new ReleaseNotesGenerator(context); + var releaseNotesGenerator = new ReleaseNotesGenerator(parameters); var releaseNotes = releaseNotesGenerator.GenerateReleaseNotesAsync(previousReleaseNotes).Result; var releaseNotesOutput = releaseNotes.ToString(); From 0265c4df32d5f53d17cb743866abf3631a1fab35 Mon Sep 17 00:00:00 2001 From: Geert van Horrik Date: Thu, 12 Nov 2015 15:06:49 +0100 Subject: [PATCH 2/5] Code cleanup and maintenance --- .../Controllers/Api/ReleaseNotesController.cs | 12 ++++++----- .../Services/ReleaseNotesService.cs | 21 +------------------ src/GitReleaseNotes/ReleaseNotesGenerator.cs | 1 + 3 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/GitReleaseNotes.Website/Controllers/Api/ReleaseNotesController.cs b/src/GitReleaseNotes.Website/Controllers/Api/ReleaseNotesController.cs index 95e4638..5d2b2f6 100644 --- a/src/GitReleaseNotes.Website/Controllers/Api/ReleaseNotesController.cs +++ b/src/GitReleaseNotes.Website/Controllers/Api/ReleaseNotesController.cs @@ -26,19 +26,21 @@ public async Task Generate([FromBody] ReleaseNotesRequest r { Argument.IsNotNull(() => releaseNotesRequest); - var context1 = new ReleaseNotesGenerationParameters + var parameters = new ReleaseNotesGenerationParameters { RepositorySettings = { Url = releaseNotesRequest.RepositoryUrl, Branch = releaseNotesRequest.RepositoryBranch }, - IssueTracker = {ProjectId = releaseNotesRequest.IssueTrackerProjectId} + IssueTracker = + { + ProjectId = releaseNotesRequest.IssueTrackerProjectId + } }; - var context = context1; - context.AllTags = true; - var releaseNotes = await releaseNotesService.GetReleaseNotesAsync(context); + parameters.AllTags = true; + var releaseNotes = await releaseNotesService.GetReleaseNotesAsync(parameters); return new HttpResponseMessage { diff --git a/src/GitReleaseNotes.Website/Services/ReleaseNotesService.cs b/src/GitReleaseNotes.Website/Services/ReleaseNotesService.cs index d480440..3e3b53e 100644 --- a/src/GitReleaseNotes.Website/Services/ReleaseNotesService.cs +++ b/src/GitReleaseNotes.Website/Services/ReleaseNotesService.cs @@ -15,9 +15,6 @@ public class ReleaseNotesService : IReleaseNotesService { private static readonly ILog Log = LogManager.GetCurrentClassLogger(); - private readonly ICacheStorage _releaseNotesCacheStorage = - new CacheStorage(() => ExpirationPolicy.Duration(TimeSpan.FromHours(1))); - private readonly ITypeFactory _typeFactory; public ReleaseNotesService(ITypeFactory typeFactory) @@ -29,13 +26,11 @@ public ReleaseNotesService(ITypeFactory typeFactory) public async Task GetReleaseNotesAsync(ReleaseNotesGenerationParameters generationParameters) { - //var cachedReleaseNotes = _releaseNotesCacheStorage.GetFromCacheOrFetchAsync(key, async () => - //{ try { Log.Info("Generating release notes for '{0}'", "..."); // TODO log properly - var releaseNotesGenerator = _typeFactory.CreateInstanceWithParametersAndAutoCompletion(generationParameters); + var releaseNotesGenerator = new ReleaseNotesGenerator(generationParameters); var releaseNotes = await releaseNotesGenerator.GenerateReleaseNotesAsync(new SemanticReleaseNotes()); return releaseNotes; } @@ -44,20 +39,6 @@ public async Task GetReleaseNotesAsync(ReleaseNotesGenerat Log.Error(ex, "Failed to generate release notes for context '{0}'", "..."); return null; } - //}); - - //return cachedReleaseNotes; } - - //public static string GetContextKey(Context context) - //{ - // var key = string.Join("_", context.Repository.Url, context.Repository.Branch, context.IssueTracker.Server, context.IssueTracker.ProjectId); - - // key = key.Replace("/", "_") - // .Replace("\\", "_") - // .Replace(":", "_"); - - // return key; - //} } } diff --git a/src/GitReleaseNotes/ReleaseNotesGenerator.cs b/src/GitReleaseNotes/ReleaseNotesGenerator.cs index 0eebdbb..fd4c234 100644 --- a/src/GitReleaseNotes/ReleaseNotesGenerator.cs +++ b/src/GitReleaseNotes/ReleaseNotesGenerator.cs @@ -84,6 +84,7 @@ private static bool TryRemote(Repository gitRepository, string name, ReleaseNote out issueTracker); } + // TODO: Why is generationParameters not used? public static async Task GenerateReleaseNotesAsync(ReleaseNotesGenerationParameters generationParameters, IRepository gitRepo, IIssueTracker issueTracker, SemanticReleaseNotes previousReleaseNotes, Categories categories, TaggedCommit tagToStartFrom, ReleaseInfo currentReleaseInfo) From f693cb9fa6201d032044e72dcb0cd33019c5f982 Mon Sep 17 00:00:00 2001 From: Geert van Horrik Date: Thu, 12 Nov 2015 15:15:51 +0100 Subject: [PATCH 3/5] Update parameters.WorkingDirectory so it always contains a full path --- src/GitReleaseNotes/Program.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/GitReleaseNotes/Program.cs b/src/GitReleaseNotes/Program.cs index ec27105..f107dc4 100644 --- a/src/GitReleaseNotes/Program.cs +++ b/src/GitReleaseNotes/Program.cs @@ -35,13 +35,16 @@ static int Main(string[] args) ShowHelp(modelBindingDefinition); return 1; } - + var parameters = arguments.ToParameters(); //if (!context.Validate()) //{ // return -1; //} + // In case the user puts in a relative path as current directory, first get the full path + parameters.WorkingDirectory = Path.GetFullPath(parameters.WorkingDirectory); + try { var fileSystem = new FileSystem.FileSystem(); @@ -56,9 +59,6 @@ static int Main(string[] args) outputPath = outputDirectory.Parent.FullName; } - // In case the user puts in a relative path as current directory, first get the full path - outputPath = Path.GetFullPath(outputPath); - if (!string.IsNullOrEmpty(arguments.OutputFile)) { outputFile = Path.IsPathRooted(arguments.OutputFile) From 378405349fa076e227c3e8fbe18d97413620dc10 Mon Sep 17 00:00:00 2001 From: Geert van Horrik Date: Fri, 13 Nov 2015 11:14:55 +0100 Subject: [PATCH 4/5] #97 Support JIRA and dynamic repositories --- .../GitReleaseNotes.Tests.csproj | 22 ++-- src/GitReleaseNotes.Tests/app.config | 11 ++ src/GitReleaseNotes.Tests/packages.config | 8 +- .../Controllers/Api/ReleaseNotesController.cs | 49 +++++--- src/GitReleaseNotes.Website/FodyWeavers.xml | 2 +- .../GitReleaseNotes.Website.csproj | 32 +++-- src/GitReleaseNotes.Website/Web.config | 2 +- src/GitReleaseNotes.Website/packages.config | 12 +- .../GitReleaseNotesArgumentsExtensions.cs | 23 ++-- src/GitReleaseNotes/FodyWeavers.xml | 2 +- src/GitReleaseNotes/Git/RepositoryInfo.cs | 15 +++ src/GitReleaseNotes/GitReleaseNotes.csproj | 37 +++--- src/GitReleaseNotes/IssueTrackerParameters.cs | 5 +- .../ReleaseNotesGenerationParameters.cs | 5 +- src/GitReleaseNotes/ReleaseNotesGenerator.cs | 112 +++++++++++++++--- src/GitReleaseNotes/packages.config | 13 +- 16 files changed, 249 insertions(+), 101 deletions(-) create mode 100644 src/GitReleaseNotes.Tests/app.config create mode 100644 src/GitReleaseNotes/Git/RepositoryInfo.cs diff --git a/src/GitReleaseNotes.Tests/GitReleaseNotes.Tests.csproj b/src/GitReleaseNotes.Tests/GitReleaseNotes.Tests.csproj index 32d44e0..d2feb73 100644 --- a/src/GitReleaseNotes.Tests/GitReleaseNotes.Tests.csproj +++ b/src/GitReleaseNotes.Tests/GitReleaseNotes.Tests.csproj @@ -1,6 +1,6 @@  - + @@ -15,7 +15,8 @@ GitReleaseNotes.Tests v4.5 512 - bc653c4d + + true @@ -45,7 +46,7 @@ ..\packages\ApprovalUtilities.3.0.8\lib\net45\ApprovalUtilities.Net45.dll - ..\packages\Atlassian.SDK.2.5.0\lib\Atlassian.Jira.dll + ..\packages\Atlassian.SDK.5.0.0\lib\Atlassian.Jira.dll True @@ -56,12 +57,12 @@ ..\packages\GitTools.IssueTrackers.0.1.0-beta0002\lib\net45\GitTools.IssueTrackers.dll True - - ..\packages\LibGit2Sharp.0.21.0.176\lib\net40\LibGit2Sharp.dll + + ..\packages\LibGit2Sharp.0.22.0-pre20150716071016\lib\net40\LibGit2Sharp.dll True - - ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll True @@ -71,6 +72,10 @@ ..\packages\Octokit.0.15.0\lib\net45\Octokit.dll True + + ..\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll + True + ..\packages\Shouldly.2.6.0\lib\net40\Shouldly.dll True @@ -101,6 +106,7 @@ + @@ -125,7 +131,7 @@ - +