ludo@gnu.org (Ludovic Courtès) writes: > Hello Marius! > > Marius Bakke skribis: > >> This makes it play nicely with worktrees. >> >> * guix/git-download.scm (git-file-list): Use REPOSITORY-WORKING-DIRECTORY to >> locate checkout. Rename from "top" to "workdir". >> --- >> >> Notes: >> Guix, >> >> This fixes (current-guix) for me in a worktree. Testing needed on other git >> setups! >> >> guix/git-download.scm | 9 ++++++--- >> 1 file changed, 6 insertions(+), 3 deletions(-) >> >> diff --git a/guix/git-download.scm b/guix/git-download.scm >> index 24cf11be5..a7c8173f4 100644 >> --- a/guix/git-download.scm >> +++ b/guix/git-download.scm >> @@ -158,19 +158,22 @@ also includes directories, not just regular files. The returned file names >> are relative to DIRECTORY, which is not necessarily the root of the checkout." >> (let* ((directory (canonicalize-path directory)) >> (dot-git (repository-discover directory)) >> - (top (dirname dot-git)) >> (repository (repository-open dot-git)) >> + (workdir (canonicalize-path >> + ;; XXX: This variable is mistakenly private in Guile-Git 0.1.0. >> + ((@@ (git repository) repository-working-directory) >> + repository))) > > I think we can avoid the call to ‘canonicalize-path’ here, can’t we? > It’s costly, and since we did it just above, it shouldn’t be needed > here. You're right. I mostly needed it because (repository-working-directory) includes a trailing slash. This behaviour seems to be consistent, so I managed to simplify the code further by assuming that is the case: