Move the guts of determineCurrentSVNRevision to VCSUtils as svnRevisionForDirectory,
[WebKit-https.git] / WebKitTools / Scripts / VCSUtils.pm
index 3ba40e1..5e92821 100644 (file)
@@ -29,6 +29,7 @@
 use strict;
 use warnings;
 use File::Spec;
+use webkitdirs;
 
 BEGIN {
    use Exporter   ();
@@ -44,6 +45,8 @@ our @EXPORT_OK;
 
 my $isGit;
 my $isSVN;
+my $gitBranch;
+my $isGitBranchBuild;
 
 sub isGitDirectory($)
 {
@@ -59,6 +62,33 @@ sub isGit()
     return $isGit;
 }
 
+sub gitBranch()
+{
+    unless (defined $gitBranch) {
+        chomp($gitBranch = `git symbolic-ref -q HEAD`);
+        $gitBranch = "" if exitStatus($?);
+        $gitBranch =~ s#^refs/heads/##;
+        $gitBranch = "" if $gitBranch eq "master";
+    }
+
+    return $gitBranch;
+}
+
+sub isGitBranchBuild()
+{
+    my $branch = gitBranch();
+    chomp(my $override = `git config --bool 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) = @_;
@@ -74,6 +104,22 @@ sub isSVN()
     return $isSVN;
 }
 
+sub svnRevisionForDirectory($)
+{
+    my ($dir) = @_;
+    my $revision;
+
+    if (isSVNDirectory($dir)) {
+        my $svnInfo = `LC_ALL=C svn info $dir | grep Revision:`;
+        ($revision) = ($svnInfo =~ m/Revision: (\d+).*/g);
+    } elsif (isGitDirectory($dir)) {
+        my $gitLog = `cd $dir && LC_ALL=C git log --grep='git-svn-id: ' -n 1 | grep git-svn-id:`;
+        ($revision) = ($gitLog =~ m/ +git-svn-id: .+@(\d+) /g);
+    }
+    die "Unable to determine current SVN revision in $dir" unless (defined $revision);
+    return $revision;
+}
+
 my $gitRoot;
 sub makeFilePathRelative($)
 {
@@ -81,11 +127,9 @@ sub makeFilePathRelative($)
     return $path unless isGit();
 
     unless (defined $gitRoot) {
-        chomp($gitRoot = `git rev-parse --git-dir`);
-        $gitRoot =~ s/\.git$//;
+        chomp($gitRoot = `git rev-parse --show-cdup`);
     }
-    my $result = File::Spec->abs2rel(File::Spec->rel2abs($path, $gitRoot));
-    return $result;
+    return $gitRoot . $path;
 }
 
 1;