I have a very rough implementation of licence appending in RAT, that is,
you can optionally add licence headers to files that do not currently
have a recognised licence header and are not in the excludes list.
The implementation is very limited (only able to ad Apache Software
Licence, only works on java files), but it is a starting point.
Before I go an submit a patch I'd like to float the design past people
here. I like to work in a "get things working then refactor" kind of
way. Is that how you want to work here, or do you prefer a more rigorous
upfront design?
Anyway, here's what I have done:
Added Apache CLI to the Report class. The current help message is:
usage: simal [options] DIR
Options
-a,--addLicence Add the default licence header to any file with
an unknown licence that is not in the exclusion list, and exit.
-c,--copyright <arg> The copyright message to use in the licence
headers, usually in the form of "Copyright 2008 Foo"
-h,--help Print help for the RAT command line interface
and exit
-x,--xml Output the report in XML format
Adding the --addLicence option results in the followig behaviour:
- run the report, capturing the XML output
- extract all files with no licence
- create a rat.appender.LicenceAppender class
- iterate over all files calling the append method of the LicenceAppender
- re-run the report and output in either text or xml (if --xml option is
specified)
The LicenceAppender will (if the file is a java file) either add the
standard ASF header, or, if the instance was created using an argument
from the --copyright command line option, the correct header of applyig
the Apache Software Licence with a named copyright holder.
Currently the LicenceAppender creates a new file with the licence
header, i.e. "test.java" generates a "test.java.new" alongside the
orgiinal file.
Potential refactoring:
- make this a single pass process by adding a hooker into the analysis
thread. I didn't do it this way initially as I prefer a "get it working
then improve it approach" and besides, it seems wrong for an analysis
class to actually change the source files. It would seem this is a much
bigger refactoring.
- add an option to modify the java files themselves, i.e. don't create
"test.java.new". I think having the default set to create alternative
files is safer as this will allow for an additional sanity check before
actually modfiying the source
- make LicenceAppender an abstract class and provide other appender
implementations for other licences
- move the logic out of Report.main(args) and into LicenceAppender
(probably do that in a few minutes)
So, is this something that you'd want in RAT? Is it something you would
accept in its current rough design?
One last question. What is the policy for code submissions with respect
to unit tests. I've been lazy on this and not written unit tests. I'd be
happy to write them before submitting, but if I get to carry on being
lazy, I will.
Ross