Updating copyright lines
========================

Copyright lines can be fixed to

- normalize the year list
- include a specific year in the copyright
- specify the owner of the copyright

Individual lines can be updated using the `fix_line` function:

>>> from gocept.devtools.copyright import fix_line

Normalizing the list of years
-----------------------------

If no parameters are given, only normalization of years is applied:

>>> print fix_line('# Copyright (c) 2001 FooCorp')[0]
# Copyright (c) 2001 FooCorp

>>> print fix_line('# Copyright (c) 2001,2002,2003 FooCorp')[0]
# Copyright (c) 2001-2003 FooCorp

>>> print fix_line('# Copyright (c) 2001,2002,2003,2005 FooCorp')[0]
# Copyright (c) 2001-2003,2005 FooCorp

>>> print fix_line('# Copyright (c) 2001 - 2002, 2003, 2005 FooCorp')[0]
# Copyright (c) 2001-2003,2005 FooCorp

Fixing years
------------

>>> print fix_line('# Copyright (c) 2001 FooCorp', year=2008)[0]
# Copyright (c) 2001,2008 FooCorp

>>> print fix_line('# Copyright (c) 2007 FooCorp', year=2008)[0]
# Copyright (c) 2007-2008 FooCorp

>>> print fix_line('# Copyright (c) 2001-2003 FooCorp', year=2008)[0]
# Copyright (c) 2001-2003,2008 FooCorp

>>> print fix_line('# Copyright (c) 2001,2003 FooCorp', year=2008)[0]
# Copyright (c) 2001,2003,2008 FooCorp

>>> print fix_line('# Copyright (c) 2001,2003-2005,2007 FooCorp', year=2008)[0]
# Copyright (c) 2001,2003-2005,2007-2008 FooCorp

>>> print fix_line('# Copyright (c) 2008 FooCorp', year=2008)[0]
# Copyright (c) 2008 FooCorp

Lines with errors are not changed:

>>> print fix_line('# Copyright (c) 2008--2009 FooCorp')[0]
# Copyright (c) 2008--2009 FooCorp


Fixing owners
-------------

The ownership of the copyright can be changed to another holder by specifying
the `owner`

>>> print fix_line('# Copyright (c) 2008 FooCorp', owner='Bar Foundation')[0]
# Copyright (c) 2008 Bar Foundation


Combined fixing
---------------

>>> print fix_line('# Copyright (c) 2008 FooCorp', year=2009, owner='Bar Foundation')[0]
# Copyright (c) 2008-2009 Bar Foundation


Replacing existing years
------------------------

>>> print fix_line('# Copyright (c) 2008 FooCorp', year=2009, replace_years=True)[0]
# Copyright (c) 2009 FooCorp


Leading characters
------------------

To avoid replacing non-actual copyright lines and as we only need to support a
limited set of languages:

- Python
- C

>>> print fix_line('# Copyright (c) 2008 FooCorp')[0]
# Copyright (c) 2008 FooCorp

>>> print fix_line('    Copyright (c) 2008 FooCorp')[0]
    Copyright (c) 2008 FooCorp

>>> print fix_line('  #    Copyright (c) 2008 FooCorp')[0]
  #    Copyright (c) 2008 FooCorp

>>> print fix_line('/*    Copyright (c) 2008 FooCorp')[0]
Traceback (most recent call last):
ValueError: ('Invalid lead for copyright line', '/*    Copyright (c) 2008 FooCorp')


Keeping existing lines intact, appending new data in whole files
----------------------------------------------------------------

>>> from gocept.devtools.copyright import fix_file
>>> from StringIO import StringIO
>>> print fix_file(StringIO("""\
... # Copyright (c) 2008 FooCorp
... Gnarr"""), year=2009, owner='Bar Foundation', append=True).getvalue()
# Copyright (c) 2008 FooCorp
# Copyright (c) 2009 Bar Foundation
Gnarr
>>> print fix_file(StringIO("""\
... # Copyright (c) 2008 FooCorp
... Gnarr"""), year=None, owner='Bar Foundation', append=True).getvalue()
# Copyright (c) 2008 FooCorp
# Copyright (c) 2008 Bar Foundation
Gnarr
