WebKitTools/Scripts/update-webkit
changeset 0 4f2f89ce4247
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WebKitTools/Scripts/update-webkit	Fri Sep 17 09:02:29 2010 +0300
@@ -0,0 +1,130 @@
+#!/usr/bin/perl -w
+
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+# Copyright (C) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer. 
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution. 
+# 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+#     its contributors may be used to endorse or promote products derived
+#     from this software without specific prior written permission. 
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Update script for WebKit Open Source Project.
+
+use strict;
+use FindBin;
+use lib $FindBin::Bin;
+use File::Basename;
+use File::Path;
+use File::Spec;
+use Getopt::Long;
+use VCSUtils;
+use webkitdirs;
+
+sub runSvnUpdate();
+sub runGitUpdate();
+
+# Handle options
+my $quiet = '';
+my $showHelp;
+
+determineIsChromium();
+
+chdirWebKit();
+
+my $isGit = isGit();
+my $isSVN = isSVN();
+
+my $getOptionsResult = GetOptions(
+    'h|help'  => \$showHelp,
+    'q|quiet' => \$quiet,
+); 
+
+if (!$getOptionsResult || $showHelp) {
+    print STDERR <<__END__;
+Usage: @{[ basename($0) ]} [options]
+  --chromium  also update dependencies of the chromium port
+  -h|--help   show the help message
+  -q|--quiet  pass -q to svn update for quiet updates
+__END__
+    exit 1;
+}
+
+my $startTime = time();
+
+my @svnOptions = ();
+push @svnOptions, '-q' if $quiet;
+
+# Don't prompt when using svn-1.6 or newer.
+push @svnOptions, qw(--accept postpone) if isSVNVersion16OrNewer();
+
+print "Updating OpenSource\n" unless $quiet;
+runSvnUpdate() if $isSVN;
+runGitUpdate() if $isGit;
+
+if (-d "../Internal") {
+    chdir("../Internal");
+    print "Updating Internal\n" unless $quiet;
+    runSvnUpdate() if $isSVN;
+    runGitUpdate() if $isGit;
+} elsif (isChromium()) {
+    # Workaround for https://bugs.webkit.org/show_bug.cgi?id=38926
+    # We should remove the following "if" block when we find a right fix.
+    if ((isCygwin() || isWindows()) && (stat("WebKit/chromium/features.gypi"))[9] >= $startTime) {
+        print "features.gypi has been updated. Cleaning the build directories.\n";
+        rmtree(["WebKit/chromium/Debug", "WebKit/chromium/Release"]);
+    }
+
+    system("perl", "WebKitTools/Scripts/update-webkit-chromium") == 0 or die $!;
+} elsif (isAppleWinWebKit()) {
+    system("perl", "WebKitTools/Scripts/update-webkit-auxiliary-libs") == 0 or die;
+}
+
+setupAppleWinEnv() if isAppleWinWebKit();
+
+exit 0;
+
+sub runSvnUpdate()
+{
+    open UPDATE, "-|", "svn", "update", @svnOptions or die;
+    my @conflictedChangeLogs;
+    while (my $line = <UPDATE>) {
+        print $line;
+        $line =~ m/^C\s+(.+?)[\r\n]*$/;
+        if ($1) {
+          my $filename = normalizePath($1);
+          push @conflictedChangeLogs, $filename if basename($filename) eq "ChangeLog";
+        }
+    }
+    close UPDATE or die;
+
+    if (@conflictedChangeLogs) {
+        print "Attempting to merge conflicted ChangeLogs.\n";
+        my $resolveChangeLogsPath = File::Spec->catfile(dirname($0), "resolve-ChangeLogs");
+        (system($resolveChangeLogsPath, "--no-warnings", @conflictedChangeLogs) == 0)
+            or die "Could not open resolve-ChangeLogs script: $!.\n";
+    }
+}
+
+sub runGitUpdate()
+{
+    system("git", "svn", "rebase") == 0 or die;
+}