diff options
author | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-20 17:43:10 +0000 |
---|---|---|
committer | rsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-20 17:43:10 +0000 |
commit | fb9d58cdf51d919b73ce45ac361db821fa0368ea (patch) | |
tree | d828eb66051e11865c62ef4f80abea0b01d0d7f6 /tools/boilerplate.py | |
parent | ffe2056247cf654136c6247287a8b59132dda2f4 (diff) | |
download | chromium_src-fb9d58cdf51d919b73ce45ac361db821fa0368ea.zip chromium_src-fb9d58cdf51d919b73ce45ac361db821fa0368ea.tar.gz chromium_src-fb9d58cdf51d919b73ce45ac361db821fa0368ea.tar.bz2 |
Add tools/boilerplate.py that will generate files with copyright headers and guards.
TEST=tools/boilerplate.py chrome/browser/ui/cocoa/test.{h,mm}
R=thakis@chromium.org
TBR=mkosiba@chromium.org
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=256928
Reverted: https://src.chromium.org/viewvc/chrome?view=rev&revision=256941
Review URL: https://codereview.chromium.org/199003003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258328 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/boilerplate.py')
-rwxr-xr-x | tools/boilerplate.py | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/tools/boilerplate.py b/tools/boilerplate.py new file mode 100755 index 0000000..74c63ee --- /dev/null +++ b/tools/boilerplate.py @@ -0,0 +1,91 @@ +#!/usr/bin/env python +# Copyright 2014 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +"""Create files with copyright boilerplate and header include guards. + +Usage: tools/boilerplate.py path/to/file.{h,cc} +""" + +from datetime import date +import os +import os.path +import sys + +LINES = [ + 'Copyright %d The Chromium Authors. All rights reserved.' % + date.today().year, + 'Use of this source code is governed by a BSD-style license that can be', + 'found in the LICENSE file.' +] + +EXTENSIONS_TO_COMMENTS = { + 'h': '//', + 'cc': '//', + 'mm': '//', + 'js': '//', + 'py': '#' +} + +def _GetHeader(filename): + _, ext = os.path.splitext(filename) + ext = ext[1:] + comment = EXTENSIONS_TO_COMMENTS[ext] + ' ' + return '\n'.join([comment + line for line in LINES]) + + +def _CppHeader(filename): + guard = filename.replace('/', '_').replace('.', '_').upper() + '_' + return '\n'.join([ + '', + '#ifndef ' + guard, + '#define ' + guard, + '', + '#endif // ' + guard, + '' + ]) + + +def _CppImplementation(filename): + base, _ = os.path.splitext(filename) + include = '#include "' + base + '.h"' + return '\n'.join(['', include]) + + +def _CreateFile(filename): + contents = _GetHeader(filename) + '\n' + + if filename.endswith('.h'): + contents += _CppHeader(filename) + elif filename.endswith('.cc') or filename.endswith('.mm'): + contents += _CppImplementation(filename) + + fd = open(filename, 'w') + fd.write(contents) + fd.close() + + +def Main(): + files = sys.argv[1:] + if len(files) < 1: + print >> sys.stderr, 'Usage: boilerplate.py path/to/file.h path/to/file.cc' + return 1 + + # Perform checks first so that the entire operation is atomic. + for f in files: + _, ext = os.path.splitext(f) + if not ext[1:] in EXTENSIONS_TO_COMMENTS: + print >> sys.stderr, 'Unknown file type for %s' % f + return 2 + + if os.path.exists(f): + print >> sys.stderr, 'A file at path %s already exists' % f + return 2 + + for f in files: + _CreateFile(f) + + +if __name__ == '__main__': + sys.exit(Main()) |