Re: [PATCH 4/4] Add git-rewrite-commits
- From
Jeff King <peff@peff.net>
- Date
- Jul 9, 2007, 12:36 UTC
- Message-ID
- <20070709123626.GC23494@sigill.intra.peff.net>
- In-Reply-To
- <Pine.LNX.4.64.0707090011070.4248@racer.site>
On Mon, Jul 09, 2007 at 12:56:04AM +0100, Johannes Schindelin wrote:
Show 8 quoted lines
> But hey, maybe it _is_ time to rethink the whole filter business, and > introduce some kind of regular expression based action language. Something > like > > git rewrite-commits -e '/^author Darl McBribe/skip-commit' \ > -e 'substitute/^author Joahnnes/author Johannes/header' \ > -e 'substitute/poreclain/porcelain/body' \ > -e 'rewrite-commit-names'
This is starting to look an awful lot like sed. Which is good, but I wonder if we can get sed to do the heavy lifting. I have had success with similar systems by writing the data structure out into a canonical format, editing it as text, and then "applying" the result.
Something like:
git rewrite-generate oldbranch |
sed 's/^author Darl McBribe/skip-commit/'
sed 's/^author Joahnnes/author Johannes/' |
git-rewrite-commit-names |
git rewrite-apply newbranchwhere git-rewrite-generate would generate something like git-log output, and git-rewrite-apply would, given a log-ish input, write a new history branch. A nice advantage is that it makes things like this very natural: git rewrite-generate oldbranch >history vi history git rewrite-apply newbranch <history
which allows interactive editing.
Of course, this is:
- possibly inefficient, since rewrite-apply doesn't know what you
changed and what you didn't change; it would have to recalculate
a lot of sha1 hashes.
- doesn't really deal with actual tree rewriting, unless there is some
canonical text format for that, and then we are talking about making
things _really_ inefficientHmm. Which makes me think that maybe 'git-format-patch' is really git-rewrite-generate, and 'git-am' is really git-rewrite-apply (but with some extensions to preserve committer info).
So maybe a bad idea, but I thought I would throw it out there.
-Peff