threads / discuss / 13387

inconsistent detached worktree handling: several bugs

Subject: inconsistent detached worktree handling: several bugs

## tl;dr

5 messages between May 5, 2008 and May 7, 2008.

replies: 4people: 2as markdown or json

martin f krafft· May 5, 2008, 16:06 UTC · lore

I am playing around with detached worktrees and have identified a number of bugs in the path handling. Specifically, it seems that while git-status and git-add/git-rm are consistent with respect to each other, they expose different behaviour in different scenarios. git-diff, on the other hand, seems broken with respect to worktree handling.

Let me run you through what I did, bugs are identified with ###BUG. Output is prefixed with #, which should make it easier to cut-n-paste to reproduce

Note how $GIT_DIR is set for the first part of this exercise:

mkdir worktree GIT_DIR=repo.git; export GIT_DIR git --bare init # Initialized empty Git repository in repo.git/ git config core.bare false git config core.worktree ../worktree

echo This is just a file called foo > worktree/foo

git add worktree/foo # fatal: pathspec 'worktree/foo' did not match any files ###BUG: git should be able to factor out the common path prefix

ls foo # ls: cannot access foo: No such file or directory git add foo # very confusing, but works

git commit -m'initial checkin' # Created initial commit 2f2cdf3: initial checkin # 1 files changed, 1 insertions(+), 0 deletions(-) # create mode 100644 foo

git status ## On branch master # nothing to commit (working directory clean)

git diff # diff --git a/foo b/foo # deleted file mode 100644 # index 27b451e..0000000 # --- a/foo # +++ /dev/null # @@ -1 +0,0 @@ # -This is just a file called foo ###BUG: git-diff doesn't seem to honour worktree and thinks the file ###was deleted

git diff -- worktree/foo ###BUG: no output, even though path was given

echo Another line >> worktree/foo git status # # On branch master # # Changed but not updated: # # (use "git add <file>..." to update what will be committed) # # # # modified: foo # # # no changes added to commit (use "git add" and/or "git commit -a")

git diff -- worktree/foo ###BUG: no output, even though path was given

git add foo # diff --git a/foo b/foo # deleted file mode 100644 # index 76404d8..0000000 # --- a/foo # +++ /dev/null # @@ -1,2 +0,0 @@ # -This is just a file called foo # -Another line

git diff --cached # diff --git a/foo b/foo # index 27b451e..76404d8 100644 # --- a/foo # +++ b/foo # @@ -1 +1,2 @@ # This is just a file called foo # +Another line

----------- If worktree is actually an ancestor of the Git repository *and* we chdir() into the repository, whether GIT_DIR is set or not, things look different again:

