Merge Hooke and BE branches of update-copyright.
authorW. Trevor King <wking@drexel.edu>
Thu, 9 Feb 2012 19:01:12 +0000 (14:01 -0500)
committerW. Trevor King <wking@drexel.edu>
Thu, 9 Feb 2012 19:01:12 +0000 (14:01 -0500)
1  2 
update_copyright.py

@@@ -1,29 -1,28 +1,32 @@@
  #!/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
@@@ -36,28 -35,22 +39,22 @@@ import tim
  
  
  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]
@@@ -301,12 -313,17 +285,17 @@@ elif PROJECT_INFO['vcs'] == 'Bazaar'
              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]
@@@ -445,7 -489,37 +461,38 @@@ def _copyright_string(original_year, fi
                              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: