πŸ‘ Herdsman

A Dart command-line tool for managing Git hooks in your repository. Herdsman simplifies the process of initializing, applying, and activating Git hooks by organizing them in a dedicated .herdsman/githooks directory.

πŸ“‹ Features

  • πŸ“ Initialize Git hooks directory structure
  • πŸ”¨ Apply custom Git hooks from samples
  • βœ… Activate and make hooks executable
  • 🎯 Verbose mode for detailed operation logs
  • πŸ”„ Easy hook management and organization

πŸš€ Installation

Add herdsman to your project:

dev_dependencies:
  herdsman: version

or command

dart pub add herdsman

πŸ“– Usage

dart run herdsman [flags] [arguments]

Available Flags

Flag Description
-h, --help Print usage information
-v, --verbose Show additional command output with emoji indicators
-i, --init Initialize git hooks directory structure
-c, --active Activate herdsman git hooks
-a, --apply Apply git hooks from samples
--version Print the tool version

🎯 Commands

Initialize Git Hooks

Initialize the .herdsman/githooks directory and configure Git to use it:

dart run herdsman -i

With verbose output:

dart run herdsman -i -v

What it does:

  • πŸ“ Creates .herdsman/githooks directory
  • πŸ”„ Copies existing Git hooks from .git/hooks
  • βš™οΈ Configures Git to use .herdsman/githooks as hooks path
  • ❌ Validates that you're in a Git repository

Apply Git Hooks

Apply Git hooks from sample files:

dart run herdsman -a <hook-name>

Example:

dart run herdsman -a pre-commit pre-merge

With verbose output:

dart run herdsman -a pre-commit -v

What it does:

  • πŸ”¨ Creates git hook from .sample file
  • ✍️ Writes shebang and error handling
  • πŸ“„ Creates the hook file
  • πŸ—‘οΈ Removes the sample file
  • ⚠️ Skips if hook already exists
  • βœ… Active hook

Activate applies Git Hooks

Activate all existing Git hooks in the herdsman directory:

dart run herdsman -c

With verbose output:

dart run herdsman -c -v

What it does:

  • βš™οΈ Configures Git hooks path
  • βœ… Makes all hook files executable
  • πŸŽ‰ Confirms when all hooks are activated

πŸ“‚ Directory Structure

After initialization, your repository will have:

.herdsman/
└── githooks/
    β”œβ”€β”€ pre-commit
    β”œβ”€β”€ pre-push
    β”œβ”€β”€ commit-msg
    └── ... (other hooks)

πŸ’‘ Examples

Complete Setup Workflow

  1. Initialize herdsman:

    dart run herdsman -i -v
    
  2. Apply a pre-commit hook:

    dart run herdsman -a pre-commit -v
    
  3. Activate all hooks:

    dart run herdsman -c -v
    

Quick Setup

Initialize and activate in one go:

dart run herdsman -i