Commit Graph

148 Commits

Author SHA1 Message Date
luc eygasier
fdc7c5a31a Fixes shelved files from another branch preventing FPerforceGetPendingChangelistsWorker to complete, hence Changelist Window to refresh.
#rb Sebastien.Lussier
#jira UE-120722

#changelist validated

#ROBOMERGE-AUTHOR: luc.eygasier
#ROBOMERGE-SOURCE: CL 18432022 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v897-18405271)
#ROBOMERGE[STARSHIP]: UE5-Release-Engine-Staging Release-5.0

[CL 18432070 by luc eygasier in ue5-release-engine-test branch]
2021-12-10 13:22:37 -05:00
paul chipchase
da78f85621 Allow the type to be customized when creating a workspace.
#rb PJ.Kack
#rnx
#preflight 61af08530e3f453820536d83

- Add a new type enum to FCreateWorkspace that can be used to decide on the type of client to create.
- Currently supporting types that map closely with perforce.

#ROBOMERGE-AUTHOR: paul.chipchase
#ROBOMERGE-SOURCE: CL 18392669 in //UE5/Release-5.0/... via CL 18392676
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v896-18170469)

[CL 18392677 by paul chipchase in ue5-release-engine-test branch]
2021-12-07 02:45:37 -05:00
luc eygasier
20ff9372da Fixes hash based UpdateStatus unable to detect unchanged text files because of difference in P4 server line ending.
Replaced by forcing the diff command (hence avoiding errors for files not opened in workspace)

#rb Sebastien.Lussier

#changelist validated

#ROBOMERGE-AUTHOR: luc.eygasier
#ROBOMERGE-SOURCE: CL 18058385 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v885-17909292)
#ROBOMERGE[STARSHIP]: UE5-Release-Engine-Staging Release-5.0

[CL 18058440 by luc eygasier in ue5-release-engine-test branch]
2021-11-04 11:59:09 -04:00
luc eygasier
d96ea0b872 Fix abusive external dependencies validation error:
* Fixes Source Control cache corruption when submitting a changelist
* Updates external dependencies states when validating in case cached states are not valid anymore

#jira UE-132868
#rb Sebastien.Lussier

#changelist validated

#ROBOMERGE-AUTHOR: luc.eygasier
#ROBOMERGE-SOURCE: CL 18033926 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v885-17909292)
#ROBOMERGE[STARSHIP]: UE5-Release-Engine-Staging Release-5.0

[CL 18033936 by luc eygasier in ue5-release-engine-test branch]
2021-11-03 10:43:41 -04:00
paul chipchase
56dfafbb35 Only log why a potential workspace was rejected for consideration to when verbose logging for 'LogSourceControl is enabled
#rb Sebastien.Lussier
#rnx
#preflight 61432653b5a4fa00015cd3a7

- Due to mirage, the build machines can now end up initializing the perforce source control module and have access to many hundreds of potential workspaces. Logging each rejected workspace not only fills the log with spam, but can take several seconds (7 or more in tests) to complete, which is a waste of time.
- Changed the log item to verbose, rather than remove it so that people trying to debug a problem will still have access to the info if they need it.
- Technically for Mirage the build machines don't need a workspace as they will only ever be using p4 print, but our current architecture does not really allow for this (ideally Mirage would be creating/requesting it's own instance of the PerforceSourceControlProvider which we could make sure did not attempt to find a workspace) but changing the logging verbosity will serve for now.

#ROBOMERGE-AUTHOR: paul.chipchase
#ROBOMERGE-SOURCE: CL 17548648 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v870-17433530)

[CL 17548659 by paul chipchase in ue5-release-engine-test branch]
2021-09-17 03:11:13 -04:00
luc eygasier
10d4800ede Rework Source Control Changelist Window?s Asset beautification:
* Adds Source Control Asset Data cache. Preventing Source Control Changelist Window to rebuild AssetData from scratch when UI refresh takes place
* Modifies Source Control beautification to async process, preventing crowded changelists to block the workflow. The filenames are now beautified when available.
* Parallelize AssetData information retrieval from SourceControl
* Updates message displayed when refreshing window's items

#rb Sebastien.Lussier, JeanFrancois.Dube
#jira UETOOL-3522

#changelist validated

#ROBOMERGE-SOURCE: CL 17375288 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v865-17346139)

[CL 17375337 by luc eygasier in ue5-release-engine-test branch]
2021-08-31 15:14:29 -04:00
paul chipchase
dbe106b375 CIS: Add file missing from CL 17350788
#rb Sebastien.Lussier
#rnx
#preflight 611e457e2c1f1c0001292a29

#ROBOMERGE-SOURCE: CL 17351233 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v865-17346139)