mv ../worktree/* .. rmdir ../worktree git config core.worktree .. git status # # On branch master # # Changed but not updated: # # (use "git add <file>..." to update what will be committed) # # # # modified: ../foo # # # # Untracked files: # # (use "git add <file>..." to include in what will be committed) # # # # ./ # no changes added to commit (use "git add" and/or "git commit -a")

git diff # diff --git a/foo b/foo # deleted file mode 100644 # index 76404d8..0000000 # --- a/foo # +++ /dev/null # @@ -1,2 +0,0 @@ # -This is just a file called foo # -Another line ###BUG: again, git-diff can't find the local file

git add foo # fatal: pathspec 'repo.git/foo' did not match any files ###BUG: inconsistent with above behaviour, but consistent with ###git-status output

git add ../foo git commit -m'another linee' # Created commit d016799: another linee # 1 files changed, 1 insertions(+), 0 deletions(-)

-- 
martin | http://madduck.net/ | http://two.sentenc.es/
 
"i might disagree with what you have to say,
 but I'll defend to the death your right to say it."
                                                           -- voltaire
 
spamtraps: madduck.bogus@madduck.net
Santi Béjar· May 7, 2008, 08:15 UTC · re: martin f krafft · lore

Re: inconsistent detached worktree handling: several bugs

On Mon, May 5, 2008 at 6:06 PM, martin f krafft <madduck@madduck.net> wrote:
Show 11 quoted lines
> I am playing around with detached worktrees and have identified
>  a number of bugs in the path handling. Specifically, it seems that
>  while git-status and git-add/git-rm are consistent with respect to
>  each other, they expose different behaviour in different scenarios.
>  git-diff, on the other hand, seems broken with respect to worktree
>  handling.
>
>  Let me run you through what I did, bugs are
>  identified with ###BUG. Output is prefixed with #, which should make
>  it easier to cut-n-paste to reproduce
>
I don't know if it resolves all the issues, but:
- If run outside of the working copy => equivalent to run it from the
top of the wc.
  (for the normal case it just fails)
- It is not recommended (supported?) to have the repository inside the
working directory
  (unless it is .git, of course)
Santi
martin f krafft· May 7, 2008, 18:06 UTC · re: Santi Béjar · lore

Re: inconsistent detached worktree handling: several bugs

also sprach Santi Béjar <sbejar@gmail.com> [2008.05.07.0915 +0100]:
Show 5 quoted lines
> I don't know if it resolves all the issues, but:
> 
> - If run outside of the working copy => equivalent to run it from the
> top of the wc.
>   (for the normal case it just fails)
This is not what the output of git-status suggests:

lapse:~|master|.fgits/zsh.git% git status #1,801 # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: ../../.zsh/zshrc/30_aliases # no changes added to commit (use "git add" and/or "git commit -a")

If, what you said were the case, it'd be .zsh/zshrc/30_aliases. ../.. is the setting of core.worktree.

> - It is not recommended (supported?) to have the repository inside
> the working directory (unless it is .git, of course)
Why not?
-- 
martin | http://madduck.net/ | http://two.sentenc.es/
 
"'oh, that was easy,' says Man, and for an encore goes on to prove
 that black is white and gets himself killed on the next zebra
 crossing."
            -- douglas adams, "the hitchhiker's guide to the galaxy"
 
spamtraps: madduck.bogus@madduck.net
Santi Béjar· May 7, 2008, 19:20 UTC · re: martin f krafft · lore

Re: inconsistent detached worktree handling: several bugs

On Wed, May 7, 2008 at 8:06 PM, martin f krafft <madduck@madduck.net> wrote:
Show 24 quoted lines
> also sprach Santi Béjar <sbejar@gmail.com> [2008.05.07.0915 +0100]:
>
> > I don't know if it resolves all the issues, but:
>  >
>  > - If run outside of the working copy => equivalent to run it from the
>  > top of the wc.
>  >   (for the normal case it just fails)
>
>  This is not what the output of git-status suggests:
>
>  lapse:~|master|.fgits/zsh.git% git status                                #1,801
>
> # On branch master
>  # Changed but not updated:
>  #   (use "git add <file>..." to update what will be committed)
>  #
>  #       modified:   ../../.zsh/zshrc/30_aliases
>  #
>
> no changes added to commit (use "git add" and/or "git commit -a")
>
>  If, what you said were the case, it'd be .zsh/zshrc/30_aliases.
>  ../.. is the setting of core.worktree.
>

So it is run inside the worktree ( $workingdir/.fgits/zsh ) and the repository is inside the worktree.

Show 5 quoted lines
>
>  > - It is not recommended (supported?) to have the repository inside
>  > the working directory (unless it is .git, of course)
>
>  Why not?

I read it in this list but I don't find it now. Maybe because of the special handling of .git does not apply to an arbitrary path.

Santi
martin f krafft· May 7, 2008, 19:32 UTC · re: Santi Béjar · lore

Re: inconsistent detached worktree handling: several bugs

also sprach Santi Béjar <sbejar@gmail.com> [2008.05.07.2020 +0100]:
> So it is run inside the worktree ( $workingdir/.fgits/zsh ) and the
> repository is inside the worktree.
Doh, I should engage brain more often. :)

So this makes sense. What does not make sense is that git-diff doesn't appear to work with any of this...

> I read it in this list but I don't find it now. Maybe because of
> the special handling of .git does not apply to an arbitrary path.

I think it actually does. But in my case, it's also .gitignored in addition.

-- 
martin | http://madduck.net/ | http://two.sentenc.es/
 
it is better to have loft and lost
than to never have loft at all.
                                                       -- groucho marx
 
spamtraps: madduck.bogus@madduck.net

← back to recent threads