-
Notifications
You must be signed in to change notification settings - Fork 340
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
Open
Jus2Cat
wants to merge
11
commits into
sourcegit-scm:develop
Choose a base branch
from
Jus2Cat:feature/ofpa-naming
base: develop
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+1,550
−35
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.

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.