threads / discuss / 53360

Guess the base-commit of a series

Subject: Guess the base-commit of a series

## tl;dr

4 messages between Apr 30, 2020 and Apr 30, 2020.

replies: 3people: 3as markdown or json

Konstantin Ryabitsev· Apr 30, 2020, 17:21 UTC · lore
Hello:

Given a/ b/ filenames and blob index information, is there a relatively easy way to find the latest branch commit where a patch series would apply cleanly (i.e. guess the base-commit)?

-K
Eric Wong· Apr 30, 2020, 17:33 UTC · re: Konstantin Ryabitsev · lore

Re: Guess the base-commit of a series

Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote:
Show 5 quoted lines
> Hello:
> 
> Given a/ b/ filenames and blob index information, is there a relatively 
> easy way to find the latest branch commit where a patch series would 
> apply cleanly (i.e. guess the base-commit)?
Not as far as I know...

Indexing git repos to store a reverse mapping of blobs => commits/trees/tags is something I've been planning as part of public-inbox (for the "solver" subcomponent which recreates blobs from patch mails, I want it to recreate trees).

I'm not sure if/when I'll get around to it; and it's space-intensive with Xapian, too.

Junio C Hamano· Apr 30, 2020, 19:49 UTC · re: Eric Wong · lore

Re: Guess the base-commit of a series

Eric Wong <e@yhbt.net> writes:
Show 8 quoted lines
> Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote:
>> Hello:
>> 
>> Given a/ b/ filenames and blob index information, is there a relatively 
>> easy way to find the latest branch commit where a patch series would 
>> apply cleanly (i.e. guess the base-commit)?
>
> Not as far as I know...
Me neither.

I am assuming that this is in the context of the kernel project, where there are numerous but manageable number of well known repositories, so Konstantin can probably create a (bare) repository that fetches from all of them into refs/remotes/{linus,next,...}/ remote-tracking branches. With that, running this command

    $ git rev-list --all | git diff-tree --stdin --raw -r
and write a script that parses its output may not be too hard.

I am not sure what Konstantin wanted to say with "the latest branch commit", but if the starting point (i.e. branch) is known, then such a script can read from the output of the above pipeline but instead of starting from "--all", start the traversal from the branch tip.

There may not be any such tree with all those blobs. For the second patch in an N-patch series, there won't be such a tree anywhere other than the author's repository unless the first patch of the series has been applied somewhere well known.

Konstantin Ryabitsev· Apr 30, 2020, 19:52 UTC · re: Eric Wong · lore

Re: Guess the base-commit of a series

On Thu, Apr 30, 2020 at 05:33:02PM +0000, Eric Wong wrote:
Show 5 quoted lines
> > Given a/ b/ filenames and blob index information, is there a 
> > relatively easy way to find the latest branch commit where a patch 
> > series would apply cleanly (i.e. guess the base-commit)?
> 
> Not as far as I know...

Hmm... I'd assumed as much, given the whole "one-way" bit in "one-way hashing." :) However, I'm not very familiar with deep git internals, so wasn't sure if perhaps git kept a mapping index of sorts that could be queries.

There's a reasonable way to do it with the patches sent against the kernel, since they are likely against one of the tags created in the past few weeks. So, we just create a filename/blob index mapping and do:

git show tagname:filename | git hash-object --stdin

If we find a tagname where all the indexes match, then it's *probably* the base-commit (not guaranteed to be correct, obviously, because the patch may depend on changes made to other files in the tree, but hopefully we'll get most folks to start providing base-commit info soon and this guesswork will become increasingly obsolete).

-K

← back to recent threads