Skip to main content

git_policy_cli/
command_branch_table.rs

1//! What:
2//!  The complete option table of `git branch` in Git 2.56.0.
3//! Why:
4//!  Whether `git branch <name>` creates a branch depends on which action options were
5//!      given,
6//!  and whether a token is a name depends on each option's arity.
7//!  Rows follow
8//!      `options[]` in `cmd_branch` (builtin/branch.c:992-1050) in source order.
9//!
10//! In TS you'd write (pseudocode):
11//! ```ts
12//! // export const BRANCH_TABLE: readonly OptionSpec[] = [ ... ];
13//! ```
14
15/// What:
16///  Bring the row type,
17///  its builder and the arity names into this file.
18///  `UNREAD` is the
19///       identifier of rows no branch fact reads.
20/// Why:
21///   The table is data for the shared tokenizer.
22///
23/// In TS you'd write (pseudocode):
24/// ```ts
25/// import { Arity, type OptionSpec, row, UNREAD } from './command_options.ts';
26/// ```
27use super::command_options::{Arity, OptionSpec, UNREAD, row};
28
29/// `-t`,
30///  `--track[=(direct|inherit)]`:
31///  writes the tracking mode.
32pub const TRACK: u16 = 1;
33/// `--set-upstream`:
34///  hidden,
35///  writes the tracking mode Git refuses when creating.
36pub const SET_UPSTREAM: u16 = 2;
37/// `-u`,
38///  `--set-upstream-to=<upstream>`.
39pub const SET_UPSTREAM_TO: u16 = 3;
40/// `--unset-upstream`.
41pub const UNSET_UPSTREAM: u16 = 4;
42/// `-r`/`--remotes` and `-a`/`--all`:
43///  both change the listed kind of ref.
44pub const KIND: u16 = 5;
45/// `--contains`,
46///  `--no-contains`,
47///  `--with`,
48///  `--without`,
49///  `--merged`,
50///  `--no-merged`,
51///  `--forked`.
52pub const FILTER: u16 = 6;
53/// `-d`,
54///  `--delete`.
55pub const DELETE: u16 = 7;
56/// `-D`.
57pub const DELETE_FORCE: u16 = 8;
58/// `-m`,
59///  `--move`.
60pub const MOVE: u16 = 9;
61/// `-M`.
62pub const MOVE_FORCE: u16 = 10;
63/// `-c`,
64///  `--copy`.
65pub const COPY: u16 = 11;
66/// `-C`.
67pub const COPY_FORCE: u16 = 12;
68/// `-l`,
69///  `--list`.
70pub const LIST: u16 = 13;
71/// `--show-current`.
72pub const SHOW_CURRENT: u16 = 14;
73/// `--edit-description`.
74pub const EDIT_DESCRIPTION: u16 = 15;
75/// `--delete-merged=<pattern>`.
76pub const DELETE_MERGED: u16 = 16;
77/// `--dry-run`,
78///  valid only with `--delete-merged`.
79pub const DRY_RUN: u16 = 17;
80/// `--points-at=<object>`.
81pub const POINTS_AT: u16 = 18;
82/// `--recurse-submodules`:
83///  Git accepts it only when creating a branch.
84pub const RECURSE_SUBMODULES: u16 = 19;
85
86/// What:
87///  `pub const NAME: &[OptionSpec] = &[...]` is a table baked into the program.
88/// Why:
89///   `--contains` and its relatives are `PARSE_OPT_LASTARG_DEFAULT`:
90///  they take the next
91///       token unless they are last.
92///  `--color`,
93///  `--abbrev`,
94///  `--column` and `--track` take
95///       an attached value only,
96///  so `git branch --color name` creates `name`.
97///
98/// In TS you'd write (pseudocode):
99/// ```ts
100/// export const BRANCH_TABLE = [row(UNREAD, 'v', 'verbose', 'none', true), /* ... */] as const;
101/// ```
102pub const BRANCH_TABLE: &[OptionSpec] = &[
103    row(UNREAD, Some(b'v'), Some("verbose"), Arity::None, true),
104    row(UNREAD, Some(b'q'), Some("quiet"), Arity::None, true),
105    row(TRACK, Some(b't'), Some("track"), Arity::Optional, true),
106    row(SET_UPSTREAM, None, Some("set-upstream"), Arity::None, true),
107    row(
108        SET_UPSTREAM_TO,
109        Some(b'u'),
110        Some("set-upstream-to"),
111        Arity::Required,
112        true,
113    ),
114    row(
115        UNSET_UPSTREAM,
116        None,
117        Some("unset-upstream"),
118        Arity::None,
119        true,
120    ),
121    row(UNREAD, None, Some("color"), Arity::Optional, true),
122    row(KIND, Some(b'r'), Some("remotes"), Arity::None, false),
123    row(FILTER, None, Some("contains"), Arity::LastArgDefault, false),
124    row(
125        FILTER,
126        None,
127        Some("no-contains"),
128        Arity::LastArgDefault,
129        false,
130    ),
131    row(FILTER, None, Some("with"), Arity::LastArgDefault, false),
132    row(FILTER, None, Some("without"), Arity::LastArgDefault, false),
133    row(UNREAD, None, Some("abbrev"), Arity::Optional, true),
134    row(KIND, Some(b'a'), Some("all"), Arity::None, false),
135    row(DELETE, Some(b'd'), Some("delete"), Arity::None, true),
136    row(DELETE_FORCE, Some(b'D'), None, Arity::None, true),
137    row(MOVE, Some(b'm'), Some("move"), Arity::None, true),
138    row(MOVE_FORCE, Some(b'M'), None, Arity::None, true),
139    row(UNREAD, None, Some("omit-empty"), Arity::None, true),
140    row(COPY, Some(b'c'), Some("copy"), Arity::None, true),
141    row(COPY_FORCE, Some(b'C'), None, Arity::None, true),
142    row(LIST, Some(b'l'), Some("list"), Arity::None, true),
143    row(SHOW_CURRENT, None, Some("show-current"), Arity::None, true),
144    row(UNREAD, None, Some("create-reflog"), Arity::None, true),
145    row(
146        EDIT_DESCRIPTION,
147        None,
148        Some("edit-description"),
149        Arity::None,
150        true,
151    ),
152    row(
153        DELETE_MERGED,
154        None,
155        Some("delete-merged"),
156        Arity::Required,
157        false,
158    ),
159    row(DRY_RUN, None, Some("dry-run"), Arity::None, true),
160    row(UNREAD, Some(b'f'), Some("force"), Arity::None, true),
161    row(FILTER, None, Some("merged"), Arity::LastArgDefault, false),
162    row(
163        FILTER,
164        None,
165        Some("no-merged"),
166        Arity::LastArgDefault,
167        false,
168    ),
169    row(FILTER, None, Some("forked"), Arity::Required, false),
170    row(UNREAD, None, Some("column"), Arity::Optional, true),
171    row(UNREAD, None, Some("sort"), Arity::Required, true),
172    row(POINTS_AT, None, Some("points-at"), Arity::Required, true),
173    row(UNREAD, Some(b'i'), Some("ignore-case"), Arity::None, true),
174    row(
175        RECURSE_SUBMODULES,
176        None,
177        Some("recurse-submodules"),
178        Arity::None,
179        true,
180    ),
181    row(UNREAD, None, Some("format"), Arity::Required, true),
182];