#!/usr/bin/python
#
- # Copyright (C) 2009-2010 W. Trevor King <wking@drexel.edu>
-# Copyright (C) 2010 W. Trevor King <wking@drexel.edu>
++# Copyright (C) 2009-2012 W. Trevor King <wking@drexel.edu>
#
- # This file is part of Bugs Everywhere.
-# This file is part of Hooke.
++# This file is part of update-copyright.
#
- # Bugs Everywhere is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by the
- # Free Software Foundation, either version 2 of the License, or (at your
- # option) any later version.
-# Hooke is free software: you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation, either
-# version 3 of the License, or (at your option) any later version.
++# update-copyright is free software: you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation, either version 3 of the
++# License, or (at your option) any later version.
#
- # Bugs Everywhere is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
-# Hooke is distributed in the hope that it will be useful,
++# update-copyright is distributed in the hope that it will be useful,
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Lesser General Public License for more details.
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
#
-# You should have received a copy of the GNU Lesser General Public
-# License along with Hooke. If not, see
+# You should have received a copy of the GNU General Public License
- # along with Bugs Everywhere. If not, see <http://www.gnu.org/licenses/>.
++# along with update-copyright. If not, see
+ # <http://www.gnu.org/licenses/>.
"""Automatically update copyright boilerplate.
-This script is adapted from one written for `Bugs Everywhere`_.
+This script is adapted from one written for `Bugs Everywhere`_. and
- later modified for `Hooke`_ before returning to `Bugs Everywhere`_.
++later modified for `Hooke`_ before returning to `Bugs Everywhere`_. I
++finally gave up on maintaining separate versions, so here it is as a
++stand-alone module.
.. _Bugs Everywhere: http://bugseverywhere.org/
+.. _Hooke: http://code.google.com/p/hooke/
"""
import difflib
PROJECT_INFO = {
- 'project': 'Bugs Everywhere',
- 'project': 'Hooke',
++ 'project': 'update-copyright',
'vcs': 'Git',
}
# Break "copyright" into "copy" and "right" to avoid matching the
- # REGEXP.
- COPY_RIGHT_TEXT="""
- This file is part of %(project)s.
-
- %(project)s is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation, either version 2 of the License, or (at your
- option) any later version.
-
- %(project)s is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with %(project)s. If not, see <http://www.gnu.org/licenses/>.
- """.strip()
+ # REGEXP if we decide to go back to regexps.
+ COPY_RIGHT_TEXT = [
+ 'This file is part of %(project)s.',
- '%(project)s is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.',
- '%(project)s is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.',
- 'You should have received a copy of the GNU Lesser General Public License along with %(project)s. If not, see <http://www.gnu.org/licenses/>.'
++ '%(project)s is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.',
++ '%(project)s is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.',
++ 'You should have received a copy of the GNU General Public License along with %(project)s. If not, see <http://www.gnu.org/licenses/>.'
+ ]
+
+ SHORT_COPY_RIGHT_TEXT = [
- '%(project)s comes with ABSOLUTELY NO WARRANTY and is licensed under the GNU Lesser General Public License. For details, %(get-details)s.'
++ '%(project)s comes with ABSOLUTELY NO WARRANTY and is licensed under the GNU General Public License. For details, %(get-details)s.'
+ ]
COPY_RIGHT_TAG='-xyz-COPY' + '-RIGHT-zyx-' # unlikely to occur in the wild :p
# }
# Git-based projects are encouraged to use .mailmap instead of
# ALIASES. See git-shortlog(1) for details.
--ALIASES = {
- 'Aaron Bentley <abentley@panoramicfeedback.com>':
- ['Aaron Bentley <aaron.bentley@utoronto.ca>'],
- 'Panometrics, Inc.':
- ['Aaron Bentley and Panometrics, Inc.'],
- 'Ben Finney <benf@cybersource.com.au>':
- ['Ben Finney <ben+python@benfinney.id.au>',
- 'John Doe <jdoe@example.com>'],
- 'Chris Ball <cjb@laptop.org>':
- ['Chris Ball <cjb@thunk.printf.net>'],
- 'Gianluca Montecchi <gian@grys.it>':
- ['gian <gian@li82-39>',
- 'gianluca <gian@galactica>'],
- 'W. Trevor King <wking@drexel.edu>':
- ['wking <wking@mjolnir>',
- 'wking <wking@thialfi>'],
- None:
- ['j^ <j@oil21.org>'],
- 'A. Seeholzer':
- ['A. Seeholzer'],
- 'Alberto Gomez-Casado':
- ['albertogomcas'],
- 'Massimo Sandal <devicerandom@gmail.com>':
- ['Massimo Sandal',
- 'devicerandom',
- 'unknown'],
- 'Fabrizio Benedetti':
- ['fabrizio.benedetti.82'],
- 'Richard Naud <richard.naud@epfl.ch>':
- ['Richard Naud'],
- 'Rolf Schmidt <rschmidt@alcor.concordia.ca>':
- ['Rolf Schmidt',
- 'illysam'],
- 'Marco Brucale':
- ['marcobrucale'],
- 'Pancaldi Paolo':
- ['pancaldi.paolo'],
-- }
++ALIASES = {}
# List of paths that should not be scanned for copyright updates.
# IGNORED_PATHS = ['./.git/']
- IGNORED_PATHS = ['./.be/', './.git/', './build/', './doc/.build/']
-IGNORED_PATHS = ['./.hg/', './doc/img/', './test/data/',
- './build/', './doc/build/']
++IGNORED_PATHS = ['./.git']
# List of files that should not be scanned for copyright updates.
# IGNORED_FILES = ['COPYING']
- IGNORED_FILES = ['COPYING', 'catmutt']
-IGNORED_FILES = ['COPYING', 'COPYING.LESSER']
++IGNORED_FILES = ['COPYING']
# Work around missing author holes in the VCS history.
# AUTHOR_HACKS[<path tuple>] = [<missing authors]
authors = revision.rev.get_apparent_authors()
self.to_file.write('\n'.join(authors)+'\n')
- def original_year(filename, year_hacks=YEAR_HACKS):
+ def original_year(filename=None, year_hacks=YEAR_HACKS):
cmd = bzrlib.builtins.cmd_log()
cmd.outf = StringIO.StringIO()
- cmd.run(file_list=[filename], log_format=YearLogFormatter, levels=0)
+ kwargs = {'log_format':YearLogFormatter, 'levels':0}
+ if filename != None:
- kwargs['file_list'] = [filenme]
++ kwargs['file_list'] = [filename]
+ cmd.run(**kwargs)
years = [int(year) for year in set(cmd.outf.getvalue().splitlines())]
- if splitpath(filename) in year_hacks:
+ if filename == None:
+ years.append(year_hacks.values())
+ elif splitpath(filename) in year_hacks:
years.append(year_hacks[splitpath(filename)])
years.sort()
return years[0]
B <b@b.edu>
<BLANKLINE>
This file...
- Hooke comes with ABSOLUTELY NO WARRANTY and is
- licensed under the GNU Lesser General Public
+ >>> print _copyright_string(original_year=2005,
+ ... final_year=2005,
+ ... authors=['A <a@a.com>', 'B <b@b.edu>'],
+ ... text=SHORT_COPY_RIGHT_TEXT,
+ ... author_format_fn=_short_author_formatter,
+ ... extra_info={'get-details':'%(get-details)s'},
+ ... prefix='',
+ ... width=50,
+ ... )
+ Copyright (C) 2005 A <a@a.com>, B <b@b.edu>
+ <BLANKLINE>
- Hooke comes with ABSOLUTELY NO WARRANTY and is licensed under the GNU Lesser General Public License. For details, %(get-details)s.
++ update-copyright comes with ABSOLUTELY NO WARRANTY
++ and is licensed under the GNU General Public
+ License. For details, %(get-details)s.
++
+ >>> print _copyright_string(original_year=2005,
+ ... final_year=2005,
+ ... authors=['A <a@a.com>', 'B <b@b.edu>'],
+ ... text=SHORT_COPY_RIGHT_TEXT,
+ ... extra_info={'get-details':'%(get-details)s'},
+ ... author_format_fn=_short_author_formatter,
+ ... wrap=False,
+ ... prefix='',
+ ... )
+ Copyright (C) 2005 A <a@a.com>, B <b@b.edu>
+ <BLANKLINE>
++ update-copyright comes with ABSOLUTELY NO WARRANTY and is licensed under the GNU General Public License. For details, %(get-details)s.
"""
+ for key in ['initial_indent', 'subsequent_indent']:
+ if key not in wrap_kwargs:
+ wrap_kwargs[key] = prefix
+
if original_year == final_year:
date_range = '%s' % original_year
else: