Idea is that tools could interface with Horde Storage use this API, with concrete implementations that use HTTP, gRPC or (in the case of legacy applications within Horde.Build) communicate internally within the same process to store the data.
Errors should be surfaced using exceptions.
#preflight none
[CL 18677234 by Ben Marsh in ue5-main branch]
The base class in a hierarchy must have the [CbPolymorphic] attribute, and derived classes must have the [CbDiscriminator] attribute, giving an identifier to indicate the derived type.
#preflight none
#p4v-preflight-copy 18635755
#preflight 61e6d83a7f0c4b5aad620c89
[CL 18640150 by Ben Marsh in ue5-main branch]
The base class in a hierarchy must have the [CbPolymorphic] attribute, and derived classes must have the [CbDiscriminator] attribute, giving an identifier to indicate the derived type.
#preflight none
#preflight 61e600aa3778a195de94dc27
[CL 18635774 by Ben Marsh in ue5-main branch]
* Support for creating workspaces using native P4 client, so "ugs init" now works correctly.
* Output a list of files which need to be clobbered when syncing, and add a -Clobber option to confirm intent.
* Fix exception accessing folders that user does not have permissions to when detecting a new workspace.
#preflight none
[CL 18618091 by Ben Marsh in ue5-main branch]
- Data read from stdout/stderr is now writen to buffers posted in a Channel<T>, which correctly supports await and cancellation (unlike AsynchronousPipe).
- Public StdOut/StdErr streams are now a custom stream implementation that reads from the channel and copies data into the output buffer.
- Buffer objects are sized at 1024 bytes and pooled, which should be enough to accomodate most output lines without splitting.
- When the process is disposed, we now terminate the entire process tree. The tasks left reading from the child process terminate asynchronously.
Tested in a command line and WinForms app (by forcing SupportsJobObjects to return false) with asynchronous and synchronous reads to ensure code does not deadlock.
#preflight 61e062b3ed50181feb511e39
[CL 18601195 by Ben Marsh in ue5-main branch]
- Now uses the custom C++ Perforce library developed for Horde. This removes dependencies on an installed P4.EXE tool, improves performance, and paves the way to cross-platform support via command line invocations.
- As part of the migration to the new Perforce library, the codebase now uses async/await extensively instead of background threads, and supports a proper cancellation path rather than aborting threads.
- ILogger is now used for writing log files.
- Started converting to use of nullable annotations.
#preflight none
[CL 18511154 by Ben Marsh in ue5-main branch]
- Removed functionality to set environment variables through the IPerforceConnection object. This is now handled via PerforceEnvironment.
- Added support for logging in using the native Perforce connection implementation.
- Started migrating methods that return a list of responses to return an IAsyncEnumerable instead. This makes it much easier to perform stream processing on requests that return a lot of data.
- Added the "p4 depot" command.
- Added the "p4 have" command.
- Added the "p4 opened" command.
- Added the "p4 stream" command.
- Added the "p4 users" command.
- Added support for printing files to a temporary file, and for p4 print commands returning metadata along with the payload in its response.
- Fixed stream corruption using native Perforce library if a record did not completely fit within the output buffer.
#preflight none
[CL 18504069 by Ben Marsh in ue5-main branch]