Hi,

This patch will prepend the git branch name if you are in one to the 
$baseProductDir if you have the appropriate key/value pair in your git config 
file.

The use case is a developer who is switching between branches and testing but 
doesn't want to clobber his build everytime.  The default is off and you can 
override the global setting on a branch by branch basis.

Comments and review welcome...

Adam
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index 3067d7c..9ad38d4 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,3 +1,12 @@
+2007-11-19  Adam Treat  <[EMAIL PROTECTED]>
+
+        Reviewed by NOBODY (OOPS!).
+
+        * Script changes for usage with git branches.
+
+        * Scripts/VCSUtils.pm:
+        * Scripts/webkitdirs.pm:
+
 2007-11-12  Adam Roben  <[EMAIL PROTECTED]>
 
         * Scripts/update-webkit-localizable-strings: Changed to only scan the
diff --git a/WebKitTools/Scripts/VCSUtils.pm b/WebKitTools/Scripts/VCSUtils.pm
index 3ba40e1..731b3fe 100644
--- a/WebKitTools/Scripts/VCSUtils.pm
+++ b/WebKitTools/Scripts/VCSUtils.pm
@@ -44,6 +44,8 @@ our @EXPORT_OK;
 
 my $isGit;
 my $isSVN;
+my $gitBranch;
+my $isGitBranchBuild;
 
 sub isGitDirectory($)
 {
@@ -59,6 +61,32 @@ sub isGit()
     return $isGit;
 }
 
+sub gitBranch()
+{
+    unless (defined $gitBranch) {
+        chomp($gitBranch = `git symbolic-ref HEAD`);
+        $gitBranch =~ s/refs\/heads\///;
+        $gitBranch =~ s/master//;
+    }
+
+    return $gitBranch;
+}
+
+sub isGitBranchBuild()
+{
+    my $branch = gitBranch();
+    chomp(my $override = `git config branch.$branch.webkitbranchbuild`);
+    return 1 if $override eq "true";
+    return 0 if $override eq "false";
+
+    unless (defined $isGitBranchBuild) {
+        chomp(my $gitBranchBuild = `git config --bool core.webkitbranchbuild`);
+        $isGitBranchBuild = $gitBranchBuild eq "true";
+    }
+
+    return $isGitBranchBuild;
+}
+
 sub isSVNDirectory($)
 {
     my ($dir) = @_;
diff --git a/WebKitTools/Scripts/webkitdirs.pm b/WebKitTools/Scripts/webkitdirs.pm
index a2b1e32..1ba0c27 100644
--- a/WebKitTools/Scripts/webkitdirs.pm
+++ b/WebKitTools/Scripts/webkitdirs.pm
@@ -31,6 +31,7 @@ use warnings;
 use FindBin;
 use File::Basename;
 use POSIX;
+use VCSUtils;
 
 BEGIN {
    use Exporter   ();
@@ -123,6 +124,12 @@ sub determineBaseProductDir
 
     if (!defined($baseProductDir)) {
         $baseProductDir = "$sourceDir/WebKitBuild";
+
+        if (isGit() && isGitBranchBuild()) {
+            my $branch = gitBranch();
+            $baseProductDir = "$baseProductDir/$branch";
+        }
+
         @baseProductDirOption = ("SYMROOT=$baseProductDir", "OBJROOT=$baseProductDir") if (isOSX());
         if (isCygwin()) {
             my $dosBuildPath = `cygpath --windows \"$baseProductDir\"`;
@@ -698,11 +705,17 @@ sub buildQMakeProject(@)
 
     my $dir = baseProductDir();
     if (! -d $dir) {
-        mkdir $dir or die "Failed to create product directory " . $dir;
+        system "mkdir", "-p", "$dir";
+        if (! -d $dir) {
+            die "Failed to create product directory " . $dir;
+        }
     }
     $dir = $dir . "/$config";
     if (! -d $dir) {
-        mkdir $dir or die "Failed to create build directory " . $dir;
+        system "mkdir", "-p", "$dir";
+        if (! -d $dir) {
+            die "Failed to create build directory " . $dir;
+        }
     }
 
     chdir $dir or die "Failed to cd into " . $dir . "\n";
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to