[CL 17351247 by paul chipchase in ue5-release-engine-test branch]
2021-08-30 09:04:52 -04:00
paul chipchase
16cd15b8ed The ability to create, delete and switch workspaces via the SourceControl API. Currently this is only implemented for the perforce source control plugin.
#rb Sebastien.Lussier
#rnx
#preflight 611e457e2c1f1c0001292a29

### ISourceControlProvider / PerforceSourceControlProvider
- Add new method ::SwitchWorkspace allowing the caller to switch the current workspace.
    - Currently only implemented for perforce.
    - Calling this will cause the provider to close and then re-open it's connection and so will invalidate any existing established connection or cached states. Due to this the method will fail if there are outstanding commands being processed.
    - It is intended that this is only used for short periods of time, in order to submit or access files from locations that the user chosen workspace might be able to access.
    - The new workspace will not be saved to the source control settings. Although this could occur later if done.

### SourceControlOperations
- Add new operation **FCreateWorkspace**.
    - Currently only implemented for perforce.
    - The name and the root of the workspace (filepath on the client machine) must be provided in the constructor.
    - Additional mappings can be provided by calling **AddNativeClientViewMapping** which expects the mapping to be in the native format of the target source control system. At some point in the future we may add a more generic, target agnostic, format.
- Add new operation **FDeleteWorkspace**.
    - Currently only implemented for perforce.
   - Deletes the workspace of the given name although the workspace must be in a state where it can be deleted (no files open for add/edit/delete etc) or the operation will fail.

### PerforceConnection
- Add a new method ::CreateWorkspace for creating workspaces
- Add a new extended client 'FP4CommandWithStdInputClientUser'
    - We should really extend FP4ClientUser to be able to take overridden stdinput instead  but that would mean adding yet another input parameter. I'd rather keep the code separate for now and then merge them together in a future refactor where the many input parameters of ::RunCommand is replaces with a struct with TOptional members.
- Added a ::GetUser method, which returns the user of the current connection without the caller needing to know if the connection is in unicode format or not.

#ROBOMERGE-SOURCE: CL 17350788 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v865-17346139)

[CL 17350796 by paul chipchase in ue5-release-engine-test branch]
2021-08-30 08:07:59 -04:00
luc eygasier
023de629a0 Adds "LastSynced" flag to Perforce Sync operation, allowing to force sync (ie revert) to the last synced version of an asset.
Modifies Revert operation on Uncontrolled assets to force sync to last synced version instead of head revision.

#rb Sebastien.Lussier

#changelist validated

#ROBOMERGE-SOURCE: CL 16943684 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v838-16927207)

[CL 16943688 by luc eygasier in ue5-release-engine-test branch]
2021-07-23 20:22:17 -04:00
paul chipchase
5c51f3f814 Improve error handling and logging in the file and jupiter Mirage backends.
#rb Per.Larsson
#rnx
#preflight 60f9212d1f926d0001d41223

* VirtualizationJupiterBackend
- When pulling a payload we should assume that a 400 error response when trying to GET the payload header means that the payload is not in Jupiter.
-- Not being able to find the payload should not log an error, instead we can make a note of it in the verbose log (similar to the file system backend)

* VirtualizationFileBackend
- Moved the formatting of system errors to it's own function.
- Log the system error when failing to write a payload during a push as well as a pull.
- We now check that the FileArchive wrote correctly to disk and delete the output file and fail the push if it did not.
-- A future piece of work will change the logic to write to a tmp file at the root of the file store and them move the file to the final location to cut down on the potential of leaving corrupted files around (similar to the process when we save packages)

* Perforce
- The FDownloadFile command now takes an optional parameter EVerbosity that can allow the caller to choose the level of logging output that the command will generate.
- The source control backend for Mirage now opts to supress the logging of the full perforce command when we are pulling payloads as we can generate many hundreds or thousands of requests and the info is not useful to users.
-- We continue to log the command when validating the depot as this is the most likely command to fail so having the info in the log may prove useful.

#ROBOMERGE-SOURCE: CL 16921815 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v836-16769935)

[CL 16921818 by paul chipchase in ue5-release-engine-test branch]
2021-07-22 05:45:28 -04:00
rtjonnyr
1b1a82bb50 Unshelved from pending changelist '16239478':
PR #7989: Fixed issue where file history was truncated for moved files (Contributed by rtjonnyr)

#jira UE-115245
#rb Sebastien.Lussier
#github
#preflight 60d23e9aa8190400014cad5d

#ROBOMERGE-SOURCE: CL 16749525 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v835-16672529)

