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

Re: [PATCH 2/2] git reflog expire

From
Junio C Hamano <junkio@cox.net>
Date
Dec 19, 2006, 10:15 UTC
Message-ID
<7vhcvsry2c.fsf@assigned-by-dhcp.cox.net>
In-Reply-To
<20061219090851.GH2511@spearce.org>
Shawn Pearce <spearce@spearce.org> writes:
> Of course that's not what the code does, because if either the
> old or the new object is no longer in the ODB you are pruning away
> the log entry.  I cannot however come up with a better name than
> --expire-lost.  :-(
How about --expire-unreachable?
> I'm thinking that we may want the 'expire' subcommand to simply be
> implied by '--expire' instead.

After coding this, my conclusion is the same as yours, but reasoning behind it is slightly different.

To have 'expire' action as a subcommand to 'git-reflog' is from implementor's point of view, and is a horrible organization from the UI standpoint. To the end users, it may be easier to have a single 'git-gc' command that runs these commands with reasonable set of defaults:

	- rerere gc
        - reflog expire --all
	- (possibly) repack -a -d
        - prune

If we go that route, it probably is not even necessary to advertise that 'expire' is a subcommand of reflog. The users would not run it from the command line; it is an implementation detail of 'git-gc' command.

> Needing a subcommand like 'git reflog show HEAD' is just a lot
> of typing[*1*].

I am very interested in seeing how 'git reflog show HEAD' would show the reflog entries. I've tried showing it just like log family shows (it is reasonably easy; you build the list of revs out of reflog entries and feed them to 'git-show' machinery), and while it works, it is unusable for the purpose of seeing which ones are the lost ones (amended commits and rebased branch remnants).

The best I came up with is still my "show-branch --reflog" so far. You really need to show not just the commit title but how they topologically relate to the commits on the surviving branch, and I think having something graphical or semi-graphical is a must.

> I would also say maybe we want to make --dry-run the default, with
> a final message which tells the user that if they really want to
> make it possible to throw away the commits printed above then
> restart the expire operation.

I am moderately negative on that. Nobody does it like that; prune, branch -d, tag -d,...

> I'd like to take a stab at the log display code for the reflog
> command, but I'd also really like to port forward (aka rewrite)
> that mmap window code I keep saying I'll work on, but never quite
> seem to do...

After today's pread() thing, I was also wondering about that too ;-).

Previous: Shawn PearceNext: Shawn Pearce
Message 22 of 28 in “What's cooking in git.git (topics)”
  1. Junio C HamanoDec 16, 2006
  2. Jakub NarebskiDec 16, 2006
  3. Junio C HamanoDec 17, 2006
  4. Yann DirsonDec 17, 2006
  5. Josef WeidendorferDec 17, 2006
  6. Brian GernhardtDec 17, 2006
  7. Shawn PearceDec 17, 2006
  8. revision: introduce ref@{N..M} syntax.Junio C Hamano, Dec 17, 2006
  9. Linus TorvaldsDec 17, 2006
  10. Junio C HamanoDec 17, 2006
  11. Andy ParkinsDec 17, 2006
  12. Junio C HamanoDec 18, 2006
  13. Andy ParkinsDec 18, 2006
  14. Shawn PearceDec 18, 2006
  15. 1/2 add for_each_reflog_ent() iteratorJunio C Hamano, Dec 18, 2006
  16. 2/2 Protect commits recorded in reflog from pruning.Junio C Hamano, Dec 18, 2006
  17. Shawn PearceDec 18, 2006
  18. Junio C HamanoDec 19, 2006
  19. 1/2 Move in_merge_bases() to commit.cJunio C Hamano, Dec 19, 2006
  20. 2/2 git reflog expireJunio C Hamano, Dec 19, 2006
  21. Shawn PearceDec 19, 2006
  22. Junio C HamanoDec 19, 2006
  23. Shawn PearceDec 19, 2006
  24. Linus TorvaldsDec 19, 2006
  25. Junio C HamanoDec 20, 2006
  26. Linus TorvaldsDec 20, 2006
  27. Shawn PearceDec 19, 2006
  28. Junio C HamanoDec 19, 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.