1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
//! # cargo-hold CLI
//!
//! The command-line interface for cargo-hold, a CI tool that ensures Cargo's
//! incremental compilation is reliable by managing timestamps using
//! content-based change detection.
//!
//! ## Installation
//!
//! ```bash
//! cargo install cargo-hold
//! # or with cargo-binstall:
//! cargo binstall cargo-hold
//! ```
//!
//! ## Commands
//!
//! - **anchor**: Main CI command - restores timestamps and updates metadata
//! - **salvage**: Restores file timestamps from metadata
//! - **stow**: Saves current file state to metadata
//! - **bilge**: Clears metadata for a fresh start
//! - **heave**: Garbage collection for build artifacts
//! - **voyage**: Combined anchor + heave for complete CI workflow
//!
//! ## Quick Start
//!
//! In your CI pipeline:
//!
//! ```bash
//! # Basic usage - restore timestamps before building
//! cargo hold anchor
//! cargo build --release
//!
//! # With garbage collection
//! cargo hold voyage --max-target-size 5G
//! cargo build --release
//! ```
//!
//! ## Environment Variables
//!
//! - `CARGO_HOLD_TARGET_DIR`: Override target directory (default: ./target)
//! - `CARGO_HOLD_METADATA_PATH`: Custom metadata file location
//! - `CARGO_HOLD_VERBOSE`: Enable verbose output
//! - `CARGO_HOLD_QUIET`: Silence all output except errors
//!
//! See individual commands for more environment variables.
use IsTerminal;
use Cli;