This is the mail archive of the patchutils-list@sourceware.org mailing list for the patchutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch 1/1] splitdiff: add option to extract the whole tree of subdiffs


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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]