Skip to content

Commit ccd343d

Browse files
committed
code cleanup for GitVersionTask
1 parent 0fb4cac commit ccd343d

11 files changed

+250
-284
lines changed

src/GitVersionTask.Tests/InvalidFileCheckerTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.IO;
33
using GitVersion;
4+
using GitVersionTask;
45
using GitVersionTask.Tests.Mocks;
56
using Microsoft.Build.Framework;
67
using NUnit.Framework;
Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
namespace GitVersionTask
22
{
3-
using System.IO;
4-
using GitVersion;
5-
using GitVersion.Helpers;
63
using Microsoft.Build.Framework;
74

85
public class GenerateGitVersionInformation : GitVersionTaskBase
@@ -19,24 +16,6 @@ public class GenerateGitVersionInformation : GitVersionTaskBase
1916
[Output]
2017
public string GitVersionInformationFilePath { get; set; }
2118

22-
protected override void InnerExecute()
23-
{
24-
if (GetVersionVariables(out var versionVariables)) return;
25-
26-
var fileExtension = TaskUtils.GetFileExtension(Language);
27-
var fileName = $"GitVersionInformation.g.{fileExtension}";
28-
29-
if (IntermediateOutputPath == null)
30-
{
31-
fileName = $"GitVersionInformation_{Path.GetFileNameWithoutExtension(ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}";
32-
}
33-
34-
var workingDirectory = IntermediateOutputPath ?? TempFileTracker.TempPath;
35-
36-
GitVersionInformationFilePath = Path.Combine(workingDirectory, fileName);
37-
38-
var generator = new GitVersionInformationGenerator(fileName, workingDirectory, versionVariables, new FileSystem());
39-
generator.Generate();
40-
}
19+
public override bool Execute() => GitVersionTasks.GenerateGitVersionInformation(this);
4120
}
4221
}

src/GitVersionTask/GetVersion.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,15 +94,6 @@ public class GetVersion : GitVersionTaskBase
9494
[Output]
9595
public string CommitsSinceVersionSourcePadded { get; set; }
9696

97-
protected override void InnerExecute()
98-
{
99-
if (GetVersionVariables(out var versionVariables)) return;
100-
101-
var thisType = typeof(GetVersion);
102-
foreach (var variable in versionVariables)
103-
{
104-
thisType.GetProperty(variable.Key)?.SetValue(this, variable.Value, null);
105-
}
106-
}
97+
public override bool Execute() => GitVersionTasks.GetVersion(this);
10798
}
10899
}

src/GitVersionTask/GitVersionTask.v2.ncrunchproject

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 0 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,13 @@
11
namespace GitVersionTask
22
{
3-
using System;
4-
using GitVersion;
5-
using GitVersion.Helpers;
6-
73
using Microsoft.Build.Framework;
84
using Microsoft.Build.Utilities;
95

106
public abstract class GitVersionTaskBase : Task
117
{
12-
protected GitVersionTaskBase()
13-
{
14-
var fileSystem = new FileSystem();
15-
ExecuteCore = new ExecuteCore(fileSystem);
16-
GitVersion.Logger.SetLoggers(LogDebug, LogInfo, LogWarning, s => LogError(s));
17-
}
18-
19-
public override bool Execute()
20-
{
21-
try
22-
{
23-
InnerExecute();
24-
return true;
25-
}
26-
catch (WarningException errorException)
27-
{
28-
LogWarning(errorException.Message);
29-
return true;
30-
}
31-
catch (Exception exception)
32-
{
33-
LogError("Error occurred: " + exception);
34-
return false;
35-
}
36-
}
37-
38-
protected abstract void InnerExecute();
39-
40-
protected ExecuteCore ExecuteCore { get; }
41-
428
[Required]
439
public string SolutionDirectory { get; set; }
4410

4511
public bool NoFetch { get; set; }
46-
47-
public void LogDebug(string message)
48-
{
49-
BuildEngine.LogMessageEvent(new BuildMessageEventArgs(message, string.Empty, "GitVersionTask", MessageImportance.Low));
50-
}
51-
52-
public void LogWarning(string message)
53-
{
54-
BuildEngine.LogWarningEvent(new BuildWarningEventArgs(string.Empty, string.Empty, null, 0, 0, 0, 0, message, string.Empty, "GitVersionTask"));
55-
}
56-
57-
public void LogInfo(string message)
58-
{
59-
BuildEngine.LogMessageEvent(new BuildMessageEventArgs(message, string.Empty, "GitVersionTask", MessageImportance.Normal));
60-
}
61-
62-
public void LogError(string message, string file = null)
63-
{
64-
BuildEngine.LogErrorEvent(new BuildErrorEventArgs(string.Empty, string.Empty, file, 0, 0, 0, 0, message, string.Empty, "GitVersionTask"));
65-
}
66-
67-
protected bool GetVersionVariables(out VersionVariables versionVariables)
68-
{
69-
return !ExecuteCore.TryGetVersion(SolutionDirectory, out versionVariables, NoFetch, new Authentication());
70-
}
7112
}
7213
}

