@@ -13,6 +13,9 @@ int32 UProjectVersionFromGitBPLibrary::Major = 0;
1313int32 UProjectVersionFromGitBPLibrary::Minor = 0 ;
1414int32 UProjectVersionFromGitBPLibrary::Patch = 0 ;
1515
16+ FString UProjectVersionFromGitBPLibrary::SectionName = FString(TEXT(" VersionInfo" ));
17+ FString UProjectVersionFromGitBPLibrary::VersionFileIni = FString(TEXT(" Version.ini" ));
18+
1619FString UProjectVersionFromGitBPLibrary::GitStdOutput = FString(TEXT(" " ));
1720
1821DEFINE_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+
2644FText 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
0 commit comments