Skip to content

Commit 7afe414

Browse files
committed
Merge branch 'dev'
2 parents 2a71835 + 66205af commit 7afe414

12 files changed

+228
-53
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ Binaries
44
Intermediate
55
Saved
66
Build
7+
.DS_Store

Config/FilterPlugin.ini

Lines changed: 0 additions & 8 deletions
This file was deleted.

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2020 Andrew Bindraw
3+
Copyright (c) 2025 Andrew Bindraw
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

ProjectVersionFromGit.uplugin

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"FileVersion": 3,
3-
"Version": 5,
4-
"VersionName": "2.2.3",
3+
"Version": 6,
4+
"VersionName": "2.5.0",
55
"FriendlyName": "ProjectVersionFromGit",
66
"Description": "Set version for project from git tag format MAJOR.MINOR.PATCH also set branch name, commit hash and datetime build",
77
"Category": "Source Control",
@@ -14,18 +14,17 @@
1414
"IsBetaVersion": false,
1515
"IsExperimentalVersion": false,
1616
"Installed": false,
17-
"SupportedTargetPlatforms": [
18-
"Win64",
19-
"Android"
20-
],
2117
"Modules": [
2218
{
2319
"Name": "ProjectVersionFromGit",
2420
"Type": "Runtime",
2521
"LoadingPhase": "Default",
26-
"WhitelistPlatforms": [
22+
"PlatformAllowList": [
2723
"Win64",
28-
"Android"
24+
"Android",
25+
"Mac",
26+
"IOS",
27+
"Linux"
2928
]
3029
}
3130
]

README.md

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# ProjectVersionFromGit
2-
Plugin for UE4/5 project.
3-
Set version for project from git tag format MAJOR.MINOR.PATCH also set branch name, commit hash and datetime build.
2+
This plugin set version for project from git tag format MAJOR.MINOR.PATCH also set branch name, commit hash and utc-datetime build.
43

54
**C++/Blueprints functions:**
65
- GetProjectVersion()
@@ -12,8 +11,22 @@ Set version for project from git tag format MAJOR.MINOR.PATCH also set branch na
1211
- GetProjectVersionDateTimeBuild()
1312
- GetProjectVersionFormatAll()
1413

15-
# Install
14+
# Install into Project
1615
You can install manually by extracting archive (ProjectVersionFromGit-X.X.X-...zip) from
1716
[Releases](https://github.com/mrbindraw/ProjectVersionFromGit/releases) to your project plugins folder
1817
or build example project (ExamplePrj-UEX.X-ProjectVersionFromGit-X.X.X.zip).
18+
19+
# Install into Unreal Engine
1920
You can install it from the marketplace [ProjectVersionFromGit](https://www.fab.com/listings/044c4f9a-eedc-487b-a973-c1c940470373)
21+
22+
Manual:
23+
1. Download and extracting archive (ProjectVersionFromGit-X.X.X-...zip) from [Releases](https://github.com/mrbindraw/ProjectVersionFromGit/releases) to any disk path, for example: `D:\Plugins`
24+
2. Than open any terminal (cmd, powershell) in `D:\Plugins` folder
25+
3. Launch `RunUAT.bat` in the terminal, for example:
26+
```
27+
D:\EpicGames\UE_5.4\Engine\Build\BatchFiles\RunUAT.bat BuildPlugin -Plugin=D:\Plugins\ProjectVersionFromGit\ProjectVersionFromGit.uplugin -Package=D:\Plugins\UE_5.4\ProjectVersionFromGit -Rocket
28+
```
29+
4. If you see the message `BUILD SUCCESSFUL` in the terminal after the build is complete,
30+
copy the `ProjectVersionFromGit` folder from `D:\Plugins\UE_5.4` to `D:\EpicGames\UE_5.4\Engine\Plugins\Marketplace`
31+
> [!IMPORTANT]
32+
> **The engine path and folder names may differ on your system.**
Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2024 Andrew Bindraw. All Rights Reserved.
1+
// Copyright 2025 Andrew Bindraw. All Rights Reserved.
22

33
#include "ProjectVersionFromGit.h"
44

@@ -7,16 +7,36 @@
77
void FProjectVersionFromGitModule::StartupModule()
88
{
99
// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
10-
10+
11+
#if WITH_EDITOR
12+
ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings");
13+
14+
if (SettingsModule != nullptr)
15+
{
16+
SettingsModule->RegisterSettings("Project", "Plugins", "ProjectVersionGit",
17+
LOCTEXT("ProjectVersionGitSettingsName", "Project Version Git"),
18+
LOCTEXT("ProjectVersionGitSettingsDescription", "Configure the ProjectVersionFromGit plugin"),
19+
GetMutableDefault<UProjectVersionGitSettings>()
20+
);
21+
}
22+
#endif //WITH_EDITOR
1123
}
1224

1325
void FProjectVersionFromGitModule::ShutdownModule()
1426
{
1527
// This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
1628
// we call this function before unloading the module.
29+
30+
#if WITH_EDITOR
31+
ISettingsModule* SettingsModule = FModuleManager::GetModulePtr<ISettingsModule>("Settings");
32+
if (SettingsModule != nullptr)
33+
{
34+
SettingsModule->UnregisterSettings("Project", "Plugins", "ProjectVersionGit");
35+
}
36+
#endif //WITH_EDITOR
1737

1838
}
1939

2040
#undef LOCTEXT_NAMESPACE
2141

22-
IMPLEMENT_MODULE(FProjectVersionFromGitModule, ProjectVersionFromGit)
42+
IMPLEMENT_MODULE(FProjectVersionFromGitModule, ProjectVersionFromGit)

Source/ProjectVersionFromGit/Private/ProjectVersionFromGitBPLibrary.cpp

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
// Copyright 2024 Andrew Bindraw. All Rights Reserved.
1+
// Copyright 2025 Andrew Bindraw. All Rights Reserved.
22

33
#include "ProjectVersionFromGitBPLibrary.h"
4-
#include "ProjectVersionFromGit.h"
54

65
FText UProjectVersionFromGitBPLibrary::ProjectVersion = FText::GetEmpty();
76
FText UProjectVersionFromGitBPLibrary::ProjectVersionFormatAll = FText::GetEmpty();
@@ -18,12 +17,29 @@ FString UProjectVersionFromGitBPLibrary::VersionFileIni = FString(TEXT("Version.
1817

1918
FString UProjectVersionFromGitBPLibrary::GitStdOutput = FString(TEXT(""));
2019

21-
DEFINE_LOG_CATEGORY(ProjectVersionFromGit)
20+
DEFINE_LOG_CATEGORY(LogProjectVersionFromGitBPLibrary)
2221

2322
UProjectVersionFromGitBPLibrary::UProjectVersionFromGitBPLibrary(const FObjectInitializer& ObjectInitializer)
2423
: Super(ObjectInitializer)
2524
{
26-
GetProjectVersionInfo(FParseVersionDelegate());
25+
26+
}
27+
28+
void UProjectVersionFromGitBPLibrary::PostInitProperties()
29+
{
30+
Super::PostInitProperties();
31+
32+
UProjectVersionGitSettings::OnPostInitPropertiesCompleted.AddLambda([]()
33+
{
34+
GetProjectVersionInfo(FParseVersionDelegate());
35+
});
36+
37+
#if WITH_EDITOR
38+
UProjectVersionGitSettings::OnPostEditChangePropertyCompleted.AddLambda([]()
39+
{
40+
GetProjectVersionInfo(FParseVersionDelegate());
41+
});
42+
#endif
2743
}
2844

2945
bool UProjectVersionFromGitBPLibrary::ExecProcess(const TCHAR* URL, const TCHAR* Params, int32* OutReturnCode, FString* OutStdOut, FString* OutStdErr, const TCHAR* OptionalWorkingDirectory)
@@ -49,20 +65,24 @@ void UProjectVersionFromGitBPLibrary::GetProjectVersionInfo(FParseVersionDelegat
4965

5066
if (GEngine->IsEditor())
5167
{
68+
const auto Cfg = GetMutableDefault<UProjectVersionGitSettings>();
69+
5270
FString OutStdOut;
5371
FString OutStdErr;
5472
int32 OutReturnCode;
5573
static const FString OptionalWorkingDirectory = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir());
5674

5775
FString TagNameArg;
5876

59-
ExecProcess(TEXT("git"), TEXT("rev-list --tags --max-count=1"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
77+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- Cfg->GitBinPath: %s"), *Cfg->GitBinPath);
78+
79+
ExecProcess(*Cfg->GitBinPath, TEXT("rev-list --tags --max-count=1"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
6080
OutStdOut.TrimStartAndEndInline();
6181

6282
TagNameArg = FString(TEXT("describe --tags ")) + OutStdOut;
63-
ExecProcess(TEXT("git"), *TagNameArg, &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
83+
ExecProcess(*Cfg->GitBinPath, *TagNameArg, &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
6484
OutStdOut.TrimStartAndEndInline();
65-
//UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- Git tag: %s"), *OutStdOut);
85+
//UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- Git tag: %s"), *OutStdOut);
6686

6787
const FRegexPattern myPattern(TEXT("([0-9]\\.[0-9]\\.[0-9])+"));
6888
FRegexMatcher myMatcher(myPattern, OutStdOut);
@@ -71,10 +91,10 @@ void UProjectVersionFromGitBPLibrary::GetProjectVersionInfo(FParseVersionDelegat
7191
{
7292
int32 beginPos = myMatcher.GetMatchBeginning();
7393
int32 endPos = myMatcher.GetMatchEnding();
74-
//UE_LOG(ProjectVersionFromGit, Log, TEXT("Regex git tag pos: %i %i"), beginPos, endPos);
94+
//UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("Regex git tag pos: %i %i"), beginPos, endPos);
7595
OutStdOut = OutStdOut.Mid(beginPos, endPos - beginPos);
7696
}
77-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- Git tag: %s"), *OutStdOut);
97+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- Git tag: %s"), *OutStdOut);
7898

7999
if (OutStdOut.IsEmpty())
80100
{
@@ -105,7 +125,7 @@ void UProjectVersionFromGitBPLibrary::GetProjectVersionInfo(FParseVersionDelegat
105125

106126

107127
// Get BranchName
108-
ExecProcess(TEXT("git"), TEXT("symbolic-ref --short HEAD"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
128+
ExecProcess(*Cfg->GitBinPath, TEXT("symbolic-ref --short HEAD"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
109129
OutStdOut.TrimStartAndEndInline();
110130
if (OutStdOut.IsEmpty())
111131
{
@@ -118,12 +138,12 @@ void UProjectVersionFromGitBPLibrary::GetProjectVersionInfo(FParseVersionDelegat
118138
OutStdOut = FString(TEXT(""));
119139

120140
// Get CommitHash
121-
ExecProcess(TEXT("git"), TEXT("status --short"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
141+
ExecProcess(*Cfg->GitBinPath, TEXT("status --short"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
122142
OutStdOut.TrimStartAndEndInline();
123143
GitStdOutput = OutStdOut;
124144
OutStdOut.Reset();
125145

126-
ExecProcess(TEXT("git"), TEXT("describe --always --abbrev=8"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
146+
ExecProcess(*Cfg->GitBinPath, TEXT("describe --always --abbrev=8"), &OutReturnCode, &OutStdOut, &OutStdErr, *OptionalWorkingDirectory);
127147
OutStdOut.TrimStartAndEndInline();
128148

129149
if (GitStdOutput.IsEmpty())
@@ -143,7 +163,7 @@ void UProjectVersionFromGitBPLibrary::GetProjectVersionInfo(FParseVersionDelegat
143163

144164
if (!GitStdOutput.IsEmpty())
145165
{
146-
UE_LOG(ProjectVersionFromGit, Warning, TEXT("-------- Git status --short: %s"), *GitStdOutput);
166+
UE_LOG(LogProjectVersionFromGitBPLibrary, Warning, TEXT("-------- Git status --short: %s"), *GitStdOutput);
147167
}
148168

149169
FConfigFile ConfigFile;
@@ -266,18 +286,16 @@ void UProjectVersionFromGitBPLibrary::GetProjectVersionInfo(FParseVersionDelegat
266286
);
267287
}
268288

269-
#if PLATFORM_WINDOWS
270-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- ProjectVersion: %s"), *ProjectVersion.ToString());
271-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- Major: %d"), Major);
272-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- Minor: %d"), Minor);
273-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- Patch: %d"), Patch);
274-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- BranchName: %s"), *BranchName.ToString());
275-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- CommitHash: %s"), *CommitHash.ToString());
276-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- DateTimeBuild: %s"), *DateTimeBuild.ToString());
277-
UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- ProjectVersionFormatAll: %s"), *ProjectVersionFormatAll.ToString());
278-
//UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- GGameIni: %s"), *GGameIni);
279-
//UE_LOG(ProjectVersionFromGit, Log, TEXT("-------- VersionFileIniPath: %s"), *VersionFileIniPath);
280-
#endif
289+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- ProjectVersion: %s"), *ProjectVersion.ToString());
290+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- Major: %d"), Major);
291+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- Minor: %d"), Minor);
292+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- Patch: %d"), Patch);
293+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- BranchName: %s"), *BranchName.ToString());
294+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- CommitHash: %s"), *CommitHash.ToString());
295+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- DateTimeBuild: %s"), *DateTimeBuild.ToString());
296+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- ProjectVersionFormatAll: %s"), *ProjectVersionFormatAll.ToString());
297+
UE_LOG(LogProjectVersionFromGitBPLibrary, Log, TEXT("-------- VersionFileIniPath: %s"), *VersionFileIniPath);
298+
281299
AsyncTask(ENamedThreads::GameThread, [OnCompleted]()
282300
{
283301
OnCompleted.ExecuteIfBound();
@@ -323,4 +341,4 @@ FText UProjectVersionFromGitBPLibrary::GetProjectVersionDateTimeBuild()
323341
FText UProjectVersionFromGitBPLibrary::GetProjectVersionFormatAll()
324342
{
325343
return ProjectVersionFormatAll;
326-
}
344+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Copyright 2025 Andrew Bindraw. All Rights Reserved.
2+
3+
#include "ProjectVersionGitSettings.h"
4+
5+
DEFINE_LOG_CATEGORY(LogProjectVersionGitSettings)
6+
7+
FPostInitPropertiesDelegate UProjectVersionGitSettings::OnPostInitPropertiesCompleted;
8+
9+
#if WITH_EDITOR
10+
FPostEditChangePropertyDelegate UProjectVersionGitSettings::OnPostEditChangePropertyCompleted;
11+
#endif
12+
13+
UProjectVersionGitSettings::UProjectVersionGitSettings(const FObjectInitializer& ObjectInitializer):
14+
Super(ObjectInitializer)
15+
{
16+
/*
17+
* Check more info about git path:
18+
* Engine/Plugins/Developer/GitSourceControl/Source/GitSourceControl/Private/GitSourceControlUtils.cpp#L170
19+
* FString FindGitBinaryPath()
20+
* Open terminal
21+
* $ whereis git
22+
* $ which -a git
23+
*/
24+
25+
#if PLATFORM_WINDOWS
26+
GitBinPath = "git.exe";
27+
#else
28+
GitBinPath = "/usr/bin/git";
29+
#endif
30+
}
31+
32+
void UProjectVersionGitSettings::PostInitProperties()
33+
{
34+
Super::PostInitProperties();
35+
36+
#if WITH_EDITOR
37+
static const FString ConfigIniName = TEXT("DefaultProjectVersionGitSettings.ini");
38+
static const FString ConfigIniPath = FConfigCacheIni::NormalizeConfigIniPath(FString::Printf(TEXT("%s%s"), *FPaths::SourceConfigDir(), *ConfigIniName));
39+
static const FString SectionName = TEXT("/Script/ProjectVersionFromGit.ProjectVersionGitSettings");
40+
41+
if (!FPaths::FileExists(ConfigIniPath))
42+
{
43+
FConfigFile ConfigFile;
44+
GConfig->SetFile(ConfigIniPath, &ConfigFile);
45+
46+
GConfig->SetString(
47+
*SectionName,
48+
TEXT("GitBinPath"),
49+
*GitBinPath,
50+
ConfigIniPath
51+
);
52+
53+
GConfig->Flush(false, ConfigIniPath);
54+
55+
UE_LOG(LogProjectVersionGitSettings, Log, TEXT("---> Created Config: %s, Path: %s"), *ConfigIniName, *ConfigIniPath);
56+
}
57+
else
58+
{
59+
GConfig->GetString(
60+
*SectionName,
61+
TEXT("GitBinPath"),
62+
GitBinPath,
63+
ConfigIniPath
64+
);
65+
}
66+
#endif // WITH_EDITOR
67+
68+
UE_LOG(LogProjectVersionGitSettings, Log, TEXT("---> PostInitProperties, GitBinPath: %s"), *GitBinPath);
69+
70+
OnPostInitPropertiesCompleted.Broadcast();
71+
}
72+
73+
#if WITH_EDITOR
74+
void UProjectVersionGitSettings::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
75+
{
76+
Super::PostEditChangeProperty(PropertyChangedEvent);
77+
78+
UE_LOG(LogProjectVersionGitSettings, Log, TEXT("---> PostEditChangeProperty, GitBinPath: %s"), *GitBinPath);
79+
80+
OnPostEditChangePropertyCompleted.Broadcast();
81+
}
82+
#endif // WITH_EDITOR

Source/ProjectVersionFromGit/ProjectVersionFromGit.Build.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright 2024 Andrew Bindraw. All Rights Reserved.
1+
// Copyright 2025 Andrew Bindraw. All Rights Reserved.
22

33
using UnrealBuildTool;
44

@@ -49,5 +49,11 @@ public ProjectVersionFromGit(ReadOnlyTargetRules Target) : base(Target)
4949
// ... add any modules that your module loads dynamically here ...
5050
}
5151
);
52+
53+
if (Target.Type == TargetType.Editor)
54+
{
55+
DynamicallyLoadedModuleNames.Add("Settings");
56+
PrivateIncludePathModuleNames.Add("Settings");
57+
}
5258
}
5359
}

0 commit comments

Comments
 (0)