symbian-qemu-0.9.1-12/python-2.6.1/Tools/scripts/patchcheck.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 import os.path
       
     2 import subprocess
       
     3 import sys
       
     4 
       
     5 import reindent
       
     6 
       
     7 
       
     8 def status(message, modal=False, info=None):
       
     9     """Decorator to output status info to stdout."""
       
    10     def decorated_fxn(fxn):
       
    11         def call_fxn(*args, **kwargs):
       
    12             sys.stdout.write(message + ' ... ')
       
    13             sys.stdout.flush()
       
    14             result = fxn(*args, **kwargs)
       
    15             if not modal and not info:
       
    16                 print "done"
       
    17             elif info:
       
    18                 print info(result)
       
    19             else:
       
    20                 if result:
       
    21                     print "yes"
       
    22                 else:
       
    23                     print "NO"
       
    24             return result
       
    25         return call_fxn
       
    26     return decorated_fxn
       
    27 
       
    28 @status("Getting the list of files that have been added/changed",
       
    29             info=lambda x: "%s files" % len(x))
       
    30 def changed_files():
       
    31     """Run ``svn status`` and return a set of files that have been
       
    32     changed/added."""
       
    33     cmd = 'svn status --quiet --non-interactive --ignore-externals'
       
    34     svn_st = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
       
    35     svn_st.wait()
       
    36     output = [line.strip() for line in svn_st.stdout.readlines()]
       
    37     files = set()
       
    38     for line in output:
       
    39         if not line[0] in ('A', 'M'):
       
    40             continue
       
    41         line_parts = line.split()
       
    42         path = line_parts[-1]
       
    43         if os.path.isfile(path):
       
    44             files.add(path)
       
    45     return files
       
    46 
       
    47 @status("Fixing whitespace", info=lambda x: "%s files" % x)
       
    48 def normalize_whitespace(file_paths):
       
    49     """Make sure that the whitespace for .py files have been normalized."""
       
    50     reindent.makebackup = False  # No need to create backups.
       
    51     result = map(reindent.check, (x for x in file_paths if x.endswith('.py')))
       
    52     return sum(result)
       
    53 
       
    54 @status("Docs modified", modal=True)
       
    55 def docs_modified(file_paths):
       
    56     """Report if any files in the Docs directory."""
       
    57     for path in file_paths:
       
    58         if path.startswith("Doc"):
       
    59             return True
       
    60     return False
       
    61 
       
    62 @status("Misc/ACKS updated", modal=True)
       
    63 def credit_given(file_paths):
       
    64     """Check if Misc/ACKS has been changed."""
       
    65     return True if 'Misc/ACKS' in file_paths else False
       
    66 
       
    67 @status("Misc/NEWS updated", modal=True)
       
    68 def reported_news(file_paths):
       
    69     """Check if Misc/NEWS has been changed."""
       
    70     return True if 'Misc/NEWS' in file_paths else False
       
    71 
       
    72 
       
    73 def main():
       
    74     file_paths = changed_files()
       
    75     # PEP 7/8 verification.
       
    76     normalize_whitespace(file_paths)
       
    77     # Docs updated.
       
    78     docs_modified(file_paths)
       
    79     # Misc/ACKS changed.
       
    80     credit_given(file_paths)
       
    81     # Misc/NEWS changed.
       
    82     reported_news(file_paths)
       
    83 
       
    84     # Test suite run and passed.
       
    85     print
       
    86     print "Did you run the test suite?"
       
    87 
       
    88 
       
    89 if __name__ == '__main__':
       
    90     main()