1pub mod commands;
5mod output;
6
7use clap::{Parser, Subcommand};
8use std::path::PathBuf;
9
10#[derive(Parser)]
13#[command(name = "twin")]
14#[command(about = "Git worktree and symlink environment manager", long_about = None)]
15pub struct Cli {
16 #[command(subcommand)]
17 pub command: Commands,
18}
19
20#[derive(Subcommand)]
22pub enum Commands {
23 Add(AddArgs),
25
26 Create(AddArgs),
28
29 #[command(alias = "ls")]
31 List(ListArgs),
32
33 #[command(alias = "delete")]
35 Remove(RemoveArgs),
36
37 Config(ConfigArgs),
39
40 Tui,
42
43 Init(InitArgs),
45}
46
47#[derive(Parser)]
49pub struct AddArgs {
50 pub branch: String,
52
53 pub path: Option<PathBuf>,
55
56 #[arg(short = 'b', long)]
58 pub new_branch: Option<String>,
59
60 #[arg(short = 'B', long)]
62 pub force_branch: Option<String>,
63
64 #[arg(short = 'd', long)]
66 pub detach: bool,
67
68 #[arg(long)]
70 pub lock: bool,
71
72 #[arg(long)]
74 pub track: bool,
75
76 #[arg(long)]
78 pub no_track: bool,
79
80 #[arg(long)]
82 pub guess_remote: bool,
83
84 #[arg(long)]
86 pub no_guess_remote: bool,
87
88 #[arg(long)]
90 pub no_checkout: bool,
91
92 #[arg(short = 'q', long)]
94 pub quiet: bool,
95
96 #[arg(short = 'c', long)]
98 pub config: Option<PathBuf>,
99
100 #[arg(long)]
102 pub print_path: bool,
103
104 #[arg(long)]
106 pub cd_command: bool,
107
108 #[arg(long)]
110 pub git_only: bool,
111
112 #[arg(long, help = "既存のブランチのみを使用し、新規ブランチを作成しない")]
114 pub no_create: bool,
115}
116
117#[derive(Parser)]
119pub struct ListArgs {
120 #[arg(short, long, default_value = "table")]
122 pub format: String,
123}
124
125#[derive(Parser)]
127pub struct RemoveArgs {
128 pub worktree: String,
130
131 #[arg(short, long)]
133 pub force: bool,
134
135 #[arg(short, long, value_name = "FILE")]
137 pub config: Option<PathBuf>,
138
139 #[arg(long)]
141 pub git_only: bool,
142
143 #[arg(short, long)]
145 pub quiet: bool,
146}
147
148#[derive(Parser)]
150pub struct ConfigArgs {
151 pub subcommand: Option<String>,
153
154 #[arg(long)]
156 pub show: bool,
157
158 #[arg(long)]
160 pub set: Option<String>,
161
162 #[arg(long)]
164 pub get: Option<String>,
165}
166
167#[derive(Parser)]
169pub struct InitArgs {
170 #[arg(short, long)]
172 pub path: Option<PathBuf>,
173
174 #[arg(short, long)]
176 pub force: bool,
177}