Index: tools/po/svn-po-status-report.sh
===================================================================
--- tools/po/svn-po-status-report.sh	(revision 21362)
+++ tools/po/svn-po-status-report.sh	(working copy)
@@ -1,54 +0,0 @@
-#!/bin/sh
-# Subversion po file translation status report generator
-# To ensure the script produces accurate statistics, make sure that
-# you have run './po-update.sh' first
-
-set -e
-
-MAIL_FROM=${MAIL_FROM:-e.huelsmann@gmx.net}
-MAIL_TO=${MAIL_TO:-dev@subversion.tigris.org}
-
-cd "`dirname \"$0\"`"/../..
-branch_name=`svn info | sed -n '/^URL:/s@.*/svn/\(.*\)@\1@p'`
-wc_version=`svnversion subversion/po | sed -e 's/[MS]//g'`
-
-mail=
-while [ $# -ge 1 ]; do
-  case $1 in
-    -mail) mail=yes ;;
-    *) echo "E: Unknown argument: '$1'" >&2; exit 1 ;;
-  esac
-  shift
-done
-
-if [ -n "$mail" ]; then
-  echo "From: $MAIL_FROM"
-  echo "To: $MAIL_TO"
-  echo "Subject: [l10n] Translation status for $branch_name r$wc_version"
-  echo
-fi
-
-echo "Translation status report for revision $wc_version ($branch_name)"
-echo
-printf "%6s %7s %7s %7s %7s\n" lang untrans fuzzy trans obs
-echo "--------------------------------------"
-
-cd subversion/po
-for i in *.po ; do
-  trans=`msgattrib --translated $i | grep -E '^msgid *"' | sed 1d | wc -l`
-  untrans=`msgattrib --untranslated $i | grep -E '^msgid *"' | sed 1d | wc -l`
-  fuzzy=`msgattrib --only-fuzzy $i | grep -E '^msgid *"' | sed 1d | wc -l`
-  obsolete=`msgattrib --only-obsolete $i | grep -E '^#~ msgid *"' | wc -l`
-
-  if ! msgfmt --check-format -o /dev/null $i ; then
-      printf "%6s %s\n" ${i%.po} "FAILS GNU msgfmt --check-format"
-  else
-      printf "%6s %7d %7d %7d %7d" ${i%.po} $untrans $fuzzy $trans $obsolete
-  fi
-
-  if test -z "`svn status $i | grep -E '^\?'`" ; then
-      echo
-  else
-      echo ' (not in repository)'
-  fi
-done
Index: tools/po/l10n-report.py
===================================================================
--- tools/po/l10n-report.py	(revision 0)
+++ tools/po/l10n-report.py	(revision 0)
@@ -0,0 +1,171 @@
+#!/usr/bin/env python
+
+"""Usage: l10n-report.py [OPTION...] 
+
+Send the l10n translation status report to an email address. If the
+email address is not specified, print in stdout.
+
+Options:
+
+ -h, --help           Show this help message.
+
+ -m, --to-email-id    Send the l10n translation status report to this
+                      email address.
+"""
+
+import sys
+import getopt
+import os
+import re
+import subprocess
+
+def usage_and_exit(errmsg=None):
+    """Print a usage message, plus an ERRMSG (if provided), then exit.
+    If ERRMSG is provided, the usage message is printed to stderr and
+    the script exits with a non-zero error code.  Otherwise, the usage
+    message goes to stdout, and the script exits with a zero
+    errorcode."""
+    if errmsg is None:
+        stream = sys.stdout
+    else:
+        stream = sys.stderr
+    print >> stream, __doc__
+    if errmsg:
+        print >> stream, "\nError: %s" % (errmsg)
+        sys.exit(2)
+    sys.exit(0)
+
+
+class l10nReport:
+    def __init__(self, to_email_id="bhuvan@collab.net"):
+        self.to_email_id = to_email_id
+        self.from_email_id = "<dev@subversion.tigris.org>"
+
+    def safe_command(self, cmd_and_args, cmd_in=""):
+        [stdout, stderr] = subprocess.Popen(cmd_and_args, \
+                           stdin=subprocess.PIPE, \
+                           stdout=subprocess.PIPE, \
+                           stderr=subprocess.PIPE).communicate(input=cmd_in) 
+        return stdout, stderr
+
+    def match(self, pattern, string):
+        match = re.compile(pattern).search(string)
+        if match and match.groups():
+            return match.group(1)
+        else:
+            return None
+
+    def get_msgattribs(self, file):
+        msgout = self.safe_command(['msgattrib', '--translated', file])[0]
+        grepout = self.safe_command(['grep', '-E', '^msgid *"'], msgout)[0]
+        sedout = self.safe_command(['sed', '1d'], grepout)[0]
+        trans = self.safe_command(['wc', '-l'], sedout)[0]
+
+        msgout = self.safe_command(['msgattrib', '--untranslated', file])[0]
+        grepout = self.safe_command(['grep', '-E', '^msgid *"'], msgout)[0]
+        sedout = self.safe_command(['sed', '1d'], grepout)[0]
+        untrans = self.safe_command(['wc', '-l'], sedout)[0]
+
+        msgout = self.safe_command(['msgattrib', '--only-fuzzy', file])[0]
+        grepout = self.safe_command(['grep', '-E', '^msgid *"'], msgout)[0]
+        sedout = self.safe_command(['sed', '1d'], grepout)[0]
+        fuzzy = self.safe_command(['wc', '-l'], sedout)[0]
+
+        msgout = self.safe_command(['msgattrib', '--only-obsolete', file])[0]
+        grepout = self.safe_command(['grep', '-E', '^#~ msgid *"'], msgout)[0]
+        obsolete = self.safe_command(['wc', '-l'], grepout)[0]
+
+        return int(trans), int(untrans), int(fuzzy), int(obsolete)
+
+    def pre_l10n_report(self):
+        # svn revert --recursive subversion/po
+        cmd = ['svn', 'revert', '--recursive', 'subversion/po']
+        stderr = self.safe_command(cmd)[1]
+        if stderr:
+          print >> sys.stderr, "\nError: %s" % (stderr)
+          sys.exit(0)
+
+        # svn update
+        cmd = ['svn', 'update']
+        stderr = self.safe_command(cmd)[1]
+        if stderr:
+          print >> sys.stderr, "\nError: %s" % (stderr)
+          sys.exit(0)
+
+        # tools/po/po-update.sh
+        cmd = ['sh', 'tools/po/po-update.sh']
+        self.safe_command(cmd)
+
+
+def main():
+    # Parse the command-line options and arguments.
+    try:
+        opts, args = getopt.gnu_getopt(sys.argv[1:], "hm:",
+                                       ["help",
+                                        "to-email-id=",
+                                        ])
+    except getopt.GetoptError, msg:
+        usage_and_exit(msg)
+
+    to_email_id = None
+    for opt, arg in opts:
+        if opt in ("-h", "--help"):
+            usage_and_exit()
+        elif opt in ("-m", "--to-email-id"):
+            to_email_id = arg
+
+    l10n = l10nReport()
+    os.chdir("%s/../.." % os.path.dirname(os.path.abspath(sys.argv[0])))
+    l10n.pre_l10n_report()
+    [info_out, info_err] = l10n.safe_command(['svn', 'info'])
+    if info_err:
+        print >> sys.stderr, "\nError: %s" % (info_err)
+        sys.exit(0)
+
+    po_dir = 'subversion/po'
+    branch_name = l10n.match('URL:.*/svn/(\S+)', info_out)
+    [info_out, info_err] = l10n.safe_command(['svnversion', po_dir])
+    if info_err:
+        print >> sys.stderr, "\nError: %s" % (info_err)
+        sys.exit(0)
+
+    wc_version = re.sub('[MS]', '', info_out)
+    title = "Translation status report for %s r%s" % \
+               (branch_name, wc_version)
+
+    os.chdir(po_dir)
+    files = os.listdir('.')
+    files.sort()
+    format_head = "%6s %7s %7s %7s %7s" % ("lang", "untrans", "fuzzy", \
+                   "trans", "obs")
+    format_line = "--------------------------------------"
+    print "\n%s\n%s\n%s" % (title, format_head, format_line)
+
+    body = ""
+    for file in files:
+        lang = l10n.match('(.*).po$', file)
+        if not lang:
+            continue
+        [trans, untrans, fuzzy, obsolete]  = l10n.get_msgattribs(file)
+        po_format = "%6s %7d %7d %7d %7d" %\
+                    (lang, trans, untrans, fuzzy, obsolete)
+        body += "%s\n" % po_format
+        print po_format
+
+    if to_email_id:
+        email_from = "From: SVN DEV <noreply@subversion.tigris.org>"
+        email_to = "To: %s" % to_email_id
+        email_sub = "Subject: [l10n] Translation status report for %s r%s" \
+                     % (branch_name, wc_version)
+
+        msg = "%s\n%s\n%s\n%s\n%s\n%s\n%s" % (email_from, email_to,\
+              email_sub, title, format_head, format_line, body)
+
+        cmd = ['sendmail', '-t']
+        l10n.safe_command(cmd, msg)
+        print "The report is sent to '%s' email id." % to_email_id
+    else:
+        print "\nYou have not passed '-m' option, so email is not sent." 
+
+if __name__ == "__main__":
+    main()

Property changes on: tools/po/l10n-report.py
___________________________________________________________________
Name: svn:executable
   + *

Index: tools/po/svn-po-status-run.sh
===================================================================
--- tools/po/svn-po-status-run.sh	(revision 21362)
+++ tools/po/svn-po-status-run.sh	(working copy)
@@ -1,29 +0,0 @@
-#!/bin/sh
-set -e
-
-SENDMAIL=${SENDMAIL:-sendmail}
-
-cd "`dirname \"$0\"`"/../..
-
-output_log="po-status-stdout-log"
-error_log="po-status-stderr-log"
-
-rm -f "$output_log" "$error_log"
-
-# prevent conflicts
-svn revert --recursive subversion/po 2>>$error_log >>$output_log || \
-{
-    ###TODO: mail your output!
-    exit 1
-}
-
-# update && initialize
-svn update 2>>$error_log >>$output_log && \
-tools/po/po-update.sh 2>>$error_log >>$output_log || \
-{
-    # mail your output
-    echo "Unable to successfully complete; check error log."
-    exit 1
-}
-
-tools/po/svn-po-status-report.sh -mail | $SENDMAIL -t
