From: Jeff King Date: Mon, 09 Jul 2007 12:36:27 GMT Subject: Re: [PATCH 4/4] Add git-rewrite-commits Message-ID: <20070709123626.GC23494@sigill.intra.peff.net> In-Reply-To: On Mon, Jul 09, 2007 at 12:56:04AM +0100, Johannes Schindelin wrote: > 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 newbranch where 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