detached aff5730

fix(gitcli): wrap the tree id error and do not retain ls-tree entries

ListPaths wraps a ParseObjectID error like its other returns, and copies
each path so the list does not keep the whole "<mode> <type> <id>\t"
entry alive.
commit
aff5730aa55c596e2e9f2755193b1367ce5b7269
author
brice · · 2026-10-11 19:15 UTC
parent
e2ac0a6
signature
GPG VerifiedCD88F9E564E0102646FB6077A1A07C7C7C3E349D · arch-gpg Verified for the committer email
1 file · +3 -2
M internal/adapters/gitcli/read.go +3 -2
@@ -303,7 +303,7 @@ func (g *Git) ListPaths(ctx context.Context, repo domain.RepoName, rev domain.Re
303303 }
304304 treeID, err := domain.ParseObjectID(obj.info.ID)
305305 if err != nil {
306- return domain.PathList{}, err
306+ return domain.PathList{}, fmt.Errorf("paths of %q: %w", repo, err)
307307 }
308308 list := domain.PathList{CommitID: obj.commit, TreeID: treeID}
309309 size := 0
@@ -330,7 +330,8 @@ func (g *Git) ListPaths(ctx context.Context, repo domain.RepoName, rev domain.Re
330330 return errStop
331331 }
332332 size += len(path)
333- list.Paths = append(list.Paths, path)
333+ // A copy: path would keep the whole "<mode> <type> <id>\t" entry alive.
334+ list.Paths = append(list.Paths, strings.Clone(path))
334335 }
335336 })
336337 if err != nil {
@@ -303,7 +303,7 @@ func (g *Git) ListPaths(ctx context.Context, repo domain.RepoName, rev domain.Re
303 }303 }
304 treeID, err := domain.ParseObjectID(obj.info.ID)304 treeID, err := domain.ParseObjectID(obj.info.ID)
305 if err != nil {305 if err != nil {
306- return domain.PathList{}, err306+ return domain.PathList{}, fmt.Errorf("paths of %q: %w", repo, err)
307 }307 }
308 list := domain.PathList{CommitID: obj.commit, TreeID: treeID}308 list := domain.PathList{CommitID: obj.commit, TreeID: treeID}
309 size := 0309 size := 0
@@ -330,7 +330,8 @@ func (g *Git) ListPaths(ctx context.Context, repo domain.RepoName, rev domain.Re
330 return errStop330 return errStop
331 }331 }
332 size += len(path)332 size += len(path)
333- list.Paths = append(list.Paths, path)333+ // A copy: path would keep the whole "<mode> <type> <id>\t" entry alive.
334+ list.Paths = append(list.Paths, strings.Clone(path))
334 }335 }
335 })336 })
336 if err != nil {337 if err != nil {

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 2

Tags 45

↑↓ moveenter openesc close