feat: Unreal Engine support - One File Per Actor filename decoding#2068
feat: Unreal Engine support - One File Per Actor filename decoding#2068Jus2Cat wants to merge 1 commit intosourcegit-scm:developfrom
One File Per Actor filename decoding#2068Conversation
|
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 |
|
@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:
|
5142a5f to
62d2908
Compare
|
If File lock is independent from this functionality (And usable for other file type) I think is better to not mix it and do it in another PR? Regards |
997bd05 to
808da75
Compare
|
Hi! I've rebased and significantly cleaned up this PR: What changed:
Why this is safe to merge:
This solves a real pain point for Unreal Engine developers: OFPA generates opaque hash-based filenames that make it impossible to identify which actors changed without opening the editor. Currently no free Git client offers this. Happy to split, simplify, or adjust anything. Would appreciate feedback on what would make this easier to review. |
…r names Unreal Engine's One File Per Actor (OFPA) system stores actors as files with opaque hash-based names (e.g. `KCBX0GWLTFQT9RJ8M1LY8.uasset`), making it impossible to identify modified actors without opening the editor. This adds opt-in OFPA decoding that resolves these hashes to actor names by reading the binary `.uasset` header. The feature is controlled by a per-repository toggle in Repository Configuration. Core: - OFPAParser: binary reader for UE4/UE5 `.uasset` NameMap headers - OFPAFilePrefixReader: reads only the first 256KB to avoid OOM on large assets - OFPAGitBatchReader: uses `git cat-file --batch` for efficient bulk reads - OFPANameLookup: async lookup with working-tree-first, index/HEAD fallback - OFPADecodingContext: shared refresh/stale-guard logic used by all ViewModels Integration: - WorkingCopy, CommitDetail, StashesPage: async OFPA refresh via OFPADecodingContext - ChangeCollectionView: display decoded names via OFPAConverters.PathToDisplayName - RepositoryConfigure: `EnableOFPADecoding` toggle with explanatory tooltip Tests: - OFPAParserTests: decoding across UE 5.3, 5.6, 5.7 formats - OFPAFilePrefixReaderTests: prefix reading and boundary conditions - OFPANameLookupTests: working tree, index fallback, and revision object lookup - OFPAConvertersTests: display name converter edge cases
808da75 to
784975c
Compare
|
[Repository] to manually test the feature (no Unreal Engine needed): The repo has 4 commits with ~210 OFPA files, including additions and deletions — enough to test all views (Local Changes, History, Stashes). |

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.