Skip to content

Commit 0777a5c

Browse files
committed
Merge branch 'dev'
2 parents b250434 + bc5c37b commit 0777a5c

3 files changed

Lines changed: 86 additions & 50 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Set version for project from git tag format MAJOR.MINOR.PATCH also set branch na
1313
- GetProjectVersionFormatAll()
1414

1515
**Supported engines:**
16-
- 4.23.1 - 4.25.3
16+
- 4.18 - 4.25
1717

1818
**Supported platforms:**
1919
- Windows

Source/ProjectVersionFromGit/Private/ProjectVersionFromGitBPLibrary.cpp

Lines changed: 76 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ int32 UProjectVersionFromGitBPLibrary::Major = 0;
1313
int32 UProjectVersionFromGitBPLibrary::Minor = 0;
1414
int32 UProjectVersionFromGitBPLibrary::Patch = 0;
1515

16+
FString UProjectVersionFromGitBPLibrary::SectionName = FString(TEXT("VersionInfo"));
17+
FString UProjectVersionFromGitBPLibrary::VersionFileIni = FString(TEXT("Version.ini"));
18+
1619
FString UProjectVersionFromGitBPLibrary::GitStdOutput = FString(TEXT(""));
1720

1821
DEFINE_LOG_CATEGORY(ProjectVersionFromGit)
@@ -23,9 +26,24 @@ UProjectVersionFromGitBPLibrary::UProjectVersionFromGitBPLibrary(const FObjectIn
2326
GetProjectVersion();
2427
}
2528

