Tool to automatically add, update, or delete multi-format copyright headers
Project description
cr-manager -- the Copyright Header Manager
A tool to automatically add, update, or delete multi-format copyright headers in source files.
Features
- Add: Insert copyright headers for multiple file types.
- Update: Force update or insert headers if missing.
- Check: Verify the presence and correctness of headers.
- Delete: Remove detected copyright headers from files.
- Supports recursive directory traversal and filetype auto-detection or override.
Action Modes
without any action mode specified, the default action is to add copyright headers.
| OPTION | DESCRIPTION |
|---|---|
| Add mode: Automatically adds copyright headers to files. | |
--check |
Check mode: Verifies file copyright status (match, mismatch, or not found). |
--delete |
Delete mode: Removes detected copyright headers from files. |
--update |
Update mode: Forces replacement of copyright or adds it if missing. |
Add New Copyright Headers
# single file
$ cr-manager /path/to/file
# files recursively in directories
$ cr-manager --recursive /path/to/directory
# add to non-supported suffixes with supplied filetype
# -- i.e. add to .txt files as python filetype --
$ cr-manager --filetype python /path/to/file.txt
Update Existing Copyright Headers
--filetype <TYPE>can be used to force a specific filetype for the update action, overriding auto-detection.
# single file
$ cr-manager --update /path/to/file
# files recursively in directories
$ cr-manager --update --recursive /path/to/directory
Delete Existing Copyright Headers
--filetype <TYPE>can be used to force a specific filetype for the update action, overriding auto-detection.
# single file
$ cr-manager --delete /path/to/file
# files recursively in directories
$ cr-manger --delete --recursive /path/to/directory
Debug Mode
# *add* without modifying files
$ cr-manager --debug /path/to/file
# *update* without modifying files
$ cr-manager --update --debug /path/to/file
# *delete* without modifying files
$ cr-manager --delete --debug /path/to/file
Supported File Types and Formats
- check Running as CLI tool
| FILETYPE | SUFFIXES |
|---|---|
python, shell, bash, sh, dockerfile |
.py, .sh, .dockerfile |
$ cr-manager --filetype python
result
#===============================================================================
# Copyright © 2025 marslo #
# Licensed under the MIT License, Version 2.0 #
#===============================================================================
| FILETYPE | SUFFIXES |
|---|---|
jenkinsfile, groovy, gradle, java |
.groovy, .java |
$ cr-manager --filetype groovy
result
/**
*******************************************************************************
* Copyright © 2025 marslo *
* Licensed under the MIT License, Version 2.0 *
*******************************************************************************
**/
| FILETYPE | SUFFIXES |
|---|---|
c, cpp, c++, cxx, h, hpp, hxx |
.c, .cpp, .cxx, .h, .hpp, .hxx |
$ cr-manager --filetype cpp
result
/**
* Copyright © 2025 marslo
* Licensed under the MIT License, Version 2.0
*/
Install
Binary
- pipx installation
$ python3 -m pip install pipx $ python3 -m pipx ensurepath- enable the ansicolor in Windows terminal for better output experience.
reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
# via pipx
$ pipx install --force "git+https://github.com/marslo/cr-manager"
# via pip
$ python3 -m pip install cr-manager
# with binary
$ VERSION="$(curl -fsSL https://api.github.com/repos/marslo/cr-manager/releases/latest | jq -r .tag_name)"
# -- linux --
$ curl -fsSL -o cr-manager https://github.com/marslo/cr-manager/releases/download/${VERSION}/cr-manager-linux
# macos
$ curl -fsSL -o cr-manager https://github.com/marslo/cr-manager/releases/download/${VERSION}/cr-manager-macos
# Windows - running in cmd
> powershell -NoProfile -Command "$v=(Invoke-WebRequest -Uri 'https://api.github.com/repos/marslo/cr-manager/releases/latest' -UseBasicParsing | ConvertFrom-Json).tag_name; Invoke-WebRequest -Uri ('https://github.com/marslo/cr-manager/releases/download/'+$v+'/cr-manager.exe') -OutFile 'cr-manager.exe'; Write-Host ('Downloaded '+$v)"
pre-commit hook
# if `COPYRIGHT` file can be found in the root directory of this repository
---
repos:
- repo: https://github.com/marslo/cr-manager
rev: v3.0.3
hooks:
- id: cr-manager
args: ["--update"]
# specify the path to the COPYRIGHT file
---
repos:
- repo: https://github.com/marslo/cr-manager
rev: v3.0.5
hooks:
- id: cr-manager
args: ["--update", "--copyright", "/path/to/COPYRIGHT"]
files: ^(jenkinsfile/|.*\.(groovy|py|sh)$)
only check the copyright headers without modifying files after commit
---
repos:
- repo: https://github.com/marslo/cr-manager
rev: v3.0.5
hooks:
- id: cr-manager
args: ["--check"]
stages: [post-commit]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cr_manager-3.0.5.tar.gz.
File metadata
- Download URL: cr_manager-3.0.5.tar.gz
- Upload date:
- Size: 17.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.14.0 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4dea7c50934e3be61aae466fc75cd192da470b91cbe823491799157e6da0d6ef
|
|
| MD5 |
573223137c3f2c2c04ab4abbf2bcf1f6
|
|
| BLAKE2b-256 |
bff2f21f6c3e548cead37a8c5fe785b4d949983efd6e681b52fb5e6b1cc85398
|
File details
Details for the file cr_manager-3.0.5-py3-none-any.whl.
File metadata
- Download URL: cr_manager-3.0.5-py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.14.0 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eff8b78c2993ceb9d9d76cd09ac184fab23811d50e88d3a67f1843cf12af2419
|
|
| MD5 |
d39f5f3729a87715885c928097ae2591
|
|
| BLAKE2b-256 |
c40afe1c6987b7c6ec580fcb287321de551927ca90dfd956c686a5430e39b0d0
|