blob: cb995a2d8014e618aae9b546a714c8c6cd2a1ba4 [file] [view] [edit]
# Git Hooks
This directory contains Git hooks for the `flutter/packages` repository.
## Installation
### Option 1: Install All Hooks (Recommended)
To install all Git hooks, run the following commands from the root of the repository:
```bash
# Fetch dependencies for the githooks package
dart pub get -C script/githooks
# Run the installation script
dart script/githooks/bin/install_hooks.dart
```
### Option 2: Install Specific Hooks
To only use specific Git hooks in this directory long-term, create a script in your local `.git/hooks` directory that runs the desired hook.
For example, to install only the `pre-commit` hook, create `.git/hooks/pre-commit` with:
```bash
#!/usr/bin/env bash
exec dart script/githooks/bin/main.dart pre-commit "$@"
```
Then, make it executable and ensure Git uses your local `.git/hooks` directory:
```bash
chmod +x .git/hooks/pre-commit
git config --unset core.hooksPath
```
## Uninstallation
### Uninstall All Hooks
If you installed all hooks using Option 1, you can uninstall them by running:
```bash
git config --unset core.hooksPath
```
### Uninstall Specific Hooks
If you manually added a specific Git hook (Option 2), you can uninstall it by deleting the script from your `.git/hooks` directory:
```bash
rm .git/hooks/pre-commit
```
### Bypass Hooks Temporarily
To skip running hooks for a single action, pass the `--no-verify` flag. For example, to bypass the pre-commit hook during a commit:
```bash
git commit --no-verify
```
## Available Hooks
### pre-commit
The `pre-commit` hook runs automatically when you run `git commit` and performs the following checks on any staged changes:
1. **Formatting**: It runs `dart run script/tool/bin/flutter_plugin_tools.dart format --run-on-staged-packages` to verify that all staged files in the targeted packages are correctly formatted.
2. **Static Analysis**: If formatting passes, it runs `dart run script/tool/bin/flutter_plugin_tools.dart analyze --run-on-staged-packages --dart` to run static analysis on the staged packages.
If either check fails, it aborts the commit. To bypass the hook (for a WIP commit, for example), you can use the `--no-verify` flag:
```bash
git commit -m "WIP" --no-verify
```