Use whatever git or hg say is the root of the current repository as
the kernel tree root, falling back to ./ if no VCS is used.
This makes it possible to call get_maintainer.pl from anywhere in the
kernel tree.

Signed-off-by: Frederik Völkel <frederik.voel...@fau.de>
Signed-off-by: Lukas Braun <lukas.br...@fau.de>
---
 scripts/get_maintainer.pl | 53 +++++++++++++++++++++++++++--------------------
 1 file changed, 31 insertions(+), 22 deletions(-)

diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index cab641a..4e16dc6 100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
@@ -17,7 +17,6 @@ my $V = '0.26';
 
 use Getopt::Long qw(:config no_auto_abbrev);
 
-my $lk_path = "./";
 my $email = 1;
 my $email_usename = 1;
 my $email_maintainer = 1;
@@ -93,11 +92,33 @@ my $rfc822_char = '[\\000-\\377]';
 
 # VCS command support: class-like functions and strings
 
+my $vcs_is_git = 0;
+sub git_get_root {
+       my $output = `git rev-parse --show-toplevel`;
+       chomp $output;
+       $vcs_is_git = !$?;
+       return $output if $vcs_is_git;
+}
+
+my $vcs_is_hg = 0;
+sub hg_get_root {
+       my $output = `hg root`;
+       chomp $output;
+       $vcs_is_hg = !$?;
+       return $output if $vcs_is_hg;
+}
+
+sub get_kernel_root {
+       return git_get_root() || hg_get_root() || ".";
+}
+
+my $lk_path = get_kernel_root() . "/";
+
 my %VCS_cmds;
 
 my %VCS_cmds_git = (
     "execute_cmd" => \&git_execute_cmd,
-    "available" => '(which("git") ne "") && (-e ".git")',
+    "available" => $vcs_is_git,
     "find_signers_cmd" =>
        "git log --no-color --follow --since=\$email_git_since " .
            '--numstat --no-merges ' .
@@ -135,7 +156,7 @@ my %VCS_cmds_git = (
 
 my %VCS_cmds_hg = (
     "execute_cmd" => \&hg_execute_cmd,
-    "available" => '(which("hg") ne "") && (-d ".hg")',
+    "available" => $vcs_is_hg,
     "find_signers_cmd" =>
        "hg log --date=\$email_hg_since " .
            "--template='HgCommit: {node}\\n" .
@@ -854,9 +875,6 @@ EOT
 sub top_of_kernel_tree {
     my ($lk_path) = @_;
 
-    if ($lk_path ne "" && substr($lk_path,length($lk_path)-1,1) ne "/") {
-       $lk_path .= "/";
-    }
     if (   (-f "${lk_path}COPYING")
        && (-f "${lk_path}CREDITS")
        && (-f "${lk_path}Kbuild")
@@ -1464,9 +1482,9 @@ sub vcs_blame {
 my $printed_novcs = 0;
 sub vcs_exists {
     %VCS_cmds = %VCS_cmds_git;
-    return 1 if eval $VCS_cmds{"available"};
+    return 1 if $vcs_is_git;
     %VCS_cmds = %VCS_cmds_hg;
-    return 2 if eval $VCS_cmds{"available"};
+    return 2 if $vcs_is_hg;
     %VCS_cmds = ();
     if (!$printed_novcs) {
        warn("$P: No supported VCS found.  Add --nogit to options?\n");
@@ -1478,15 +1496,6 @@ sub vcs_exists {
     return 0;
 }
 
-sub vcs_is_git {
-    vcs_exists();
-    return $vcs_used == 1;
-}
-
-sub vcs_is_hg {
-    return $vcs_used == 2;
-}
-
 sub interactive_get_maintainers {
     my ($list_ref) = @_;
     my @list = @$list_ref;
@@ -1553,7 +1562,7 @@ sub interactive_get_maintainers {
            }
        }
        my $date_ref = \$email_git_since;
-       $date_ref = \$email_hg_since if (vcs_is_hg());
+       $date_ref = \$email_hg_since if ($vcs_is_hg);
        if ($print_options) {
            $print_options = 0;
            if (vcs_exists()) {
@@ -1695,9 +1704,9 @@ EOT
                    $rerun = 1;
                }
            } elsif ($sel eq "d") {
-               if (vcs_is_git()) {
+               if ($vcs_is_git) {
                    $email_git_since = $str;
-               } elsif (vcs_is_hg()) {
+               } elsif ($vcs_is_hg) {
                    $email_hg_since = $str;
                }
                $rerun = 1;
@@ -2010,7 +2019,7 @@ sub vcs_file_blame {
     $total_lines = @all_commits;
 
     if ($email_git_blame_signatures) {
-       if (vcs_is_hg()) {
+       if ($vcs_is_hg) {
            my $commit_count;
            my $commit_authors_ref;
            my $commit_signers_ref;
@@ -2053,7 +2062,7 @@ sub vcs_file_blame {
     if ($from_filename) {
        if ($output_rolestats) {
            my @blame_signers;
-           if (vcs_is_hg()) {{         # Double brace for last exit
+           if ($vcs_is_hg) {{          # Double brace for last exit
                my $commit_count;
                my @commit_signers = ();
                @commits = uniq(@commits);
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to