This is the mail archive of the
patchutils-list@sourceware.org
mailing list for the patchutils project.
[patch 1/1] splitdiff: add option to extract the whole tree of subdiffs
- From: Wolfram Sang <w dot sang at pengutronix dot de>
- To: patchutils-list at sourceware dot org
- Cc: Wolfram Sang <w dot sang at pengutronix dot de>
- Date: Mon, 02 Feb 2009 23:12:18 +0100
- Subject: [patch 1/1] splitdiff: add option to extract the whole tree of subdiffs
- References: <20090202221217.790916412@pengutronix.de>
Sometimes I get a huge patch blob (a couple of MB) which touches several files
all over a base directory (in this case the linux kernel tree). This new option
to splitdiff creates the path for every subdiff inside the blob and extracts it
to there. So, in the end, you get a directory tree you are familiar with and
can easily find the small diffs which are of interest to you. Also, useful for
grepping in certain parts of the tree.
Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
---
splitdiff.in | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
Index: splitdiff.in
===================================================================
--- splitdiff.in.orig
+++ splitdiff.in
@@ -18,7 +18,10 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
use Getopt::Std;
-getopts('p:v-:ad', \%opts);
+use File::Basename;
+use File::Path;
+
+getopts('p:v-:adt', \%opts);
if ($opts{'-'} && $opts{'-'} eq 'version') {
print "splitdiff - patchutils version @VERSION@\n";
exit 0;
@@ -29,6 +32,7 @@ if ($opts{'-'} && $opts{'-'} eq 'help')
print " -a split out every single file-level patch\n";
print " -p N pathname components to ignore\n";
print " -d use output filenames like a_b.c for a/b.c\n";
+ print " -t create the whole tree of subdiffs (selects -a, drops -d)";
exit 0;
}
@@ -44,6 +48,10 @@ sub process {
if ($opts{d}) {
$out = $_[2];
$out =~ s,/,_,g;
+ } elsif ($opts{t}) {
+ my (undef, $dir) = fileparse($_[2]);
+ mkpath $dir;
+ $out = "$_[2].diff";
} else {
$out = sprintf ("%s.part%03d", $ARGV[0], $part);
}
@@ -66,6 +74,12 @@ if($#ARGV != 0) {
$getlist = 'lsdiff -n ';
$getlist .= '--strip='.$opts{p}.' ' if ($opts{p});
$getlist .= $ARGV[0]; # Yuck. How do you do this properly in perl?
+
+if ($opts{t}) {
+ $opts{a} = 1;
+ undef $opts{d};
+}
+
open(LIST, '-|', $getlist) or die "Can't run lsdiff";
@list = <LIST>;
close LIST;