I guess this script won't be merged upstream, but I think it could be useful 
for someone else.

Description borrowed from the header:
---------------
!# This script generates the git send-email automatically
!# by looking at the output generated by scripts/get_maintainer.pl
!#
!# You can pass as many patch files as needed.
!# Usage: python send-mail.py [option] <patch1> <patch2> ...

Example of use:
Passed as arguments one patch file and -v (verbose mode).
---------------
raphaelsc@debian:~/kernel/linux$ scripts/gen_sendmail.py -v 
0001-kernel-pid.c-Improve-flow-of-a-loop-inside-alloc_pid.patch
git send-email --from "Raphael S. Carvalho <raphael.sc...@gmail.com>" --to 
"Eric W. Biederman <ebied...@xmission.com>" --to "Andrew Morton 
<a...@linux-foundation.org>" --to "Serge E. Hallyn <se...@hallyn.com>" --to 
"Serge Hallyn <serge.hal...@canonical.com>" --to "David S. Miller 
<da...@davemloft.net>" --cc "linux-kernel@vger.kernel.org" 
0001-kernel-pid.c-Improve-flow-of-a-loop-inside-alloc_pid.patch

* Statistics: Maintainer(s): 5, List(s): 1
---------------

Any bug reports or improvements are welcome!

Signed-off-by: Raphael S. Carvalho <raphael.sc...@gmail.com>
---
 scripts/gen_sendmail.py |  165 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 165 insertions(+), 0 deletions(-)
 create mode 100755 scripts/gen_sendmail.py

diff --git a/scripts/gen_sendmail.py b/scripts/gen_sendmail.py
new file mode 100755
index 0000000..921a8cc
--- /dev/null
+++ b/scripts/gen_sendmail.py
@@ -0,0 +1,165 @@
+#! /usr/bin/env python
+#
+# Generate git send-email arguments (gen_sendmail.py)
+# (c) 2013, Raphael S.Carvalho <raphael.sc...@gmail.com>
+#
+# This script generates the git send-email automatically
+# by looking at the output generated by scripts/get_maintainer.pl
+#
+# You can pass as many patch files as needed.
+# Usage: python send-mail.py [options] <patch1> <patch2> ...
+#
+# Licensed under the terms of the GNU GPL License version 2
+
+import commands
+import sys
+import StringIO
+import getopt
+
+# Default definitions
+GIT_SENDMAIL = "git send-email"
+SCRIPT = "scripts/get_maintainer.pl"
+
+
+def get_user_gitconfig(git_config):
+       get_name = "git config user.name"
+       get_email = "git config user.email"
+
+       (stat, name) = commands.getstatusoutput(get_name)
+       if (stat != 0):
+               return (stat, get_name)
+
+       (stat, email) = commands.getstatusoutput(get_email)
+       if (stat != 0):
+               return (stat, get_email)
+
+       # Setup git config structure!
+       git_config['user_name'] = name
+       git_config['user_email'] = email
+
+       return (0, None)
+
+
+# Try to execute: get_maintainer.pl <patch>
+def exec_get_maintainers(patch_name):
+       command = SCRIPT + ' ' + patch_name
+       (stat, output) = commands.getstatusoutput(command)
+       return (stat, output)
+
+
+def find_maintainer(maintainers, email):
+       for m in maintainers:
+               if m['email'] == email:
+                       return True
+       return False
+
+
+# Get file and/or mail from each line,
+# and build a simple maintainers database.
+def build_list(buf):
+       maintainers = []
+
+       for line in iter(buf.readline, ""):
+               name = ""
+               email = ""
+
+               pos = line.find("<")
+               if pos != -1:
+                       name = line[: pos-1].replace('"', "")
+                       pos2 = line.find("(")
+                       email = line[pos : pos2-1]
+               else:
+                       pos = line.find("(")
+                       email = line[: pos-1]
+
+               # If not find_maintainer, then add to the list.
+               if not find_maintainer(maintainers, email):
+                       maintainer = {'name': name, 'email': email}
+                       maintainers.append(maintainer)
+
+       return maintainers
+
+
+# Generates command from the built database.
+def generate_gitmail_cmd(maintainers, git_config, args):
+       mnt_count = list_count = 0
+
+       print '%s --from "%s <%s>"' % \
+               (GIT_SENDMAIL, \
+               git_config['user_name'], git_config['user_email']),
+
+       for m in maintainers:
+               if m['name'] != "":
+                       print '--to "%s %s"' % (m['name'], m['email']),
+                       mnt_count += 1
+               else:
+                       print '--cc "%s"' % m['email'],
+                       list_count += 1
+       for arg in args:
+               print arg,
+
+       return (mnt_count, list_count)
+
+
+def usage(program):
+       print 'Usage: %s [options] <patch(es) file>\n' \
+               '-v --verbose: Print verbose messages.\n' \
+               '-h --help: Print this information.\n\n' \
+               'This script must be installed in the directory' \
+               ' scripts of linux tree!' % program,
+       sys.exit(2)
+
+
+def main(argc, argv):
+       verbose = False
+
+       try:
+               opts, args = getopt.getopt(argv[1:], 'hv', ['help', 'verbose'])
+               if not opts and argc < 2:
+                       usage(argv[0])
+       except getopt.GetoptError, e:
+               print e
+               usage(argv[0])
+
+       arg_count = 1 # program name: argv[0]
+       for opt, arg in opts:
+               arg_count += 1
+               if opt in ('-h', '--help'):
+                       usage(argv[0])
+               elif opt in ('-v', '--verbose'):
+                       verbose = True
+               else:
+                       usage(argv[0])
+       if (arg_count == argc):
+               usage(argv[0])
+
+       git_config = {'user_name': "", 'user_email': ""}
+       (stat, err_msg) = get_user_gitconfig(git_config)
+       if (stat != 0):
+               print "It wasn't possible to execute: %s" % err_msg
+               sys.exit(2)
+
+       final_output = ""
+       args = argv[arg_count:]
+       # Get output regarding to the each patch file!
+       for arg in args:
+               (stat, output) = exec_get_maintainers(arg)
+               if (stat != 0):
+                       print '%s: %s failed! Please, check the patch: %s,'  \
+                               ' and make sure you "installed" this script' \
+                               ' in the *directory scripts* of Linux tree.' \
+                               % (argv[0], SCRIPT, arg)
+                       sys.exit(2)
+               final_output += (output + '\n')
+
+       buf = StringIO.StringIO(final_output)
+       (mnt_count, list_count) = \
+               generate_gitmail_cmd(build_list(buf), git_config, args)
+
+       if (verbose):
+               print "\n\n* Statistics: Maintainer(s): %d, List(s): %d" \
+                       % (mnt_count, list_count)
+
+
+if __name__ == "__main__":
+       main(len(sys.argv), sys.argv)
-- 
1.7.2.5

--
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