[CL 16749537 by rtjonnyr in ue5-release-engine-test branch]
2021-06-22 17:25:10 -04:00
luc eygasier
87c6e2529b Update contextual menu in Changelist window to support Uncontrolled Changelists
* Update MarkForAdd operation to operate on a specified changelist
* Adds Force option in sync operation to be able to revert uncontrolled files
* Adds the resulting new changelist to FNewChangelist operation
* Adds support for "mark for add" files when moving from UCL to C
* Adds support for reverting Uncontrolled Changelist, Uncontrolled Changelist files, or mixes of controlled/uncontrolled files
* Adds support of "Move files to..." contextual action for Uncontrolled files and to Uncontrolled Changelists

#rb Sebastien.Lussier

#changelist validated

#ROBOMERGE-SOURCE: CL 16662633 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v834-16658389)

[CL 16662640 by luc eygasier in ue5-release-engine-test branch]
2021-06-14 15:25:40 -04:00
luc eygasier
8a36dd39f0 Adds automatic discovery of potentially modified files out of SourceControl.
* Adds reconcile contextual actions to manually trigger the verification process
* Loads UncontrolledChangelists module along UnrealEd to be able to hook loaded/saved files sooner
* Adds CPU Trace for FPerforceUpdateStatusWorker::Execute and ParseUpdateStatusResults
* Changes FPerforceCheckOutWorker to update Changelist State if checked out directly to a CL
* Changes FPerforceRevertWorker to update Changelist State after revert

#rb Sebastien.Lussier

#changelist validated

[CL 16477108 by luc eygasier in ue5-main branch]
2021-05-26 18:15:46 -04:00
paul chipchase
491d217cd8 Remove the defunct define 'USE_P4_API' from the PerforceSourceControl module.
#rb Sebastien.Lussier
#rnx

* Reasoning
- It was originally added as a way to tempoarily disble the perforce C/C++ api because we did not have access to VS2015 libs at the time.
- The code no longer compiles when USE_P4_API was set to 0 so would need to be fixed up to make it useful.
- We have no plans to disable the api making the define a bit pointless.

* Changes
- Now we can be sure that FP4ClientUser is derived from the real version of ClientUser we can mark the overriden methhods with virtiual and override keywords to make it more obvious.
- Removed some pointless comments, like // Constructor.
- Added comments to overriden methods that were missing them.
- Changed some // comments to /** */ to keep consistency in the code.
- Replaced occurences of NULL with nullptr.
#preflight 60ae032bbb30900001e85029

[CL 16465723 by paul chipchase in ue5-main branch]
2021-05-26 05:07:41 -04:00
paul chipchase
363a34db32 Allow the FSharedBuffer to take direct ownership of the byte array collected during perforce commands.
- This prevents the additional allocation, memcpy and spike in memory use.
- Made FP4ClientUser::DataBuffer private to force it's access via ::ReleaseData

#rb Per.Larsson
#rnx
#preflight 60a6546fb7ccb00001afe5df

[CL 16401395 by paul chipchase in ue5-main branch]
2021-05-20 09:04:59 -04:00
paul chipchase
18dc064335 Add support for downloading a file from source control directly without actually checking it out (ie p4 print) and add additional support so that the command can be called from a background thread.
- Only implemented for perforce source control at the moment.
- The source control operation FDownload file can be used just like any other command via ::Execute BUT it will also work with the new method ::TryToDownloadFileFromBackgroundThread which unlike ::Execute can be called from a background thread.

#rb Sebastien.Lussier
#rnx
#preflight 60a2290322cce000014243ae

* PerforceConnection
- Extend ::RunCommand to take an optional FSharedBuffer reference which can be used to return text/binary data downloaded as part of a perforce command
-- Ideally we would replace all of the out parameters with a single struct but that level of refactor would be better suited to its own submit.
- Removed the bool parameter for FP4ClientUser and replaced it with a set of flags instead
- Added a flag to allow FP4ClientUser to store data, either in binary or text format from a perforce command. Although in general this will be the result of a p4 print command.

* PerforceSourceControlCommand
- No longer assert if the command is not on the game thread if the operation indicates that it is safe to run on a background thread.

* PerforceSourceControlModule
- Register the 'DownloadFile' worker

* PerforceSourceControlOperations
- Add FPerforceDownloadFileWorker

* PerforceSourceControlProvider
- Adding implementation for ::TryToDownloadFileFromBackgroundThread.
-- This method is thread safe compared to the normal ::Execute call due to:
-- 1) This method does not accept any callbacks as the most common use of callbacks with ::Execute is to update the UI.
-- 2) This method does not add the command to any of the internal queues nor rely on Tick to process the command.
-- 3) The worker is invoked directly from the calling thread rather than as a background task.
--4) This method does not allow commands that modify the cached states as this would be very difficult to manage without rewriting how all commands are processed to make sure that they are only run one at a time and the results processed in order. NOTE that async commands can be issued from the game thread and can in theory be run in any order on the p4 server depending on how the background task processing works out with no certainty as to the order the results will be processed in. It is unlikely that we will process results out of order but not impossible, but this is a pre-exisiting issue with the current API, extending it to be fully multithreaded will just make it worse.
-- Note that we do not explicity check if the command supports being called from a background thread, as creating the command will check that anyway.
- Calling ::OutputCommandMessages is now thread safe. When called from the game thread it will issue it's output via FMessageLog as before but when called from a background thread we will use the UE_LOG macros instead. Marshalling all output in the same way is something we will need to solve when/if we make the entire API thread safe.

