git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* bug report: mutual recursion in the git-subtree shell script
@ 2021-03-13 16:06 Arun Sharma
  2021-03-13 17:02 ` brian m. carlson
  0 siblings, 1 reply; 4+ messages in thread
From: Arun Sharma @ 2021-03-13 16:06 UTC (permalink / raw)
  To: git

[ resending bug report from git-users since there weren't any responses ]

So I'm trying to split out a directory from postgres source code
(which has 52k commits). I was able to split a directory into a
separate subtree (with 1685 commits). All good so far.

Now I do a pull from upstream and want to push the directory to my
subtree. The command fails with:

$ git subtree push --prefix=src/interfaces/libpq libpq master
/usr/lib/git-core/git-subtree: 647: Maximum function recursion depth
(1000) reached

As far as I can see, it seems to be a mutual recursion between

process_split_commit() and check_parents()

If this diagnosis is correct, are there any known workarounds? I've
tried increasing ulimit -s and FUNCNEST=10000, but it didn't fix the
problem.

Can this flow be coded without using recursion? Are there
implementations of git-subtree in another language which doesn't have
this problem?

 -Arun

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: bug report: mutual recursion in the git-subtree shell script
  2021-03-13 16:06 bug report: mutual recursion in the git-subtree shell script Arun Sharma
@ 2021-03-13 17:02 ` brian m. carlson
  2021-03-14 17:31   ` Arun Sharma
  0 siblings, 1 reply; 4+ messages in thread
From: brian m. carlson @ 2021-03-13 17:02 UTC (permalink / raw)
  To: Arun Sharma; +Cc: git

[-- Attachment #1: Type: text/plain, Size: 1392 bytes --]

On 2021-03-13 at 16:06:18, Arun Sharma wrote:
> [ resending bug report from git-users since there weren't any responses ]
> 
> So I'm trying to split out a directory from postgres source code
> (which has 52k commits). I was able to split a directory into a
> separate subtree (with 1685 commits). All good so far.
> 
> Now I do a pull from upstream and want to push the directory to my
> subtree. The command fails with:
> 
> $ git subtree push --prefix=src/interfaces/libpq libpq master
> /usr/lib/git-core/git-subtree: 647: Maximum function recursion depth
> (1000) reached
> 
> As far as I can see, it seems to be a mutual recursion between
> 
> process_split_commit() and check_parents()
> 
> If this diagnosis is correct, are there any known workarounds? I've
> tried increasing ulimit -s and FUNCNEST=10000, but it didn't fix the
> problem.
> 
> Can this flow be coded without using recursion? Are there
> implementations of git-subtree in another language which doesn't have
> this problem?

I don't use git-subtree, but there's some additional information which
would probably be helpful here to someone who does.  What OS are you
using, what version of Git, and what shell is the shell you have as
/bin/sh (or, if you've compiled using a custom shell, the shell you're
using for that)?
-- 
brian m. carlson (he/him or they/them)
Houston, Texas, US

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 263 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: bug report: mutual recursion in the git-subtree shell script
  2021-03-13 17:02 ` brian m. carlson
@ 2021-03-14 17:31   ` Arun Sharma
  2021-03-15  5:19     ` Johannes Schindelin
  0 siblings, 1 reply; 4+ messages in thread
From: Arun Sharma @ 2021-03-14 17:31 UTC (permalink / raw)
  To: brian m. carlson, Arun Sharma, git

On Sat, Mar 13, 2021 at 9:03 AM brian m. carlson
<sandals@crustytoothpaste.net> wrote:
>
> I don't use git-subtree, but there's some additional information which
> would probably be helpful here to someone who does.  What OS are you
> using, what version of Git, and what shell is the shell you have as
> /bin/sh (or, if you've compiled using a custom shell, the shell you're
> using for that)?

Thanks for the hint. I was using ubuntu 20.04.

$ git --version
git version 2.25.1

$ bash --version
GNU bash, version 5.0.16(1)-release (x86_64-pc-linux-gnu)

To repro, you can try to split a week old version of:

https://github.com/postgres/postgres (subtree: src/interfaces/libpq)

It could take several minutes because of the size of the repo.

And then try to pull the latest version and push the merged result
into the smaller subproject.

 -Arun

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: bug report: mutual recursion in the git-subtree shell script
  2021-03-14 17:31   ` Arun Sharma
@ 2021-03-15  5:19     ` Johannes Schindelin
  0 siblings, 0 replies; 4+ messages in thread
From: Johannes Schindelin @ 2021-03-15  5:19 UTC (permalink / raw)
  To: Arun Sharma; +Cc: brian m. carlson, git

Hi,

On Sun, 14 Mar 2021, Arun Sharma wrote:

> On Sat, Mar 13, 2021 at 9:03 AM brian m. carlson
> <sandals@crustytoothpaste.net> wrote:
> >
> > I don't use git-subtree, but there's some additional information which
> > would probably be helpful here to someone who does.  What OS are you
> > using, what version of Git, and what shell is the shell you have as
> > /bin/sh (or, if you've compiled using a custom shell, the shell you're
> > using for that)?
>
> Thanks for the hint. I was using ubuntu 20.04.
>
> $ git --version
> git version 2.25.1
>
> $ bash --version
> GNU bash, version 5.0.16(1)-release (x86_64-pc-linux-gnu)
>
> To repro, you can try to split a week old version of:
>
> https://github.com/postgres/postgres (subtree: src/interfaces/libpq)
>
> It could take several minutes because of the size of the repo.
>
> And then try to pull the latest version and push the merged result
> into the smaller subproject.

Without having had the time to read the bug report in detail (let alone
the time to try to reproduce), I nevertheless got reminded of this PR:
https://github.com/gitgitgadget/git/pull/493

The most recent iteration was sent here:
https://lore.kernel.org/git/pull.493.v2.git.1602021913.gitgitgadget@gmail.com/

This patch series _might_ address the issue (IIRC it talked about removing
a deep recursion). Arun, maybe you want to give it a swirl?

Ciao,
Johannes

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-03-15 14:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-13 16:06 bug report: mutual recursion in the git-subtree shell script Arun Sharma
2021-03-13 17:02 ` brian m. carlson
2021-03-14 17:31   ` Arun Sharma
2021-03-15  5:19     ` Johannes Schindelin

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).