fix: parse extra weird tree mode value (#8900)

- It also seems possible `040775` to be a valid tree mode.
- Ref: https://codeberg.org/Codeberg/Community/issues/2086
- As this is 'officially' not possible I cannot make a small reproducer without importing a existing repository.

## Testing

1. Import https://codeberg.org/GeekRuthie/Dist-Zilla-PluginBundle-Author-GEEKRUTH via the migration tool (either git or github type)
2. Observe that there's no error when viewing the migrated repository.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8900
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-committed-by: Gusted <postmaster@gusted.xyz>
This commit is contained in:
Gusted 2025-08-24 16:17:30 +02:00 committed by Earl Warren
commit 8bfb9d210f

View file

@ -64,7 +64,7 @@ func parseTreeEntries(data []byte, ptree *Tree) ([]*TreeEntry, error) {
entry.entryMode = EntryModeSymlink entry.entryMode = EntryModeSymlink
case "160000": case "160000":
entry.entryMode = EntryModeCommit entry.entryMode = EntryModeCommit
case "040000", "040755": // git uses 040000 for tree object, but some users may get 040755 for unknown reasons case "040000", "040755", "040775": // git uses 040000 for tree object, but some users may get 040755 or 040775 for unknown reasons
entry.entryMode = EntryModeTree entry.entryMode = EntryModeTree
default: default:
return nil, fmt.Errorf("unknown type: %v", string(entryMode)) return nil, fmt.Errorf("unknown type: %v", string(entryMode))
@ -118,7 +118,7 @@ loop:
entry.entryMode = EntryModeSymlink entry.entryMode = EntryModeSymlink
case "160000": case "160000":
entry.entryMode = EntryModeCommit entry.entryMode = EntryModeCommit
case "40000", "40755": // git uses 40000 for tree object, but some users may get 40755 for unknown reasons case "40000", "40755", "40775": // git uses 40000 for tree object, but some users may get 40755 or 40775 for unknown reasons
entry.entryMode = EntryModeTree entry.entryMode = EntryModeTree
default: default:
log.Debug("Unknown mode: %v", string(mode)) log.Debug("Unknown mode: %v", string(mode))