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

Re: [RFC] git reflog show

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Dec 26, 2006, 23:20 UTC
Message-ID
<Pine.LNX.4.63.0612270006460.19693@wbgn013.biozentrum.uni-wuerzburg.de>
In-Reply-To
<7v64byfpic.fsf@assigned-by-dhcp.cox.net>
Hi,
On Tue, 26 Dec 2006, Junio C Hamano wrote:
Show 31 quoted lines
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> >> The most valuable parts of the revision walking code are about 
> >> ancestry traversal and history simplification with pathspec, neither 
> >> of which makes much sense to use when "walking" reflog.
> >
> > Sorry to be a PITA here, but I think that it _would_ make sense. Quite 
> > often I ask myself "That feature in this file used to work. When and 
> > how was it changed?" Right now, I use git-log with path 
> > simplification, but with reflog walking, I could ask in a more 
> > specific way!
> 
> When you put it that way, it sort of makes sense.  Right now, 
> get_revision() walks the chain of commits using the parent links and the 
> history simplification (try_to_simplify_commit) looks at each commit and 
> compares the tree with its parents' trees to decide if the commit is 
> worth considering.
> 
> [...]
> 
> I am not proposing to introduce a new object type here, but
> conceptually we could.  Maybe a quick hack would be to represent
> each reflog entry as a phony "struct commit" in core,
> 
>  1. whose tree is taken from the tree of the tip commit,
> 
>  2. whose buffer is handcrafted by the true commit log message
>     with data from reflog, and
> 
>  3. whose parent list points at another phony "commit" that
>     represents ref@{N+1} reflog entry.

I see only one problem with this approach: "next..master@{0}" would stop to work as expected.

Show 16 quoted lines
> >> But it _also_ makes sense to use reflog when the primary thing we are 
> >> interested in seeing is not how the tip jumped around, but seeing how 
> >> the branch acquired commits, which I think is what you are 
> >> suggesting.  What we would want to have is a sort order different 
> >> from the existing topo or date, which is "reflog order".
> >
> > I think it should not be a different sort order. As you pointed out 
> > yourself, a "git reset --hard HEAD^" removes the assumption of the 
> > commit list being a DAG.
> 
> I think I misunderstood your proposal and the misunderstanding resulted 
> in an unrelated useful enhancement ;-).  If HEAD@{0} and HEAD@{2} points 
> at the same commit, then obviously commits reachable from that commit 
> did not come into the branch no later than HEAD@{2} time (what HEAD@{0} 
> says becomes irrelevant), so you can define an order that lists commits 
> in the order the earliest time they appeared on a branch.

I fear that this traversal is not as easy as it seems. We cannot just blindly walk the reflogs, since the simplification relies on being able to actually rewrite the commit_list. Also, if a commit was seen, it must be possible to show it _again_. And if you show the commit diff, you rely on commit->parents actually containing the rewritten parents. And the same commit could be in revs->commits twice, and the correct reflog has still to be shown.

So I tend to think that rewriting the parents, buffer _and_ flags is the way to go.

Ciao, Dscho

Previous: Junio C HamanoNext: Junio C Hamano
Message 13 of 14 in “[RFC] git reflog show”
  1. Shawn PearceDec 23, 2006
  2. Junio C HamanoDec 23, 2006
  3. Johannes SchindelinDec 23, 2006
  4. Shawn PearceDec 24, 2006
  5. Johannes SchindelinDec 24, 2006
  6. Junio C HamanoDec 24, 2006
  7. Johannes SchindelinDec 25, 2006
  8. Junio C HamanoDec 25, 2006
  9. Shawn PearceDec 26, 2006
  10. Junio C HamanoDec 26, 2006
  11. Johannes SchindelinDec 26, 2006
  12. Junio C HamanoDec 26, 2006
  13. Johannes SchindelinDec 26, 2006
  14. Junio C HamanoDec 26, 2006

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.