29+
bool UProjectVersionFromGitBPLibrary::ExecProcess(const TCHAR* URL, const TCHAR* Params, int32* OutReturnCode, FString* OutStdOut, FString* OutStdErr, const TCHAR* OptionalWorkingDirectory)
30+
{
31+
if (!GEngine->IsEditor())
32+
{
33+
return false;
34+
}
35+
36+
#if ENGINE_MINOR_VERSION >= 23
37+
return FPlatformProcess::ExecProcess(URL, Params, OutReturnCode, OutStdOut, OutStdErr, OptionalWorkingDirectory);
38+
#else
39+
const FString command = FString(URL) + FString(TEXT(" -C ")) + FString(OptionalWorkingDirectory);
40+
return FPlatformProcess::ExecProcess(*command, Params, OutReturnCode, OutStdOut, OutStdErr);
41+
#endif
42+
}
43+
2644
FText UProjectVersionFromGitBPLibrary::GetProjectVersion()
2745
{
28-
static const FString DefaultGameIni = FString::Printf(TEXT("%sDefaultGame.ini"), *FPaths::SourceConfigDir());
46+
static const FString VersionFileIniPath = FString::Printf(TEXT("%s%s"), *FPaths::SourceConfigDir(), *VersionFileIni);
2947

3048
if (GEngine->IsEditor())
3149
{
@@ -35,11 +53,14 @@ FText UProjectVersionFromGitBPLibrary::GetProjectVersion()
3553
static const FString OptionalWorkingDirectory = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir());
3654

3755
FString TagNameArg;
38-
FPlatformProcess::ExecProcess(TEXT("git"), TEXT("rev-list --tags --max-count=1"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
3956

40-
TagNameArg = FString(TEXT("describe --tags ")) + OutStdOut.TrimStartAndEnd();
41-
FPlatformProcess::ExecProcess(TEXT("git"), *TagNameArg, &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
42-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- Git tag: %s"), *OutStdOut);
57+
ExecProcess(TEXT("git"), TEXT("rev-list --tags --max-count=1"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
58+
OutStdOut.TrimStartAndEndInline();
59+
60+
TagNameArg = FString(TEXT("describe --tags ")) + OutStdOut;
61+
ExecProcess(TEXT("git"), *TagNameArg, &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
62+
OutStdOut.TrimStartAndEndInline();
63+
//UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- Git tag: %s"), *OutStdOut);
4364

4465
const FRegexPattern myPattern(TEXT("([0-9]\\.[0-9]\\.[0-9])+"));
4566
FRegexMatcher myMatcher(myPattern, OutStdOut);
@@ -48,10 +69,10 @@ FText UProjectVersionFromGitBPLibrary::GetProjectVersion()
4869
{
4970
int32 beginPos = myMatcher.GetMatchBeginning();
5071
int32 endPos = myMatcher.GetMatchEnding();
51-
UE_LOG(ProjectVersionFromGit, Log, TEXT("Regex git tag pos: %i %i"), beginPos, endPos);
72+
//UE_LOG(ProjectVersionFromGit, Log, TEXT("Regex git tag pos: %i %i"), beginPos, endPos);
5273
OutStdOut = OutStdOut.Mid(beginPos, endPos - beginPos);
5374
}
54-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- After regex git tag: %s"), *OutStdOut);
75+
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- Git tag: %s"), *OutStdOut);
5576

5677
if (OutStdOut.IsEmpty())
5778
{
@@ -60,7 +81,7 @@ FText UProjectVersionFromGitBPLibrary::GetProjectVersion()
6081
}
6182
else
6283
{
63-
OutStdOut = OutStdOut.TrimStartAndEnd();
84+
OutStdOut.TrimStartAndEndInline();
6485
TArray<FString> OutArrayParse;
6586
OutStdOut.ParseIntoArrayWS(OutArrayParse, TEXT("."));
6687

@@ -88,121 +109,121 @@ FText UProjectVersionFromGitBPLibrary::GetProjectVersion()
88109

89110
if (!GitStdOutput.IsEmpty())
90111
{
91-
UE_LOG(ProjectVersionFromGit, Warning, TEXT("-------- git status --short: %s"), *GitStdOutput);
112+
UE_LOG(ProjectVersionFromGit, Warning, TEXT("-------- Git status --short: %s"), *GitStdOutput);
92113
}
93114

94115
GConfig->SetText(
95-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
116+
*SectionName,
96117
TEXT("ProjectVersion"),
97118
ProjectVersion,
98-
DefaultGameIni
119+
VersionFileIniPath
99120
);
100121

101122
GConfig->SetInt(
102-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
123+
*SectionName,
103124
TEXT("Major"),
104125
Major,
105-
DefaultGameIni
126+
VersionFileIniPath
106127
);
107128

108129
GConfig->SetInt(
109-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
130+
*SectionName,
110131
TEXT("Minor"),
111132
Minor,
112-
DefaultGameIni
133+
VersionFileIniPath
113134
);
114135

115136
GConfig->SetInt(
116-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
137+
*SectionName,
117138
TEXT("Patch"),
118139
Patch,
119-
DefaultGameIni
140+
VersionFileIniPath
120141
);
121142

122143
GConfig->SetText(
123-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
144+
*SectionName,
124145
TEXT("BranchName"),
125146
BranchName,
126-
DefaultGameIni
147+
VersionFileIniPath
127148
);
128149

129150
GConfig->SetText(
130-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
151+
*SectionName,
131152
TEXT("CommitHash"),
132153
CommitHash,
133-
DefaultGameIni
154+
VersionFileIniPath
134155
);
135156

136157
GConfig->SetText(
137-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
158+
*SectionName,
138159
TEXT("DateTimeBuild"),
139160
DateTimeBuild,
140-
DefaultGameIni
161+
VersionFileIniPath
141162
);
142163

143164
GConfig->SetText(
144-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
165+
*SectionName,
145166
TEXT("ProjectVersionFormatAll"),
146167
ProjectVersionFormatAll,
147-
DefaultGameIni
168+
VersionFileIniPath
148169
);
149170
}
150171
else
151172
{
152173
GConfig->GetText(
153-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
174+
*SectionName,
154175
TEXT("ProjectVersion"),
155176
ProjectVersion,
156-
GGameIni
177+
VersionFileIniPath
157178
);
158179

159180
GConfig->GetInt(
160-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
181+
*SectionName,
161182
TEXT("Major"),
162183
Major,
163-
GGameIni
184+
VersionFileIniPath
164185
);
165186

166187
GConfig->GetInt(
167-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
188+
*SectionName,
168189
TEXT("Minor"),
169190
Minor,
170-
GGameIni
191+
VersionFileIniPath
171192
);
172193

173194
GConfig->GetInt(
174-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
195+
*SectionName,
175196
TEXT("Patch"),
176197
Patch,
177-
GGameIni
198+
VersionFileIniPath
178199
);
179200

180201
GConfig->GetText(
181-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
202+
*SectionName,
182203
TEXT("BranchName"),
183204
BranchName,
184-
GGameIni
205+
VersionFileIniPath
185206
);
186207

187208
GConfig->GetText(
188-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
209+
*SectionName,
189210
TEXT("CommitHash"),
190211
CommitHash,
191-
GGameIni
212+
VersionFileIniPath
192213
);
193214

194215
GConfig->GetText(
195-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
216+
*SectionName,
196217
TEXT("DateTimeBuild"),
197218
DateTimeBuild,
198-
GGameIni
219+
VersionFileIniPath
199220
);
200221

201222
GConfig->GetText(
202-
TEXT("/Script/EngineSettings.GeneralProjectSettings"),
223+
*SectionName,
203224
TEXT("ProjectVersionFormatAll"),
204225
ProjectVersionFormatAll,
205-
GGameIni
226+
VersionFileIniPath
206227
);
207228
}
208229

@@ -215,7 +236,7 @@ FText UProjectVersionFromGitBPLibrary::GetProjectVersion()
215236
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- DateTimeBuild: %s"), *DateTimeBuild.ToString());
216237
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- ProjectVersionFormatAll: %s"), *ProjectVersionFormatAll.ToString());
217238
//UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- GGameIni: %s"), *GGameIni);
218-
//UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- DefaultGameIni: %s"), *DefaultGameIni);
239+
//UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- VersionFileIniPath: %s"), *VersionFileIniPath);
219240

220241
return ProjectVersion;
221242
}
@@ -231,14 +252,16 @@ FText UProjectVersionFromGitBPLibrary::GetProjectVersionBranchName()
231252

232253
if (GEngine->IsEditor())
233254
{
234-
FPlatformProcess::ExecProcess(TEXT("git"), TEXT("symbolic-ref --short HEAD"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
255+
ExecProcess(TEXT("git"), TEXT("symbolic-ref --short HEAD"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
256+
OutStdOut.TrimStartAndEndInline();
257+
235258
if (OutStdOut.IsEmpty())
236259
{
237260
BranchName = FText::FromString(TEXT("unknown"));
238261
}
239262
else
240263
{
241-
BranchName = FText::FromString(OutStdOut.TrimStartAndEnd());
264+
BranchName = FText::FromString(OutStdOut);
242265
}
243266
}
244267
}
@@ -255,17 +278,21 @@ FText UProjectVersionFromGitBPLibrary::GetProjectVersionCommitHash()
255278
int32 OutReturnCode;
256279
static const FString OptionalWorkingDirectory = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir());
257280

258-
FPlatformProcess::ExecProcess(TEXT("git"), TEXT("status --short"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
281+
ExecProcess(TEXT("git"), TEXT("status --short"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
282+
OutStdOut.TrimStartAndEndInline();
259283
GitStdOutput = OutStdOut;
284+
OutStdOut.Reset();
260285

261-
if (OutStdOut.IsEmpty())
286+
ExecProcess(TEXT("git"), TEXT("describe --always --abbrev=8"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
287+
OutStdOut.TrimStartAndEndInline();
288+
289+
if (GitStdOutput.IsEmpty())
262290
{
263-
FPlatformProcess::ExecProcess(TEXT("git"), TEXT("describe --always --abbrev=8"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
264-
CommitHash = FText::FromString(OutStdOut.TrimStartAndEnd());
291+
CommitHash = FText::FromString(OutStdOut);
265292
}
266293
else
267294
{
268-
CommitHash = FText::FromString(TEXT("unknown"));
295+
CommitHash = FText::FromString(FString(TEXT("unclean-")) + OutStdOut);
269296
}
270297
}
271298

Source/ProjectVersionFromGit/Public/ProjectVersionFromGitBPLibrary.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,15 @@
22

33
#pragma once
44

5+
#include "Engine.h"
56
#include "Misc/DateTime.h"
67
#include "Misc/Paths.h"
8+
#include "Internationalization/Regex.h"
79
#include "GenericPlatform/GenericPlatformProcess.h"
810
#include "Misc/DefaultValueHelper.h"
911
#include "Misc/ConfigCacheIni.h"
12+
#include "Misc/EngineVersion.h"
13+
#include "Runtime/Launch/Resources/Version.h"
1014

1115
#include "Kismet/BlueprintFunctionLibrary.h"
1216
#include "ProjectVersionFromGitBPLibrary.generated.h"
@@ -40,6 +44,8 @@ class UProjectVersionFromGitBPLibrary : public UBlueprintFunctionLibrary
4044
UFUNCTION(BlueprintPure, Category = "ProjectVersionFromGit")
4145
static FText GetProjectVersionFormatAll();
4246

47+
static bool ExecProcess(const TCHAR* URL, const TCHAR* Params, int32* OutReturnCode, FString* OutStdOut, FString* OutStdErr, const TCHAR* OptionalWorkingDirectory);
48+
4349
private:
4450
static FText ProjectVersion;
4551
static FText ProjectVersionFormatAll;
@@ -50,5 +56,8 @@ class UProjectVersionFromGitBPLibrary : public UBlueprintFunctionLibrary
5056
static int32 Minor;
5157
static int32 Patch;
5258

59+
static FString SectionName;
60+
static FString VersionFileIni;
61+
5362
static FString GitStdOutput;
5463
};

0 commit comments

Comments
 (0)