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

Re: [WIP PATCH] revision-walk: --parent option to find children of a parent

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Sep 30, 2010, 15:12 UTC
Message-ID
<4CA4A8F3.3010805@drmicha.warpmail.net>
In-Reply-To
<20100930143234.GH4850@burratino>
Jonathan Nieder venit, vidit, dixit 09/30/2010 04:32 PM:
Show 13 quoted lines
> Hi,
> 
> Michael J Gruber wrote:
> 
>> Introduce a new --parent=<commit> option for the revision walker which
>> limits the commits to those which have <commit> as one of their parents.
> 
> So this lists the direct children for a given commit.  Could you
> mention a use case?  Why would one want to use this instead of
> 
>  the_commit=$(git rev-parse --verify <commit>) &&
>  git rev-list --parents ... ^<commit> |
>  grep -F " $the_commit"
| cut -d' ' -f1 # or such :)
> 
> ?

Full disclosure: I didn't see that it can be scripted that easily, simply because the description of "--parents" does not indicate at all that it lists the commit along with its parents. I had the impression that it outputs the parents only (same goes for --children.) so that looping over the rev-list output would be required, which would have been much slower.

As a use case, it not only tells you whether a specific commit is a fork point, it's also a reverse of "rev-parse commit^@", so to say.

Personally, this was some exercise with the revision walker before approaching something else there.

[It also helps with "Heck, I committed on top of a detached origin/next yesterday, how did I tag that commit.", but there are other solutions, of course...]

Speaking of that: It helps you "going forward(!)" from a commit that you checked out (maybe for inspection). Just imagine trying to understand a history by checking out versions iteratively. Say, you want to review the last 10 revs, do a "checkout HEAD~10", then a "checkout HEAD~9" and notice that's not quite the way to do it... (Again, there are alternatives, of course.)

Show 9 quoted lines
>> --- a/revision.c
>> +++ b/revision.c
>> @@ -1149,6 +1149,7 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
>>  {
>>  	const char *arg = argv[0];
>>  	const char *optarg;
>> +	unsigned char sha1[20];
> 
> Could this be given narrower scope?

Sure! I expected more rough edges (and some resistance) which is why I sent a WIP first.

Michael
Previous: Jonathan Nieder
Message 3 of 3 in “revision-walk: --parent option to find children of a parent”
  1. revision-walk: --parent option to find children of a parentMichael J Gruber, Sep 30, 2010
  2. Jonathan NiederSep 30, 2010
  3. Michael J GruberSep 30, 2010

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.