Mercurial > cpython-lru_cache-weakref
view Tools/scripts/patchcheck.py @ 49955:878d40468c4e legacy-trunk
Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging.
| author | Vinay Sajip <vinay_sajip@yahoo.co.uk> |
|---|---|
| date | Wed, 03 Dec 2008 23:22:58 +0000 |
| parents | c424099b4ce4 |
| children | 2d453b221bec |
line wrap: on
line source
import os.path import subprocess import sys import reindent def status(message, modal=False, info=None): """Decorator to output status info to stdout.""" def decorated_fxn(fxn): def call_fxn(*args, **kwargs): sys.stdout.write(message + ' ... ') sys.stdout.flush() result = fxn(*args, **kwargs) if not modal and not info: print "done" elif info: print info(result) else: if result: print "yes" else: print "NO" return result return call_fxn return decorated_fxn @status("Getting the list of files that have been added/changed", info=lambda x: "%s files" % len(x)) def changed_files(): """Run ``svn status`` and return a set of files that have been changed/added.""" cmd = 'svn status --quiet --non-interactive --ignore-externals' svn_st = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) svn_st.wait() output = [line.strip() for line in svn_st.stdout.readlines()] files = set() for line in output: if not line[0] in ('A', 'M'): continue line_parts = line.split() path = line_parts[-1] if os.path.isfile(path): files.add(path) return files @status("Fixing whitespace", info=lambda x: "%s files" % x) def normalize_whitespace(file_paths): """Make sure that the whitespace for .py files have been normalized.""" reindent.makebackup = False # No need to create backups. result = map(reindent.check, (x for x in file_paths if x.endswith('.py'))) return sum(result) @status("Docs modified", modal=True) def docs_modified(file_paths): """Report if any files in the Docs directory.""" for path in file_paths: if path.startswith("Doc"): return True return False @status("Misc/ACKS updated", modal=True) def credit_given(file_paths): """Check if Misc/ACKS has been changed.""" return True if 'Misc/ACKS' in file_paths else False @status("Misc/NEWS updated", modal=True) def reported_news(file_paths): """Check if Misc/NEWS has been changed.""" return True if 'Misc/NEWS' in file_paths else False def main(): file_paths = changed_files() # PEP 7/8 verification. normalize_whitespace(file_paths) # Docs updated. docs_modified(file_paths) # Misc/ACKS changed. credit_given(file_paths) # Misc/NEWS changed. reported_news(file_paths) # Test suite run and passed. print print "Did you run the test suite?" if __name__ == '__main__': main()
