WebKitTools:
authorddkilzer <ddkilzer@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 26 Sep 2007 02:18:22 +0000 (02:18 +0000)
committerddkilzer <ddkilzer@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 26 Sep 2007 02:18:22 +0000 (02:18 +0000)
        Reviewed by Adam.

        Make svn-apply and svn-unapply work with git-diff formatted patches.

        * Scripts/svn-apply: Apply a filter to the input if we find a git-diff marker before a patch.
        (gitdiff2svndiff): Added.
        * Scripts/svn-unapply: Ditto.
        (gitdiff2svndiff): Added.

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

WebKitTools/ChangeLog
WebKitTools/Scripts/svn-apply
WebKitTools/Scripts/svn-unapply

index 4419cf4963028a63092325c12f40793fc5f8ed07..680b74bb5ba2a6a9695d87a4eeee93e5d4301cfb 100644 (file)
@@ -1,3 +1,14 @@
+2007-09-25  David Kilzer  <ddkilzer@webkit.org>
+
+        Reviewed by Adam.
+
+        Make svn-apply and svn-unapply work with git-diff formatted patches.
+
+        * Scripts/svn-apply: Apply a filter to the input if we find a git-diff marker before a patch.
+        (gitdiff2svndiff): Added.
+        * Scripts/svn-unapply: Ditto.
+        (gitdiff2svndiff): Added.
+
 2007-09-25  Adam Roben  <aroben@apple.com>
 
         Pull advapi32.lib into WebKitInitializer
index 36fabd07d3c0b48ade22d3a7bcc3c6d7ff3b560f..16a541c191e8b234ee15af41acead2820e9088d8 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 
-# Copyright (C) 2005, 2006 Apple Computer, Inc.  All rights reserved.
+# Copyright (C) 2005, 2006, 2007 Apple Inc.  All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -44,6 +44,7 @@
 #       the patch to today's date using $changeLogTimeZone.
 #   Handles binary files (requires patches made by svn-create-patch).
 #   Handles copied and moved files (requires patches made by svn-create-patch).
+#   Handles git-diff patches (without binary changes) created at the top-level directory
 #
 # Missing features:
 #
@@ -53,6 +54,7 @@
 #   Notice a patch that's being applied at the "wrong level" and make it work anyway.
 #   Do a dry run on the whole patch and don't do anything if part of the patch is
 #       going to fail (probably too strict unless we exclude ChangeLog).
+#   Handle git-diff patches with binary changes
 
 use strict;
 use warnings;
@@ -69,6 +71,7 @@ sub addDirectoriesIfNeeded($);
 sub applyPatch($$;$);
 sub checksum($);
 sub fixChangeLogPatch($);
+sub gitdiff2svndiff($);
 sub handleBinaryChange($$);
 sub isDirectoryEmptyForRemoval($);
 sub patch($);
@@ -99,11 +102,16 @@ my @patches;
 my %versions;
 
 my $copiedFromPath;
+my $filter;
 my $indexPath;
 my $patch;
 while (<>) {
     s/\r//g;
     chomp;
+    if (!defined($indexPath) && m#^diff --git a/#) {
+        $filter = \&gitdiff2svndiff;
+    }
+    $_ = &$filter($_) if $filter;
     if (/^Index: (.+)/) {
         $indexPath = $1;
         if ($patch) {
@@ -256,6 +264,21 @@ sub fixChangeLogPatch($)
     return $newPatch;
 }
 
+sub gitdiff2svndiff($)
+{
+    $_ = shift @_;
+    if (m#^diff --git a/(.+) b/(.+)#) {
+        return "Index: $1";
+    } elsif (m#^index [0-9a-f]{7}\.\.[0-9a-f]{7} [0-9]{6}#) {
+        return "===================================================================";
+    } elsif (m#^--- a/(.+)#) {
+        return "--- $1";
+    } elsif (m#^\+\+\+ b/(.+)#) {
+        return "+++ $1";
+    }
+    return $_;
+}
+
 sub handleBinaryChange($$)
 {
     my ($fullPath, $contents) = @_;
index e99aa210eb480a30eee39f6f30f14a481f03610c..18db52066669ed38c14f8a2cb6e19725a64eb52b 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w
 
-# Copyright (C) 2005, 2006 Apple Computer, Inc.  All rights reserved.
+# Copyright (C) 2005, 2006, 2007 Apple Inc.  All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions
@@ -41,6 +41,7 @@
 #       the patch before it is applied (svn-apply sets it when applying a patch).
 #   Handles binary files (requires patches made by svn-create-patch).
 #   Handles copied and moved files (requires patches made by svn-create-patch).
+#   Handles git-diff patches (without binary changes) created at the top-level directory
 #
 # Missing features:
 #
@@ -51,6 +52,7 @@
 #   Notice a patch that's being unapplied at the "wrong level" and make it work anyway.
 #   Do a dry run on the whole patch and don't do anything if part of the patch is
 #       going to fail (probably too strict unless we exclude ChangeLog).
+#   Handle git-diff patches with binary changes
 
 use strict;
 use warnings;
@@ -65,6 +67,7 @@ use Getopt::Long;
 
 sub checksum($);
 sub fixChangeLogPatch($);
+sub gitdiff2svndiff($);
 sub patch($);
 sub revertDirectories();
 sub svnStatus($);
@@ -81,11 +84,16 @@ my @copiedFiles;
 my %directoriesToCheck;
 
 my $copiedFromPath;
+my $filter;
 my $indexPath;
 my $patch;
 while (<>) {
     s/\r//g;
     chomp;
+    if (!defined($indexPath) && m#^diff --git a/#) {
+        $filter = \&gitdiff2svndiff;
+    }
+    $_ = &$filter($_) if $filter;
     if (/^Index: (.*)/) {
         $indexPath = $1;
         if ($patch) {
@@ -190,6 +198,21 @@ sub fixChangeLogPatch($)
     return $newPatch;
 }
 
+sub gitdiff2svndiff($)
+{
+    $_ = shift @_;
+    if (m#^diff --git a/(.+) b/(.+)#) {
+        return "Index: $1";
+    } elsif (m#^index [0-9a-f]{7}\.\.[0-9a-f]{7} [0-9]{6}#) {
+        return "===================================================================";
+    } elsif (m#^--- a/(.+)#) {
+        return "--- $1";
+    } elsif (m#^\+\+\+ b/(.+)#) {
+        return "+++ $1";
+    }
+    return $_;
+}
+
 sub patch($)
 {
     my ($patch) = @_;