2009-07-15 Joseph Pecoraro <joepeck02@gmail.com>
authorbfulgham@webkit.org <bfulgham@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Jul 2009 20:11:01 +0000 (20:11 +0000)
committerbfulgham@webkit.org <bfulgham@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Jul 2009 20:11:01 +0000 (20:11 +0000)
        Reviewed by David Kilzer.

        bugzilla-tool/svn-apply can't handle patches made from a non-root directory
        https://bugs.webkit.org/show_bug.cgi?id=26999

        * Scripts/svn-create-patch:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@45939 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKitTools/ChangeLog
WebKitTools/Scripts/svn-create-patch

index f450c70..68787a7 100644 (file)
@@ -1,3 +1,12 @@
+2009-07-15  Joseph Pecoraro  <joepeck02@gmail.com>
+
+        Reviewed by David Kilzer.
+
+        bugzilla-tool/svn-apply can't handle patches made from a non-root directory
+        https://bugs.webkit.org/show_bug.cgi?id=26999
+
+        * Scripts/svn-create-patch:
+
 2009-07-15  Shinichiro Hamaji  <hamaji@chromium.org>
 
         Reviewed by David Levin.
index 2915e65..f7d1e81 100755 (executable)
@@ -44,7 +44,6 @@ use strict;
 use warnings;
 
 use Config;
-use Cwd;
 use File::Basename;
 use File::Spec;
 use File::stat;
@@ -55,12 +54,14 @@ use Time::gmtime;
 
 sub binarycmp($$);
 sub canonicalizePath($);
+sub chdirAndGetDifference($);
+sub determineSvnRoot();
 sub findBaseUrl($);
 sub findMimeType($;$);
 sub findModificationType($);
 sub findSourceFileAndRevision($);
 sub fixChangeLogPatch($);
-sub generateDiff($);
+sub generateDiff($$);
 sub generateFileList($\%);
 sub isBinaryMimeType($);
 sub manufacturePatchForAdditionWithHistory($);
@@ -94,9 +95,12 @@ for my $path (keys %paths) {
     generateFileList($path, %diffFiles);
 }
 
+my $svnRoot = determineSvnRoot();
+my $prefix = chdirAndGetDifference($svnRoot);
+
 # Generate the diffs, in a order chosen for easy reviewing.
 for my $path (sort patchpathcmp values %diffFiles) {
-    generateDiff($path);
+    generateDiff($path, $prefix);
 }
 
 exit 0;
@@ -252,10 +256,10 @@ sub fixChangeLogPatch($)
     return $newPatch;
 }
 
-sub generateDiff($)
+sub generateDiff($$)
 {
-    my ($fileData) = @_;
-    my $file = $fileData->{path};
+    my ($fileData, $prefix) = @_;
+    my $file = File::Spec->catdir($prefix, $fileData->{path});
     my $patch;
     if ($fileData->{modificationType} eq "additionWithHistory") {
         manufacturePatchForAdditionWithHistory($fileData);
@@ -447,3 +451,29 @@ sub testfilecmp($$)
     my ($fileDataA, $fileDataB) = @_;
     return $fileDataA->{isTestFile} <=> $fileDataB->{isTestFile};
 }
+
+sub chdirAndGetDifference($)
+{
+    my ($newdir) = @_;
+    my $before = File::Spec->rel2abs( File::Spec->curdir() );
+    chdir $newdir;
+    my $after = File::Spec->rel2abs( File::Spec->curdir() );
+    return File::Spec->abs2rel($before, $after);
+}
+
+sub determineSvnRoot()
+{
+    my $last = '';
+    my $path = '.';
+    my $parent = '../';
+    my $devnull = File::Spec->devnull();
+    my $exitCode;
+    while (1) {
+        $exitCode = system("svn info $path 2> $devnull > $devnull")/256;
+        last if $exitCode;
+        $last = $path;
+        $path = $parent . $path;
+    }
+
+    return File::Spec->rel2abs($last);
+}