Skip to main content

copyright2

License GitHub Actions Workflow Status

copyright2 (copyright-right) is a text file copyright notice lint and update tool to help keep the years listed in your copyright notices up to date with when they were modified.

Features

  • Supports any text file.
  • Configurable to match your specific copyright notice format.
  • Configurable to include/exclude specific files/directories.
  • Check mode which shows changes missing from files.
  • Fix mode which updates files with missing changes.
  • Intelligently simplifies copyright year expressions e.g. 2009,2010,2011,2013 to 2009-11,3.
  • Git path mode for using Git to identify which files to check in CI.
  • Configurable to quickly add current year to modified files when using Git path mode.

Getting Started

Prerequisites

  • Python 3.10 or later

Installation

Install using your favourite package manager e.g.

pip install copyright2
poetry install copyright2

or, if using as an application only, install in isolation e.g.

pipx install copyright2
uv tool install copyright2

Usage

Configuration

Create a .copyrightrc.yaml at the top level of your project and describe your copyright notice and specify some files to manage using regular expressions.

By default, no files or directories are included and no changes are made to included files.

# .copyrightrc.yaml
root: yes
copyright: "Copyright \(c\) {ts}"
include_dirs:
  - .*  # All directories.
include_files:
  - README.md$
simplify: yes  # Simplify copyright year expression.

Options specified in .copyrightrc.yaml of subdirectories take precedence for that directory.

# src/.copyrightrc.yaml
include_files:
  - .*\.py$  # All .py files in this directory and below.
# src/ext/.copyrightrc.yaml
include_files:
  - .*\.(c|h)$  # Only .c, .h files in this directory and below.

Run (development)

Check files that will be managed by copyright

examples/readme$ copyright list
README.md
src/readme.py
src/ext/readme.h
src/ext/readme.c
4

then scan for changes that need to be made to any copyright notices

examples/readme$ copyright check
README.md: notice not found
src/ext/readme.h: 2: simplified timestamp expression
2

and fix them

examples/readme$ copyright fix
README.md: notice not found
fixing src/readme.py... ok
fixing src/ext/readme.h... ok
2

examples/readme$ git diff
diff --git a/examples/readme/src/readme.py b/examples/readme/src/readme.py
index 65785b6..cb2603b 100644
--- a/examples/readme/src/readme.py
+++ b/examples/readme/src/readme.py
@@ -1 +1 @@
-"""Copyright (c) 2023,2024,2025."""
+"""Copyright (c) 2023-5."""

Run (CI)

The check command will only return 0 if no required changes are detected.

To restrict the check to only files which have changed between the previous and current commit

examples/readme$ copyright list --find-path git HEAD~1
src/readme.py
1

To ensure that the current year has been added to files which have changed between the previous and current commit, add the --add-now flag

examples/readme$ copyright check --find-path git HEAD~1 --add-now
src/readme.py: 1: added year 2024 to timestamp
1

Metadata

Release files for copyright2 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for copyright2 0.1.1
File Size Uploaded
copyright2-0.1.1.tar.gz 14.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for copyright2 0.1.1
File Interpreter ABI Platform
copyright2-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 26.4 kB

Release files / copyright2-0.1.1.tar.gz

Download URL copyright2-0.1.1.tar.gz
Size 14.6 kB
Tags Source
SHA-256 checksum
How to use checksums
30ed53fc763e8a0250e1ff76de24262d82206dac2e047110426257c0e29746b5
BLAKE2b-256 checksum
How to use checksums
c436a43a4e834b90608ea00b322069470726ca3c31d2053dca92f82ee38edef8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.12.5

Release files / copyright2-0.1.1-py3-none-any.whl

Download URL copyright2-0.1.1-py3-none-any.whl
Size 11.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c08c5621968cea4de1740eca50dfb28e9111c32f0d03d2ec83fe20065f2843ae
BLAKE2b-256 checksum
How to use checksums
041c5b732dfd7d695c0ac9ec02d1d41d29b4efd23e849cecb07f1de8d3abd3e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.0 CPython/3.12.5

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page