git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] Documentation/git-status: document porcelain status T (typechange)

From
Johannes Altmanninger <aclopte@gmail.com>
Date
Oct 4, 2021, 18:57 UTC
Message-ID
<20211004185741.rktidu2ptn4v5kll@gmail.com>
In-Reply-To
<CABPp-BFqJi0q0844NKfU8K5HRpAJ7yP2OkyBUiFQSAw-ZjNoyw@mail.gmail.com>

Thanks for the review, I'll send v2 which addresses comments and makes some minor hanges to the commit messages.

On Sat, Oct 02, 2021 at 04:29:52PM -0700, Elijah Newren wrote:
> > A porcelain status containing C (copied) is impossible because "git
> > status" does not detect copies, only renames.
> 
> This is no true (since ~2018); here's an example:

Ah my bad. Turns out skimming git-status(1) was not enough. I added patch 4/4 to make that easier (or at least document that it *is* possible).

Show 11 quoted lines
> 
>     $ cp -a README.md README-copy
>     $ echo garbage >>README.md
>     $ git add README-copy README.md
>     $ git -c status.renames=copy status --porcelain
>     C  README.md -> README-copy
>     M  README.md
> 
> You can also use diff.renames instead of status.renames, since the
> latter defaults to the former.  Note that you do need to both modify
> and stage README.md in the example above to see the copy status.
Wow yeah, this is quite a special case.
Show 15 quoted lines
> 
> > I was going to delete
> > mentions of C from git-status.txt because it keeps confusing users [2]
> > but a discussion from 2014 suggests that "git status" should re-learn
> > to detect copies, which was disabled in 2005 for (obsolete) performance
> > reasons [3].
> 
> That thread you refer to suggests it was turned off because copy
> detection meant the equivalent of find-copies-harder, and that thread
> also provided numbers showing find-copies-harder would still be very
> painful performance-wise.  Perhaps the "obsolete performance reasons"
> was meant to imply that basic copy detection is cheaper since it does
> something different today than what status's copy detection did back
> then, but summarizing this as "obsolete performance reasons" feels
> misleading to me.
Right, I should have acknowledged the change to copy detection.
Show 9 quoted lines
> 
> Links to lore.kernel.org would be much preferred to marc.info links;
> here that would be
> https://lore.kernel.org/git/20141202200910.GB23461@peff.net/.
> 
> The lore.kernel.org links provide an interface to easily search for
> other mailing list messages, and use the Message-ID in the URL which
> makes it easier for people to find the message in other locations,
> etc.
got it
Show 19 quoted lines
> 
> >  [ D]        R    renamed in work tree
> >  [ D]        C    copied in work tree
> 
> This wasn't something you added; it appears these two came from commit
> 176ea74793 ("wt-status.c: handle worktree renames", 2017-12-27).
> However, I don't think the 'D' part of these examples is possible.  If
> a file is deleted in the index relative to HEAD (what the 'D' means),
> then comparing the index to the worktree means the file didn't even
> exist in the index.  Thus no delete pair for that file will be passed
> to diffcore-rename, and without a delete pair for some file, there is
> nothing for the add pairs to be combined with to create a rename or
> copy pair.  So these lines are misleading and should only have a space
> in the first column rather than either a space or 'D'.
> 
> That said, of course, since this wasn't caused by your patch, you are
> under no obligation to fix.  It would go nicely with your series,
> though.  Would you like to add another patch to your series to fix
> that, or would you rather that I contributed such a patch separately?
Ok I've added patch 1/4
Previous: Elijah NewrenNext: Johannes Altmanninger
Message 5 of 16 in “Documentation/diff-format: state in which cases porcelain status is T”
  1. 1/2 Documentation/diff-format: state in which cases porcelain status is TJohannes Altmanninger, Oct 2, 2021
  2. 2/2 Documentation/git-status: document porcelain status T (typechange)Johannes Altmanninger, Oct 2, 2021
  3. Johannes AltmanningerOct 2, 2021
  4. Elijah NewrenOct 2, 2021
  5. Johannes AltmanningerOct 4, 2021
  6. 1/4 Documentation/git-status: remove impossible porcelain status DR and DCJohannes Altmanninger, Oct 4, 2021
  7. 2/4 Documentation/diff-format: state in which cases porcelain status is TJohannes Altmanninger, Oct 4, 2021
  8. 3/4 Documentation/git-status: document porcelain status T (typechange)Johannes Altmanninger, Oct 4, 2021
  9. 4/4 Documentation/git-status: mention how to detect copiesJohannes Altmanninger, Oct 4, 2021
  10. Bagas SanjayaOct 5, 2021
  11. Johannes AltmanningerOct 5, 2021
  12. Bagas SanjayaOct 6, 2021
  13. Elijah NewrenOct 6, 2021
  14. Junio C HamanoOct 4, 2021
  15. Junio C HamanoOct 4, 2021
  16. Elijah NewrenOct 2, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.