* PerforceControlSettings
- Improve thread safety when calling ::GetConnectionInfo
- If the password is stored in the UI then this is not thread safe but that feature is hidden at the moment due to being unsecure. I am unsure if we want to move the password to be stored in a member variable that can be accessed from any thread and only updated via the UI or not.

* SourceControlOperations
- Add new FDownloadFile operation.
- This can either download the file(s) to FSharedBuffers which can be accessed by calling ::GetFileData OR directly to a directory on disk if the target directory is supplied as part of the constructor.

* ISourceControlOperation
- Add a new base method CanBeCalledFromBackgroundThreads (false by default) which can be overriden by derived classes and return true to indicate that the operation can be run from a background thread. This is intended for use by FDownloadFile with the perforce source control provider in lieu and making the API fully thread safe.

* PerforceSourceControl.uplugin
- Move the perforce plugin to load as early as possible as if Mirage is to use it then we need it to be avaliable before we start loading any potentially virtualized data in packages.

[CL 16346666 by paul chipchase in ue5-main branch]
2021-05-17 05:06:44 -04:00
luc eygasier
0ab85e473c Removes FStatus operation in SourceControl.
Adds Modified State check by Hash for PerforceSourceControlProvider.
#rb Sebastien.Lussier

#changelist validated

[CL 16332246 by luc eygasier in ue5-main branch]
2021-05-14 14:01:14 -04:00
luc eygasier
a5608833a9 Adds moving files from Uncontrolled Changelist to Changelist.
#rb Sebastien.Lussier
#preflight 609c2b365b35c60001e51d6c

[CL 16306199 by luc eygasier in ue5-main branch]
2021-05-12 17:06:06 -04:00
luc eygasier
9787a46325 Adds Base for Uncontrolled Changelist module.
#rb Sebastien.Lussier

#changelist validated

[CL 16224279 by luc eygasier in ue5-main branch]
2021-05-06 14:40:16 -04:00
aurel cordonnier
50944fd712 Merge UE5/RES @ 16162155 to UE5/Main
This represents UE4/Main @ 16130047 and Dev-PerfTest @ 16126156

[CL 16163576 by aurel cordonnier in ue5-main branch]
2021-04-29 19:32:06 -04:00
Luc Eygasier
0719865734 Fixes temporary CL left being when submitting default changelist.
Changing CL description just before submitting if needed, only if it is not the default CL.
Restore previous changelist description (before tag), in case the submit failed.

#rb Sebastien.Lussier, Julien.LHeureux
#jira UE-114188, UETOOL-3408
#changelist validated

[CL 16113557 by Luc Eygasier in ue5-main branch]
2021-04-26 09:23:26 -04:00
daren cheng
21da590afc Remove UE4 references in source control, AssetTools, Persona
#jira UE-111057, UE-111061, UE-111065, UE-111449, UE-111508
#robomerge Release-5.0-EarlyAccess
#rb trivial
#preflight 605ce8ea5e87c40001cb39e9

[CL 15834507 by daren cheng in ue5-main branch]
2021-03-25 18:44:53 -04:00
julien lheureux
e1004780ae Added timer on changelist refresh operation
Added Move files operation on files in changelist dialog (incl. move to new)
Added new changelist button in toolbar
Added cancellable "path beautification" when we have deleted/shelved files with no matching file, until we make it lazy and/or batched

#rb sebastien.lussier

[CL 15797238 by julien lheureux in ue5-main branch]
2021-03-24 08:29:57 -04:00
Sebastien Lussier
3901276790 WP HLODBuilder - Fix error when there's no files to mark for add
* P4 SCC would give an "invalid syntax" error as the p4 command was ill formed
* Added early exits in USourceControlHelpers operations that take an array of files
#robomerge Release-5.0-EarlyAccess
#rb patrick.enfedaque

[CL 15727461 by Sebastien Lussier in ue5-main branch]
2021-03-17 14:01:05 -04:00
julien lheureux
aa5b17da40 Fix "shelved files" from default changelist, now has the same behavior as in P4V.
Fix an issue where editing a changelist containing shelved files would fail silently.

#rb sebastien.lussier
#jira UE-107676

[CL 15359009 by julien lheureux in ue5-main branch]
2021-02-08 15:32:48 -04:00