-
Notifications
You must be signed in to change notification settings - Fork 341
feat: Unreal Engine support - One File Per Actor filename decoding
#2068
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Conversation
This feature helps Unreal Engine developers by displaying human-readable Actor labels instead of raw hashed filenames (e.g., 'KCBX...uasset') in the Working Copy view. Changes: - Implemented a native C# parser for .uasset files to extract 'ActorLabel' or 'FolderLabel'. - Added 'EnableOFPADecoding' option in Repository Settings. - Added a toggle button in the Working Copy toolbar. - Implemented async path decoding in WorkingCopy ViewModel to avoid UI blocking. - Updated ChangeTreeNode to display decoded names in Tree View mode. - Added unit tests for the OFPA parser.
This update polishes the OFPA naming implementation and extends support to List and Grid views. Improvements: - Refactored binary parser into 'SourceGit.Utilities.OFPAParser' with improved naming and safety. - Created 'PathToDisplayNameConverter' to enable decoded names in List and Grid views. - Fixed UI refresh issue when toggling OFPA mode by ensuring dictionary reference swapping. - Added race condition protection in async decoding task. - Updated all view modes in 'ChangeCollectionView' to support 'DecodedPaths'. - Fixed nullable warnings for .NET 10.0 compatibility.
This update finalizes the OFPA feature logic. Changes: - Added contextual visibility: The decoding toggle is now hidden unless a .uproject or .uplugin file is detected. - Implemented metadata caching: Files are re-decoded only when modified (size/time check). - Added fallback to Git Index/HEAD: Deleted or missing files are now decoded by reading blobs from Git. - Fixed Race Condition: Guarded against applying results if the feature was disabled during async processing. - Safety: Added checks for object disposal to prevent crashes.
Major performance improvement for Unreal Engine projects with many OFPA files. Changes: - Implement QueryFileContent.RunBatchAsync using git cat-file --batch to reduce process creation overhead for Index/HEAD file reads. - Refactor WorkingCopy.DecodeOFPAPathsAsync: - Use batch processing for missing working tree files. - Implement sequential task execution to prevent race conditions. - Add stat-based caching (size/mtime) to skip re-decoding unchanged files. - Cache IsUnrealEngineProject check in Repository ViewModel to avoid repeated I/O. - Add unit tests for OFPAParser case sensitivity and extension checks. - Add PerformanceLogger for internal profiling of decode operations.
Complete the Unreal Engine OFPA (One File Per Actor) support with safety guards, updated localization, and performance fixes. Changes: - Memory Safety: Implemented MaxOFPASampleSize (256KB) limit for binary reads in QueryFileContent.RunBatchAsync to prevent OOM when processing large UE assets. - Robust Parsing: Increased MaxHeaderScanSize in OFPAParser and improved heuristic detection for ActorLabel/FolderLabel in complex uasset files. - UI/UX: Added OFPA-specific icons and updated Repository Configuration view to support the new toggle. - Localization: Added translations for English, Russian, and Chinese (Simplified). - Stability: Added unit tests for PathToDisplayNameConverter and Repository-level Unreal Engine support logic. - Cleanup: Removed legacy SourceGit.sln (migrated to .slnx) and internal PerformanceLogger.
Applied the OFPA filename decoding logic to historical views (Commit Detail and Stashes). Changes: - Implemented async decoding in CommitDetail and StashesPage ViewModels. - Updated CommitChanges, CommitDetail (Info tab), and StashesPage Views to bind to DecodedPaths. - Reused efficient batch git processing (git cat-file) to read file content from specific revisions (SHA/Parent) without checking out files. - Guarded by the same EnableUnrealEngineSupport setting.
|
does the decoding also allow to show if the file is locked by someone ? It would be nice if it name shows I think it would be useful to have that if possible |
- Refactor OFPA decoding in CommitDetail and StashesPage to be fully async and atomic. - Prevent UI updates until decoding is complete to avoid visual artifacts. - Ensure thread safety and handle race conditions during rapid navigation.
- Implement async decoding of OFPA paths in the LFS Locks window. - Reuse OFPAConverters.PathToDisplayName for consistent rendering. - Ensure decoding happens on a background thread to prevent UI freezing. - Fallback to raw paths for files missing locally. This improves usability for UE5 developers by showing human-readable Actor Labels instead of hashed filenames when managing LFS locks.
|
@Jus2Cat Awesome work with this PR . I see you added a button to view the locked files in a separate window. I think this approach might be difficult to use if you have 50 locked files and you have to figure out which person locked it. Would it be possible maybe to achieve one of the following:
|

This PR adds support for Unreal Engine's
One File Per Actorsystem. It decodes hashe filenames(e.g.
KCBX0GWLTFQT9RJ8M1LY8.uasset) into human-readable view.This solves a major pain point for UE developers where file names are meaningless hash strings.
This makes it impossible to identify which actors have been modified without opening the Unreal Editor, causing significant workflow delays.
Currently, only one paid Git client offers a similar feature, and there are no free alternatives.🛡️ Safety & Performance (Key Highlights)
EnableUnrealEngineSupport. If disabled, this code path is never executed.
System.OutOfMemoryException and UI freezes, even if users modify huge binary assets (1GB+).
to read Git objects. This makes it performant even with thousands of changes.
refresh.
🛠️ Changes
decoded files.
__ExternalActors__or__ExternalObjects__folders and a.uprojectfile.ensuring no impact on the standard Git workflow.