bisect-builds should support WebKit clients other than Safari
authormatthew_hanson@apple.com <matthew_hanson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 31 Oct 2014 00:26:56 +0000 (00:26 +0000)
committermatthew_hanson@apple.com <matthew_hanson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 31 Oct 2014 00:26:56 +0000 (00:26 +0000)
https://bugs.webkit.org/show_bug.cgi?id=138225

This patch adds support for bisecting WebKit nightly builds with clients other than Safari.

The -a / --application optional argument allows the user to specify which application (or application bundle)
should be run against the WebKit nightly builds.

Reviewed by David Kilzer.

* Scripts/bisect-builds:
Swap out $safariPath for the more general $applicationPath
Leave --safari-path as a commandline option for backwards compatibility
(mountAndRunNightly):
Use File::Spec->cat correctly (one directory per argument)
Use open --wait-apps instead of running the target application directly

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

Tools/ChangeLog
Tools/Scripts/bisect-builds

index 254848ebc42eb122671db9d4f847a8eb673e2a30..5df54a7bc063c29753e2531e2dde3cba57b6d4e5 100644 (file)
@@ -1,3 +1,22 @@
+2014-10-30  Matthew Hanson  <matthew_hanson@apple.com>
+
+        bisect-builds should support WebKit clients other than Safari
+        https://bugs.webkit.org/show_bug.cgi?id=138225
+
+        This patch adds support for bisecting WebKit nightly builds with clients other than Safari.
+
+        The -a / --application optional argument allows the user to specify which application (or application bundle)
+        should be run against the WebKit nightly builds.
+
+        Reviewed by David Kilzer.
+
+        * Scripts/bisect-builds:
+        Swap out $safariPath for the more general $applicationPath
+        Leave --safari-path as a commandline option for backwards compatibility
+        (mountAndRunNightly):
+        Use File::Spec->cat correctly (one directory per argument)
+        Use open --wait-apps instead of running the target application directly
+
 2014-10-30  Dana Burkart  <dburkart@apple.com>
 
         <rdar://problem/18821260> Perpare for the mysterious future
index cb0de700913816c7b55c8844c237fd60a9249449..d4170ed9ebd54816195e8fce57c4e70c98464e5c 100755 (executable)
@@ -70,6 +70,7 @@ my %validBranches = map { $_ => 1 } qw(feature-branch trunk);
 my $branch = $Settings::branch;
 my $nightlyDownloadDirectory = $Settings::nightlyDownloadDirectory;
 my $safariPath = $Settings::safariPath;
+my $applicationPath;
 
 my @nightlies;
 
@@ -86,6 +87,7 @@ my $testURL;
 my $result = GetOptions(
     sharedCommandLineOptions(),
     "b|branch=s"             => \$branch,
+    "a|application=s"        => \$applicationPath,
     "d|download-directory=s" => \$nightlyDownloadDirectory,
     "h|help"                 => \$showHelp,
     "l|local!"               => \$localOnly,
@@ -107,26 +109,30 @@ if (!$result || $showHelp || scalar(@ARGV) > 0) {
     print STDERR "Usage: " . basename($0) . " [options] [url]\n";
     print STDERR <<END;
   [-b|--branch name]             name of the nightly build branch (default: trunk)
+  [-a|--application path]        path to executable of application to test (default: /Applications/Safari.app)
+                                 * Not supported on Windows or iOS
   [-d|--download-directory dir]  nightly build download directory (default: ~/Library/Caches/WebKit-Nightlies)
   [-h|--help]                    show this help message
   [-l|--local]                   only use local (already downloaded) nightlies
   [-p|--progression]             searching for a progression, not a regression
   [-r|--revision M[:N]]          specify starting (and optional ending) revisions to search
   [--safari-path path]           path to Safari application bundle (default: /Applications/Safari.app)
+                                 * [DEPRECATED]: The -a/--application argument will override this argument, if both are set.
   [-s|--sanity-check]            verify both starting and ending revisions before bisecting
 END
     print STDERR sharedCommandLineOptionsUsage(brackets => 1, indent => 2, switchWidth => 30);
     exit 1;
 }
 
+$safariPath = glob($safariPath) if $safariPath =~ /^~/;
+$safariPath = safariPathFromSafariBundle($safariPath) if $safariPath =~ m#\.app/*#;
+$applicationPath = $applicationPath ? File::Spec->rel2abs($applicationPath) : $safariPath;
+
 my $nightlyWebSite = "http://nightly.webkit.org";
 my $nightlyBuildsURLBase = $nightlyWebSite . File::Spec->catdir("/builds", $branch, "mac");
 my $nightlyFilesURLBase = $nightlyWebSite . File::Spec->catdir("/files", $branch, "mac");
 
 $nightlyDownloadDirectory = glob($nightlyDownloadDirectory) if $nightlyDownloadDirectory =~ /^~/;
-$safariPath = glob($safariPath) if $safariPath =~ /^~/;
-$safariPath = safariPathFromSafariBundle($safariPath) if $safariPath =~ m#\.app/*#;
-
 $nightlyDownloadDirectory = File::Spec->catdir($nightlyDownloadDirectory, $branch);
 if (! -d $nightlyDownloadDirectory) {
     mkpath($nightlyDownloadDirectory, 0, 0755) || die "Could not create $nightlyDownloadDirectory: $!";
@@ -411,21 +417,30 @@ sub mountAndRunNightly($$$$)
         die "Could not mount $diskImage at $mountPath" if $i > 100;
     }
 
-    my $frameworkPath;
+    my $frameworkPath = File::Spec->catdir($mountPath, "WebKit.app", "Contents");
     if (-d "/Volumes/WebKit/WebKit.app/Contents/Frameworks") {
-        my $osXVersion = join('.', (split(/\./, findMacOSXVersion()))[0..1]);
-        $frameworkPath = "/Volumes/WebKit/WebKit.app/Contents/Frameworks/$osXVersion";
+        my $osxShortVersion = join('.', (split(/\./, findMacOSXVersion()))[0..1]);
+        $frameworkPath = File::Spec->catdir($frameworkPath, "Frameworks", $osxShortVersion);
     } else {
-        $frameworkPath = "/Volumes/WebKit/WebKit.app/Contents/Resources";
+        $frameworkPath = File::Spec->catdir($frameworkPath, "Resources");
     }
 
     $tempFile ||= "";
 
+    # Check for both applications and application bundles.
+    my $isBundle = -d $applicationPath || (-f $applicationPath && -x $applicationPath && $applicationPath =~ m#/Contents/MacOS/#);
+
+    my @args = ($applicationPath);
+    unshift @args, "open", "--wait-apps", "-a" if $isBundle;
+    push @args, $tempFile if $tempFile;
+    push @args, "--args", "-ApplePersistenceIgnoreState", "YES" if $isBundle;
+
+    # FIXME: Add support for passing through additional arguments to the target application
+
     {
         local %ENV = %ENV;
         setupMacWebKitEnvironment($frameworkPath);
-
-        `$safari $tempFile`;
+        system { $args[0] } @args;
     }
 
     `hdiutil detach '$mountPath' 2> $devNull`;