aboutsummaryrefslogtreecommitdiff
path: root/tools/patman/get_maintainer.py
diff options
context:
space:
mode:
Diffstat (limited to 'tools/patman/get_maintainer.py')
-rw-r--r--tools/patman/get_maintainer.py57
1 files changed, 35 insertions, 22 deletions
diff --git a/tools/patman/get_maintainer.py b/tools/patman/get_maintainer.py
index e1d15ff6ab..f7011be1e4 100644
--- a/tools/patman/get_maintainer.py
+++ b/tools/patman/get_maintainer.py
@@ -1,48 +1,61 @@
# SPDX-License-Identifier: GPL-2.0+
# Copyright (c) 2012 The Chromium OS Authors.
+# Copyright (c) 2022 Maxim Cournoyer <maxim.cournoyer@savoirfairelinux.com>
#
import os
+import shlex
+import shutil
from patman import command
+from patman import gitutil
-def find_get_maintainer(try_list):
- """Look for the get_maintainer.pl script.
- Args:
- try_list: List of directories to try for the get_maintainer.pl script
+def find_get_maintainer(script_file_name):
+ """Try to find where `script_file_name` is.
- Returns:
- If the script is found we'll return a path to it; else None.
+ It searches in PATH and falls back to a path relative to the top
+ of the current git repository.
"""
- # Look in the list
- for path in try_list:
- fname = os.path.join(path, 'get_maintainer.pl')
- if os.path.isfile(fname):
- return fname
+ get_maintainer = shutil.which(script_file_name)
+ if get_maintainer:
+ return get_maintainer
+
+ git_relative_script = os.path.join(gitutil.get_top_level(),
+ script_file_name)
+ if os.path.exists(git_relative_script):
+ return git_relative_script
- return None
-def get_maintainer(dir_list, fname, verbose=False):
- """Run get_maintainer.pl on a file if we find it.
+def get_maintainer(script_file_name, fname, verbose=False):
+ """Run `script_file_name` on a file.
- We look for get_maintainer.pl in the 'scripts' directory at the top of
- git. If we find it we'll run it. If we don't find get_maintainer.pl
- then we fail silently.
+ `script_file_name` should be a get_maintainer.pl-like script that
+ takes a patch file name as an input and return the email addresses
+ of the associated maintainers to standard output, one per line.
+
+ If `script_file_name` does not exist we fail silently.
Args:
- dir_list: List of directories to try for the get_maintainer.pl script
- fname: Path to the patch file to run get_maintainer.pl on.
+ script_file_name: The file name of the get_maintainer.pl script
+ (or compatible).
+ fname: File name of the patch to process with get_maintainer.pl.
Returns:
A list of email addresses to CC to.
"""
- get_maintainer = find_get_maintainer(dir_list)
+ # Expand `script_file_name` into a file name and its arguments, if
+ # any.
+ cmd_args = shlex.split(script_file_name)
+ file_name = cmd_args[0]
+ arguments = cmd_args[1:]
+
+ get_maintainer = find_get_maintainer(file_name)
if not get_maintainer:
if verbose:
print("WARNING: Couldn't find get_maintainer.pl")
return []
- stdout = command.output(get_maintainer, '--norolestats', fname)
+ stdout = command.output(get_maintainer, *arguments, fname)
lines = stdout.splitlines()
- return [ x.replace('"', '') for x in lines ]
+ return [x.replace('"', '') for x in lines]