summaryrefslogtreecommitdiffstats
path: root/tools/boilerplate.py
diff options
context:
space:
mode:
authorrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-20 17:43:10 +0000
committerrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-20 17:43:10 +0000
commitfb9d58cdf51d919b73ce45ac361db821fa0368ea (patch)
treed828eb66051e11865c62ef4f80abea0b01d0d7f6 /tools/boilerplate.py
parentffe2056247cf654136c6247287a8b59132dda2f4 (diff)
downloadchromium_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-xtools/boilerplate.py91
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())