Giter Club home page Giter Club logo

headache's Introduction

Header management

headache manages license headers. It is biased towards Golang but should work on any other language (provided a compatible code comment style is implemented).

Build status

Build Status

Quick start

By default, headache looks for a configuration file named headache.json in the directory in which it is invoked:

{
  "headerFile": "./license-header.txt",
  "style": "SlashStar",
  "includes": ["**/*.go"],
  "excludes": ["vendor/**/*"],
  "data": {
    "Owner": "The original author or authors"
  }
}

license-header.txt (note the absence of YearRange parameter in the configuration file):

Copyright {{.YearRange}} {{.Owner}}

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Run

All you have to do then is:

 $ go get -u github.com/fbiville/headache
 $ $(GOBIN)/headache

As a result, source files will be changed and .headache-run will be generated to keep track of headache last execution. This file must be versioned along with the source file changes.

Run with custom configuration

Alternatively, the configuration file can be explicitly provided:

 $ go get -u github.com/fbiville/headache
 $ $(GOBIN)/headache --configuration /path/to/configuration.json

Reference documentation

Approach

headache approach to copyright is well explained in this stackoverflow answer, read it first!

Now that you read this, here are two important points:

  • Copyright years have to be updated when a significant change occurs.

There is, to the author knowledge, no automatic solution to distinguish a trivial change from a significant one.

Based on this premise, headache will process all files matching the configuration and that have been changed since its last execution. headache will then compute the copyright year, file by file, from their available versioning information (typically by retrieving the relevant dates from Git commits).

It is up to the project maintainer to discard the generated changes if they are not relevant.

  • The [first] date on the [copyright] notice establishes how far back the claim is made.

This claim could predate any commit associated to the file (imagine a file copied from project to project for years).

headache will never overwrite the start date of the copyright year if it finds one, if and only if that date occurs earlier than the first commit date of the file.

Configuration

headache relies on the emerging JSON Schema standard to validate its configuration. headache schema is defined here.

In layman's terms, here are all the possible settings:

Setting Type Definition
headerFile string [required] Path to the parameterized license header. Parameters are referenced with the following syntax: {{.PARAMETER-NAME}}
style string [required] See all the possible names here
includes array of strings [required, min size=1] File globs to include (* and ** are supported)
excludes array of strings File globs to exclude (* and ** are supported)
data map of string to string Key-value pairs, matching the parameters used in headerFile except for the reserved parameters (see below section).

Reserved parameters

  • {{.YearRange}} (formerly {{.Year}}) is automatically substituted with either:
    • a single year if both years in the range are the same
    • a year range with the earliest commit's year* and latest commit's year
  • {{.StartYear}} is substituted with the earliest commit's year
  • {{.EndYear}} is substituted with the latest commit's year

As explained earlier, if a file specifies a start date in its header that is earlier than any commit's year, then that date is preserved.

If you want to avoid copyright dates like 2019-2019, then rely on {{.YearRange}}. If you need something like 2018-present, then use {{.StartYear}}-present instead.

headache's People

Contributors

fbiville avatar redpanda avatar ntjnh avatar psycokwet avatar dialaya avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.