Skip to content

marslo/cr-manager

Repository files navigation

pre-commit.ci status


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.
  • Supports combined author-info and copyright headers.


How to Install

Tip

  • enable the ansicolor in Windows terminal for better output experience.
    reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1

Install as Binary

  • pipx

Tip

  • pipx installation
    $ python3 -m pip install pipx
    $ python3 -m pipx ensurepath
$ pipx install --force "git+https://github.com/marslo/cr-manager"
# upgrade
$ pipx upgrade cr-manager
# switch python version
$ pipx reinstall cr-manager --python /path/to/python3.x
  • pip

    $ python3 -m pip install --user cr-manager
    # upgrade
    $ python3 -m pip install --user --upgrade cr-manager
  • linux/macos 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
    $ chmod +x cr-manager
    
    # macos
    $ curl -fsSL -o cr-manager https://github.com/marslo/cr-manager/releases/download/${VERSION}/cr-manager-macos
    $ chmod +x cr-manager
  • windows binary

    > 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)"

Install as 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.5
    hooks:
      - id: cr-manager
        args: ["--update"]
# specify the `COPYRIGHT` file to use, and only check specific files/folders
---
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]

Install as Local Package

# clone the repo
$ git clone git@github.com:marslo/cr-manager.git

# install via pip
# - in global --
$ python3 -m pip install --upgrade --editable .
# - in local --
$ python3 -m pip install --upgrade --user --editable .

# or install via pipx
$ pipx install --editable [--force] .

Action Modes

Tip

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.

Supported File Types and Formats

Tip

FILETYPE SUFFIXES
python, shell, bash, sh, dockerfile .py, .sh, .dockerfile
# without venv
$ poetry run cr-manager --filetype python

# with venv
$ cr-manager --filetype python

result

#===============================================================================
# Copyright © 2025 marslo                                                      #
# Licensed under the MIT License, Version 2.0                                  #
#===============================================================================

Python


FILETYPE SUFFIXES
jenkinsfile, groovy, gradle, java .groovy, .java
# without venv
$ poetry run cr-manager --filetype java

# with venv
$ cr-manager --filetype groovy

result

/**
 *******************************************************************************
 * Copyright © 2025 marslo                                                     *
 * Licensed under the MIT License, Version 2.0                                 *
 *******************************************************************************
**/

java-groovy


FILETYPE SUFFIXES
c, cpp, c++, cxx, h, hpp, hxx .c, .cpp, .cxx, .h, .hpp, .hxx
# without venv
$ poetry run cr-manager --filetype c

# with venv
$ cr-manager --filetype cpp

result

/**
 * Copyright © 2025 marslo
 * Licensed under the MIT License, Version 2.0
 */

c/cpp


Running as pre-commit Hooks

Install pre-commit Hooks

$ pre-commit install --install-hooks

Running Manually

Tip

without hook, you can run the cr-manager manually for all files in the repository.

$ pre-commit run cr-manager --all-files

# or particular file
$ pre-commit run cr-manager --files path/to/file

run cr-manager --all-files

Running Automatically

$ git commit -m "your commit message"

Unsupported Filetype

$ cr-manager [--update] --filetype python /path/to/file.txt

un-supported filetype


Running as Binary

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
# -- e.e. add to .txt files as python files --
$ cr-manager --filetype python /path/to/file.txt

Update Existing Copyright Headers

Tip

--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

Tip

--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

Help Message

$ poetry run python3 -m cli.crm --help
USAGE
  python3 -m cli.crm [--check | --delete | --update] [--copyright FILE] [--filetype TYPE]
                     [-r|--recursive] [--debug] [--verbose] [-h|--help] [-v|--version]
                     FILES ...

A tool to automatically add, update, or delete multi-format copyright headers.

POSITIONAL ARGUMENTS:
  FILES ...                 List of target files or directories to process.

ACTION MODES (default is add):
  -c, --check               Check mode: Verifies file copyright status (match, mismatch, or not found).
  -d, --delete              Delete mode: Removes detected copyright headers from files.
  -u, --update              Update mode: Forces replacement of copyright or adds it if missing.

OPTIONS:
  --copyright FILE          Specify the copyright template file path (default: COPYRIGHT).
  -t, --filetype TYPE       Force override a filetype instead of auto-detection.
                            If provided, displays a formatted preview for that type. Supported: bash, c,
                            c++, cpp, cxx, dockerfile, gradle, groovy, h, hpp, hxx, java, jenkinsfile,
                            python, sh, shell
  -r, --recursive           If FILES includes directories, process their contents recursively.
  --debug                   Debug mode: Preview the result of an action without modifying files.
  --verbose                 Show a detailed processing summary.
  -h, --help                Show this help message and exit.
  -v, --version             Show program's version number and exit.

About

the pre-commit hook to add/update/delete the copyright header in files/folders

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •