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

questions / suggestions about history simplification

From
Adam Spiers <git@adamspiers.org>
Date
Dec 19, 2013, 19:03 UTC
Message-ID
<20131219190333.GE23496@pacific.linksys.moosehall>
In-Reply-To
<20131219183645.GD23496@pacific.linksys.moosehall>
On Thu, Dec 19, 2013 at 06:36:45PM +0000, Adam Spiers wrote:
> I wanted to be able to experiment with the TREESAME example given in
> the git-log(1) man page, so I built this script which recreates it:
[snipped]
> Would it be worth including this in (say) contrib/, and then referring
> to it from the man page, in case anyone else feels a similar urge?

Hmm, another related option would be to add a new test case which tests that git log behaves in the way the man page says it does, in this case. Although to some extent this would duplicate what t6012-rev-list-simplify.sh already tests.

I still don't understand a few things about history simplification:
1. The "--full-history without parent rewriting" correctly asserts
   that commit Q will be shown.  But AFAICS this contradicts the
   documented behaviour "Commits are included if they are not TREESAME
   to any parent" which is implied by "This mode differs from the
   default in one point:", because Q is TREESAME to P.
2. What difference does --dense ever make?  In all three of the modes
   described above it ("Default", "--full-history without parent
   rewriting", and "--full-history with parent rewriting"), walked
   commits are already included if they are not TREESAME to any
   parent.
3. Why is --sparse so called, given that it increases rather than
   decreases the number of commits shown?

I have to say I find this section of the man page really quite hard to grok, partially due to the choice of "TREESAME" word. I'm guessing that this was used because it reflects the name of the constant used in the code, but it does not help legibility of the man page at all.

I think it could help to add descriptions of the behaviour which are less formal and more intuitive from a pragmatic real world point of view. For example:

    "Each commit walked will only be shown in the default output mode
     if it changed the given path(s) relative to *all* its parents.
     When walking the commit graph, if a merge didn't change the given
     path relative to at least one of its parents, then only one of
     those parents would be walked.  This reduces the number of
     commits shown, but pruning commit chains whose changes
     effectively died out during merges."

This sort of text could then be followed by the examples, for those who want to check they understood it fully.

Hope this feedback is useful,
Adam
Previous: Adam SpiersNext: Jonathan Nieder
Message 2 of 14 in “script for reproducing history example in git-log(1) man page”
  1. Adam SpiersDec 19, 2013
  2. questions / suggestions about history simplificationAdam Spiers, Dec 19, 2013
  3. Jonathan NiederDec 19, 2013
  4. Adam SpiersDec 19, 2013
  5. Junio C HamanoDec 19, 2013
  6. Adam SpiersDec 19, 2013
  7. Junio C HamanoDec 19, 2013
  8. Adam SpiersDec 19, 2013
  9. Junio C HamanoDec 19, 2013
  10. Adam SpiersDec 19, 2013
  11. Junio C HamanoDec 22, 2013
  12. Adam SpiersDec 22, 2013
  13. Junio C HamanoDec 26, 2013
  14. Adam SpiersDec 19, 2013

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.