summaryrefslogtreecommitdiff
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.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/tools/patman/get_maintainer.py b/tools/patman/get_maintainer.py
new file mode 100644
index 00000000000..1c8fa726573
--- /dev/null
+++ b/tools/patman/get_maintainer.py
@@ -0,0 +1,64 @@
+# 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 u_boot_pylib import command
+from u_boot_pylib import gitutil
+
+
+def find_get_maintainer(script_file_name):
+ """Try to find where `script_file_name` is.
+
+ It searches in PATH and falls back to a path relative to the top
+ of the current git repository.
+ """
+ get_maintainer = shutil.which(script_file_name)
+ if get_maintainer:
+ return get_maintainer
+
+ git_relative_script = os.path.join(gitutil.get_top_level() or '',
+ script_file_name)
+ if os.path.exists(git_relative_script):
+ return git_relative_script
+
+
+def get_maintainer(script_file_name, fname, verbose=False):
+ """Run `script_file_name` on a file.
+
+ `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:
+ 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.
+ """
+ # Expand `script_file_name` into a file name and its arguments, if
+ # any.
+ get_maintainer = None
+ arguments = None
+ if script_file_name:
+ 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, *arguments, fname)
+ lines = stdout.splitlines()
+ return [x.replace('"', '') for x in lines]