src/GitVersionTask/GitVersionTasks.cs

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
namespace GitVersionTask
2+
{
3+
using System;
4+
using System.IO;
5+
using GitVersion;
6+
using GitVersion.Helpers;
7+
using Microsoft.Build.Framework;
8+
9+
public static class GitVersionTasks
10+
{
11+
public static ExecuteCore ExecuteCore { get; }
12+
13+
static GitVersionTasks()
14+
{
15+
var fileSystem = new FileSystem();
16+
ExecuteCore = new ExecuteCore(fileSystem);
17+
}
18+
19+
public static bool GetVersion(GetVersion task)
20+
{
21+
return Execute(task, t =>
22+
{
23+
if (!GetVersionVariables(task, out var versionVariables)) return;
24+
25+
var thisType = typeof(GetVersion);
26+
foreach (var variable in versionVariables)
27+
{
28+
thisType.GetProperty(variable.Key)?.SetValue(task, variable.Value, null);
29+
}
30+
});
31+
}
32+
33+
public static bool GenerateGitVersionInformation(GenerateGitVersionInformation task)
34+
{
35+
return Execute(task, t =>
36+
{
37+
if (!GetVersionVariables(task, out var versionVariables)) return;
38+
39+
var fileExtension = GetFileExtension(task.Language);
40+
var fileName = $"GitVersionInformation.g.{fileExtension}";
41+
42+
if (task.IntermediateOutputPath == null)
43+
{
44+
fileName = $"GitVersionInformation_{Path.GetFileNameWithoutExtension(task.ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}";
45+
}
46+
47+
var workingDirectory = task.IntermediateOutputPath ?? TempFileTracker.TempPath;
48+
49+
task.GitVersionInformationFilePath = Path.Combine(workingDirectory, fileName);
50+
51+
var generator = new GitVersionInformationGenerator(fileName, workingDirectory, versionVariables, new FileSystem());
52+
generator.Generate();
53+
});
54+
}
55+
56+
public static bool UpdateAssemblyInfo(UpdateAssemblyInfo task)
57+
{
58+
return Execute(task, t =>
59+
{
60+
TempFileTracker.DeleteTempFiles();
61+
InvalidFileChecker.CheckForInvalidFiles(task.CompileFiles, task.ProjectFile);
62+
63+
if (!GetVersionVariables(task, out var versionVariables)) return;
64+
65+
var fileExtension = GetFileExtension(task.Language);
66+
var assemblyInfoFileName = $"GitVersionTaskAssemblyInfo.g.{fileExtension}";
67+
68+
if (task.IntermediateOutputPath == null)
69+
{
70+
assemblyInfoFileName = $"AssemblyInfo_{Path.GetFileNameWithoutExtension(task.ProjectFile)}_{Path.GetRandomFileName()}.g.{fileExtension}";
71+
}
72+
73+
var workingDirectory = task.IntermediateOutputPath ?? TempFileTracker.TempPath;
74+
75+
task.AssemblyInfoTempFilePath = Path.Combine(workingDirectory, assemblyInfoFileName);
76+
77+
using (var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(assemblyInfoFileName, workingDirectory, versionVariables, new FileSystem(), true))
78+
{
79+
assemblyInfoFileUpdater.Update();
80+
assemblyInfoFileUpdater.CommitChanges();
81+
}
82+
});
83+
}
84+
85+
public static bool WriteVersionInfoToBuildLog(WriteVersionInfoToBuildLog task)
86+
{
87+
return Execute(task, t =>
88+
{
89+
if (!GetVersionVariables(task, out var versionVariables)) return;
90+
var log = task.Log;
91+
92+
foreach (var buildServer in BuildServerList.GetApplicableBuildServers())
93+
{
94+
log.LogMessage($"Executing GenerateSetVersionMessage for '{buildServer.GetType().Name}'.");
95+
log.LogMessage(buildServer.GenerateSetVersionMessage(versionVariables));
96+
log.LogMessage($"Executing GenerateBuildLogOutput for '{buildServer.GetType().Name}'.");
97+
foreach (var buildParameter in BuildOutputFormatter.GenerateBuildLogOutput(buildServer, versionVariables))
98+
{
99+
log.LogMessage(buildParameter);
100+
}
101+
}
102+
});
103+
}
104+
105+
private static bool Execute<T>(T task, Action<T> action)
106+
where T : GitVersionTaskBase
107+
{
108+
void LogDebug(string message) => task.Log.LogMessage(MessageImportance.Low, message);
109+
void LogInfo(string message) => task.Log.LogMessage(MessageImportance.Normal, message);
110+
void LogWarning(string message) => task.Log.LogWarning(message);
111+
void LogError(string message) => task.Log.LogError(message);
112+
113+
Logger.SetLoggers(LogDebug, LogInfo, LogWarning, LogError);
114+
var log = task.Log;
115+
try
116+
{
117+
action(task);
118+
}
119+
catch (WarningException errorException)
120+
{
121+
log.LogWarningFromException(errorException);
122+
return true;
123+
}
124+
catch (Exception exception)
125+
{
126+
log.LogErrorFromException(exception);
127+
return false;
128+
}
129+
130+
return !log.HasLoggedErrors;
131+
}
132+
133+
private static bool GetVersionVariables(GitVersionTaskBase task, out VersionVariables versionVariables)
134+
=> ExecuteCore.TryGetVersion(task.SolutionDirectory, out versionVariables, task.NoFetch, new Authentication());
135+
136+
private static string GetFileExtension(string language)
137+
{
138+
switch(language)
139+
{
140+
case "C#":
141+
return "cs";
142+
143+
case "F#":
144+
return "fs";
145+
146+
case "VB":
147+
return "vb";
148+
149+
default:
150+
throw new Exception($"Unknown language detected: '{language}'");
151+
}
152+
}
153+
}
154+
}

0 commit comments

Comments
 (0)