11a459660SWolfgang Denk# SPDX-License-Identifier: GPL-2.0+
2*83d290c5STom Rini# Copyright (c) 2012 The Chromium OS Authors.
321a19d70SDoug Anderson#
421a19d70SDoug Anderson
521a19d70SDoug Andersonimport command
621a19d70SDoug Andersonimport gitutil
721a19d70SDoug Andersonimport os
821a19d70SDoug Anderson
921a19d70SDoug Andersondef FindGetMaintainer():
1021a19d70SDoug Anderson    """Look for the get_maintainer.pl script.
1121a19d70SDoug Anderson
1221a19d70SDoug Anderson    Returns:
1321a19d70SDoug Anderson        If the script is found we'll return a path to it; else None.
1421a19d70SDoug Anderson    """
1521a19d70SDoug Anderson    try_list = [
1621a19d70SDoug Anderson        os.path.join(gitutil.GetTopLevel(), 'scripts'),
1721a19d70SDoug Anderson        ]
1821a19d70SDoug Anderson    # Look in the list
1921a19d70SDoug Anderson    for path in try_list:
2021a19d70SDoug Anderson        fname = os.path.join(path, 'get_maintainer.pl')
2121a19d70SDoug Anderson        if os.path.isfile(fname):
2221a19d70SDoug Anderson            return fname
2321a19d70SDoug Anderson
2421a19d70SDoug Anderson    return None
2521a19d70SDoug Anderson
2621a19d70SDoug Andersondef GetMaintainer(fname, verbose=False):
2721a19d70SDoug Anderson    """Run get_maintainer.pl on a file if we find it.
2821a19d70SDoug Anderson
2921a19d70SDoug Anderson    We look for get_maintainer.pl in the 'scripts' directory at the top of
3021a19d70SDoug Anderson    git.  If we find it we'll run it.  If we don't find get_maintainer.pl
3121a19d70SDoug Anderson    then we fail silently.
3221a19d70SDoug Anderson
3321a19d70SDoug Anderson    Args:
3421a19d70SDoug Anderson        fname: Path to the patch file to run get_maintainer.pl on.
3521a19d70SDoug Anderson
3621a19d70SDoug Anderson    Returns:
3721a19d70SDoug Anderson        A list of email addresses to CC to.
3821a19d70SDoug Anderson    """
3921a19d70SDoug Anderson    get_maintainer = FindGetMaintainer()
4021a19d70SDoug Anderson    if not get_maintainer:
4121a19d70SDoug Anderson        if verbose:
42a920a17bSPaul Burton            print("WARNING: Couldn't find get_maintainer.pl")
4321a19d70SDoug Anderson        return []
4421a19d70SDoug Anderson
4521a19d70SDoug Anderson    stdout = command.Output(get_maintainer, '--norolestats', fname)
46d1ccaa47SStefan Brüns    lines = stdout.splitlines()
47d1ccaa47SStefan Brüns    return [ x.replace('"', '') for x in lines ]
48