From: Ben Knoble <ben.knoble@gmail.com>
To: Ian Jackson <ijackson@chiark.greenend.org.uk>
Cc: Colin Stagner <ask+git@howdoi.land>,
git@vger.kernel.org, Christian Heusel <christian@heusel.eu>,
george@mail.dietrich.pub, Christian Hesse <list@eworm.de>,
Phillip Wood <phillip.wood@dunelm.org.uk>,
Junio C Hamano <gitster@pobox.com>,
"brian m. carlson" <sandals@crustytoothpaste.net>
Subject: Re: [PATCH v2 0/3] contrib/subtree: reduce recursion during split
Date: Sun, 19 Apr 2026 21:09:08 -0400 [thread overview]
Message-ID: <14C41D80-ED09-43CF-9C7C-9862BBCEEB33@gmail.com> (raw)
In-Reply-To: <27109.13129.424068.382997@chiark.greenend.org.uk>
I didn’t see bmc on cc, so added. I think they have some thoughts on how to organize Rust code with Git. Might be relevant, even though this is contrib/
>
> Le 19 avr. 2026 à 15:56, Ian Jackson <ijackson@chiark.greenend.org.uk> a écrit :
>
> Colin Stagner writes ("Re: [PATCH v2 0/3] contrib/subtree: reduce recursion during split"):
>> That said, a native Rust version of
>> git-subtree-split would be much faster and easier to read.
>
> I prototyped something along the lines of the algorithm I described
> earlier. It is very fast, as expected.
>
> The output looks plausible when I look at it by eye, but there are
> some things that I need to look at more closely. I should think some
> more about invariants and tests.
>
> Overall, I think this is worth pursuing.
>
>
> Algorithm
>
> I don't think it is going to be possible to precisely reproduce the
> output of the existing git-subtree split. Indeed the existing
> git-subtree split is a bit cavalier with metadata (eg `committer` [1])
> which probably ought to be changed in any case.
>
> Even so, it should be possible to avoid foolishly rewriting the whole
> history of the subtree, since we can stop at all the merges made by
> "git-subtree merge", which are easily detectable by the extra metadata
> keyword fields in the commit message.
>
>
> Packaging
>
> Before I go much further, how do we think this would best be packaged?
> Currently my experiment is a standalone Rust package using
> dependencies ("crates" as Rust calls thme) from current Debian stable
> ("trixie"). [2] I haven't tried it with recent deps from upstream
> crates.io. There is not currently any entanglement with git.git; the
> repository is accessed using libgit2 via Rust's git2 wrapper (and there
> are no tests yet).
>
> I'm tempted to continue this way and rewrite the other git-subtree
> subcommands too, since they don't look that hard. Using git.git
> offers some packaging and testing continuity but the dependency
> situation might become annoying.
>
> It will probably be possible to make a Rust package which will build
> with both recent upstream dependencies, and (say) Debian stable.
> Going back much more than that is going to be awkward.
>
> I see there's already some Rust in git.git:contrib/libgit-rs but that
> looks like a poc.
>
> Regards,
> Ian.
>
> [1] I don't think it's justifiable to convert a commit from the
> downstream, into the subtree split version, and retain the original
> committer line. That can violate many people's expectations.
> Here's an example from another context:
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1124226
>
> That means we need to use a dummy committer in split commits, and put
> the original committer into the message. We should name the original
> downstream commit in the commit message too.
>
> The dummy committer needs to be a fixed string: changing it would
> cause history proliferation (maybe even leading to unnecessary merge
> conflicts).
>
> [2] I wrote a blog post
>
> How to use Rust on Debian (and Ubuntu, etc.)
> https://diziet.dreamwidth.org/18122.html
>
> which explains why this is a good approach.
>
> --
> Ian Jackson <ijackson@chiark.greenend.org.uk> These opinions are my own.
>
> Pronouns: they/he. If I emailed you from @fyvzl.net or @evade.org.uk,
> that is a private address which bypasses my fierce spamfilter.
>
next prev parent reply other threads:[~2026-04-20 1:09 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-15 20:17 [PATCH 0/3] contrib/subtree: reduce recursion during split Colin Stagner
2026-02-15 20:17 ` [PATCH 1/3] contrib/subtree: reduce function side-effects Colin Stagner
2026-02-15 20:17 ` [PATCH 2/3] contrib/subtree: functionalize split traversal Colin Stagner
2026-02-15 20:17 ` [PATCH 3/3] contrib/subtree: reduce recursion during split Colin Stagner
2026-03-05 23:55 ` [PATCH v2 0/3] " Colin Stagner
2026-03-05 23:55 ` [PATCH v2 1/3] contrib/subtree: reduce function side-effects Colin Stagner
2026-03-05 23:55 ` [PATCH v2 2/3] contrib/subtree: functionalize split traversal Colin Stagner
2026-03-05 23:55 ` [PATCH v2 3/3] contrib/subtree: reduce recursion during split Colin Stagner
2026-03-13 22:51 ` [PATCH v2 0/3] " Junio C Hamano
2026-03-13 23:06 ` Junio C Hamano
2026-04-15 17:58 ` Junio C Hamano
2026-04-15 21:39 ` Ben Knoble
2026-04-16 13:25 ` Ian Jackson
2026-04-16 19:34 ` Junio C Hamano
2026-04-17 4:50 ` Colin Stagner
2026-04-19 19:55 ` Ian Jackson
2026-04-20 1:09 ` Ben Knoble [this message]
2026-04-20 1:50 ` Junio C Hamano
2026-04-20 9:57 ` Ian Jackson
2026-04-21 5:07 ` Colin Stagner
2026-04-22 9:43 ` Johannes Schindelin
2026-04-22 17:12 ` git-subtree rewrite Ian Jackson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=14C41D80-ED09-43CF-9C7C-9862BBCEEB33@gmail.com \
--to=ben.knoble@gmail.com \
--cc=ask+git@howdoi.land \
--cc=christian@heusel.eu \
--cc=george@mail.dietrich.pub \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=ijackson@chiark.greenend.org.uk \
--cc=list@eworm.de \
--cc=phillip.wood@dunelm.org.uk \
--cc=sandals@crustytoothpaste.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox