threads / discuss / 9615

splitting large patch files into smaller ones

Subject: splitting large patch files into smaller ones

## tl;dr

3 messages between Aug 22, 2007 and Aug 23, 2007.

replies: 2people: 3as markdown or json

Erez Zadok· Aug 22, 2007, 19:29 UTC · lore

I recently had an occasion to take a rather large git-diff patch, and split it into smaller chunks. This was so I can more easily import the patches into guilt, then reorder, rename, shuffle, and join individual patch snippets into logical patches (i.e., one patch per topic).

I was looking around for a tool that would allow me to split a large patch file into individual snippets and couldn't find one. So I wrote one in perl. It takes a patch file and creates individual small files, one for each combination of a filename listed in the patch, and a patch snippet (starting with an '@@' line). Each '@@' snippet gets an index number and a new filename, prefixed with the appropriate header ("diff ...", ---, and +++ lines) so it's a valid patch file on its own.

Questions:
1. Does anyone know of such a tool, perhaps written in C for better speed?
2. If not, is there any interest in such a tool?  If there's interest, I'd
   be happy to cleanup my perl script and contribute it to
   git/guilt/whatever.

Cheers, Erez.

René Scharfe· Aug 22, 2007, 21:54 UTC · re: Erez Zadok · lore

Re: splitting large patch files into smaller ones

Erez Zadok schrieb:
Show 16 quoted lines
> I recently had an occasion to take a rather large git-diff patch, and split
> it into smaller chunks.  This was so I can more easily import the patches
> into guilt, then reorder, rename, shuffle, and join individual patch
> snippets into logical patches (i.e., one patch per topic).
> 
> I was looking around for a tool that would allow me to split a large patch
> file into individual snippets and couldn't find one.  So I wrote one in
> perl.  It takes a patch file and creates individual small files, one for
> each combination of a filename listed in the patch, and a patch snippet
> (starting with an '@@' line).  Each '@@' snippet gets an index number and a
> new filename, prefixed with the appropriate header ("diff ...", ---, and +++
> lines) so it's a valid patch file on its own.
> 
> Questions:
> 
> 1. Does anyone know of such a tool, perhaps written in C for better speed?

The patchutils collection[1] contains a tool called splitdiff, which does something slightly different[2]. It might be a good starting point, though.

René

[1] http://cyberelk.net/tim/software/patchutils/?page_id=10 [2] http://cyberelk.net/tim/patchutils/man/splitdiff.html

Johannes Schindelin· Aug 23, 2007, 09:43 UTC · re: Erez Zadok · lore

Re: splitting large patch files into smaller ones

Hi,
On Wed, 22 Aug 2007, Erez Zadok wrote:
Show 7 quoted lines
> I was looking around for a tool that would allow me to split a large 
> patch file into individual snippets and couldn't find one.  So I wrote 
> one in perl.  It takes a patch file and creates individual small files, 
> one for each combination of a filename listed in the patch, and a patch 
> snippet (starting with an '@@' line).  Each '@@' snippet gets an index 
> number and a new filename, prefixed with the appropriate header ("diff 
> ...", ---, and +++ lines) so it's a valid patch file on its own.

You can do that with "git add -i" and with "git gui" AFAIK. I even started some code to split hunks in "git gui", but it was pointed out that that code was not complete, and I did not have time to finish it.

Ciao, Dscho

← back to recent threads