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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.