diff --git a/Source/GitSourceControl/Private/GitSourceControlOperations.cpp b/Source/GitSourceControl/Private/GitSourceControlOperations.cpp index cb2becb1..b1122e11 100644 --- a/Source/GitSourceControl/Private/GitSourceControlOperations.cpp +++ b/Source/GitSourceControl/Private/GitSourceControlOperations.cpp @@ -12,6 +12,8 @@ #include "GitSourceControlModule.h" #include "GitSourceControlCommand.h" #include "GitSourceControlUtils.h" +#include "IPlatformFileProfilerWrapper.h" +#include "PlatformFilemanager.h" #define LOCTEXT_NAMESPACE "GitSourceControl" @@ -184,6 +186,11 @@ bool FGitCheckInWorker::Execute(FGitSourceControlCommand& InCommand) const FString Message = (InCommand.InfoMessages.Num() > 0) ? InCommand.InfoMessages[0] : TEXT(""); UE_LOG(LogSourceControl, Log, TEXT("commit successful: %s"), *Message); + for (const FString& File : InCommand.Files) + { + FPlatformFileManager::Get().GetPlatformFile().SetReadOnly(*File, true); + } + // git-lfs: push and unlock files if(InCommand.bUsingGitLfsLocking && InCommand.bCommandSuccessful) { @@ -193,6 +200,7 @@ bool FGitCheckInWorker::Execute(FGitSourceControlCommand& InCommand) // unlock files: execute the LFS command on relative filenames // (unlock only locked files, that is, not Added files) const TArray LockedFiles = GetLockedFiles(InCommand.Files); + if(LockedFiles.Num() > 0) { const TArray RelativeFiles = GitSourceControlUtils::RelativeFilenames(LockedFiles, InCommand.PathToRepositoryRoot); @@ -200,7 +208,7 @@ bool FGitCheckInWorker::Execute(FGitSourceControlCommand& InCommand) { TArray OneFile; OneFile.Add(RelativeFile); - GitSourceControlUtils::RunCommand(TEXT("lfs unlock"), InCommand.PathToGitBinary, InCommand.PathToRepositoryRoot, TArray(), OneFile, InCommand.InfoMessages, InCommand.ErrorMessages); + GitSourceControlUtils::RunCommand(TEXT("lfs unlock"), InCommand.PathToGitBinary, InCommand.PathToRepositoryRoot, TArray(), OneFile, InCommand.InfoMessages, InCommand.ErrorMessages); } } } diff --git a/Source/GitSourceControl/Private/GitSourceControlUtils.cpp b/Source/GitSourceControl/Private/GitSourceControlUtils.cpp index 77b856c5..50f2a8dd 100644 --- a/Source/GitSourceControl/Private/GitSourceControlUtils.cpp +++ b/Source/GitSourceControl/Private/GitSourceControlUtils.cpp @@ -1015,7 +1015,11 @@ bool RunUpdateStatus(const FString& InPathToGitBinary, const FString& InReposito LockedFiles.Add(MoveTemp(LockFile.LocalFilename), MoveTemp(LockFile.LockUser)); } } + FGitSourceControlModule& GitSourceControl = FModuleManager::GetModuleChecked("GitSourceControl"); + + + const FString LfsUserName = GitSourceControl.AccessSettings().GetLfsUserName(); // Git status does not show any "untracked files" when called with files from different subdirectories! (issue #3) // 1) So here we group files by path (ie. by subdirectory) TMap> GroupOfFiles; @@ -1033,6 +1037,23 @@ bool RunUpdateStatus(const FString& InPathToGitBinary, const FString& InReposito NewGroup.Add(File); GroupOfFiles.Add(Path, NewGroup); } + + if (LockedFiles.Contains(File)) + { + TSharedRef State= GitSourceControl.GetProvider().GetStateInternal(File, true); + + State->LockUser = LockedFiles[File]; + if (LfsUserName == State->LockUser) + { + State->LockState = ELockState::Locked; + } + else + { + State->LockState = ELockState::LockedOther; + } + // TODO LFS Debug log + //UE_LOG(LogSourceControl, Log, TEXT("Status(%s) Locked by '%s'"), *File, *FileState.LockUser); + } } // Get the current branch name, since we need origin of current branch