git 1.19.1 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +5 -1
  3. data/AI_POLICY.md +24 -0
  4. data/CHANGELOG.md +689 -0
  5. data/CODE_OF_CONDUCT.md +25 -0
  6. data/CONTRIBUTING.md +1175 -97
  7. data/GOVERNANCE.md +106 -0
  8. data/LICENSE +1 -1
  9. data/MAINTAINERS.md +17 -4
  10. data/README.md +476 -320
  11. data/UPGRADING.md +1138 -0
  12. data/git.gemspec +124 -36
  13. data/lib/git/author.rb +39 -7
  14. data/lib/git/author_info.rb +66 -0
  15. data/lib/git/branch.rb +615 -65
  16. data/lib/git/branch_delete_failure.rb +34 -0
  17. data/lib/git/branch_delete_result.rb +66 -0
  18. data/lib/git/branch_info.rb +237 -0
  19. data/lib/git/branches.rb +167 -44
  20. data/lib/git/command_line/base.rb +247 -0
  21. data/lib/git/command_line/capturing.rb +308 -0
  22. data/lib/git/command_line/result.rb +88 -0
  23. data/lib/git/command_line/streaming.rb +236 -0
  24. data/lib/git/command_line.rb +52 -0
  25. data/lib/git/commands/add.rb +139 -0
  26. data/lib/git/commands/am/abort.rb +43 -0
  27. data/lib/git/commands/am/apply.rb +263 -0
  28. data/lib/git/commands/am/continue.rb +43 -0
  29. data/lib/git/commands/am/quit.rb +43 -0
  30. data/lib/git/commands/am/retry.rb +49 -0
  31. data/lib/git/commands/am/show_current_patch.rb +64 -0
  32. data/lib/git/commands/am/skip.rb +42 -0
  33. data/lib/git/commands/am.rb +33 -0
  34. data/lib/git/commands/apply.rb +242 -0
  35. data/lib/git/commands/archive/list_formats.rb +46 -0
  36. data/lib/git/commands/archive.rb +145 -0
  37. data/lib/git/commands/arguments.rb +4521 -0
  38. data/lib/git/commands/base.rb +502 -0
  39. data/lib/git/commands/branch/copy.rb +102 -0
  40. data/lib/git/commands/branch/create.rb +177 -0
  41. data/lib/git/commands/branch/delete.rb +88 -0
  42. data/lib/git/commands/branch/list.rb +178 -0
  43. data/lib/git/commands/branch/move.rb +102 -0
  44. data/lib/git/commands/branch/set_upstream.rb +86 -0
  45. data/lib/git/commands/branch/show_current.rb +49 -0
  46. data/lib/git/commands/branch/unset_upstream.rb +53 -0
  47. data/lib/git/commands/branch.rb +34 -0
  48. data/lib/git/commands/cat_file/batch.rb +385 -0
  49. data/lib/git/commands/cat_file/filtered.rb +105 -0
  50. data/lib/git/commands/cat_file/raw.rb +271 -0
  51. data/lib/git/commands/cat_file.rb +49 -0
  52. data/lib/git/commands/checkout/branch.rb +153 -0
  53. data/lib/git/commands/checkout/files.rb +116 -0
  54. data/lib/git/commands/checkout.rb +38 -0
  55. data/lib/git/commands/checkout_index.rb +106 -0
  56. data/lib/git/commands/clean.rb +102 -0
  57. data/lib/git/commands/clone.rb +241 -0
  58. data/lib/git/commands/commit.rb +273 -0
  59. data/lib/git/commands/commit_tree.rb +101 -0
  60. data/lib/git/commands/config_option_syntax/add.rb +86 -0
  61. data/lib/git/commands/config_option_syntax/get.rb +121 -0
  62. data/lib/git/commands/config_option_syntax/get_all.rb +118 -0
  63. data/lib/git/commands/config_option_syntax/get_color.rb +95 -0
  64. data/lib/git/commands/config_option_syntax/get_color_bool.rb +96 -0
  65. data/lib/git/commands/config_option_syntax/get_regexp.rb +119 -0
  66. data/lib/git/commands/config_option_syntax/get_urlmatch.rb +111 -0
  67. data/lib/git/commands/config_option_syntax/list.rb +111 -0
  68. data/lib/git/commands/config_option_syntax/remove_section.rb +79 -0
  69. data/lib/git/commands/config_option_syntax/rename_section.rb +83 -0
  70. data/lib/git/commands/config_option_syntax/replace_all.rb +109 -0
  71. data/lib/git/commands/config_option_syntax/set.rb +119 -0
  72. data/lib/git/commands/config_option_syntax/unset.rb +92 -0
  73. data/lib/git/commands/config_option_syntax/unset_all.rb +94 -0
  74. data/lib/git/commands/config_option_syntax.rb +56 -0
  75. data/lib/git/commands/describe.rb +156 -0
  76. data/lib/git/commands/diff.rb +657 -0
  77. data/lib/git/commands/diff_files.rb +519 -0
  78. data/lib/git/commands/diff_index.rb +499 -0
  79. data/lib/git/commands/fetch.rb +354 -0
  80. data/lib/git/commands/fsck.rb +138 -0
  81. data/lib/git/commands/gc.rb +134 -0
  82. data/lib/git/commands/grep.rb +339 -0
  83. data/lib/git/commands/init.rb +101 -0
  84. data/lib/git/commands/log.rb +634 -0
  85. data/lib/git/commands/ls_files.rb +195 -0
  86. data/lib/git/commands/ls_remote.rb +161 -0
  87. data/lib/git/commands/ls_tree.rb +135 -0
  88. data/lib/git/commands/maintenance/register.rb +77 -0
  89. data/lib/git/commands/maintenance/run.rb +109 -0
  90. data/lib/git/commands/maintenance/start.rb +71 -0
  91. data/lib/git/commands/maintenance/stop.rb +60 -0
  92. data/lib/git/commands/maintenance/unregister.rb +84 -0
  93. data/lib/git/commands/maintenance.rb +31 -0
  94. data/lib/git/commands/merge/abort.rb +44 -0
  95. data/lib/git/commands/merge/continue.rb +44 -0
  96. data/lib/git/commands/merge/quit.rb +46 -0
  97. data/lib/git/commands/merge/start.rb +250 -0
  98. data/lib/git/commands/merge.rb +28 -0
  99. data/lib/git/commands/merge_base.rb +91 -0
  100. data/lib/git/commands/mv.rb +82 -0
  101. data/lib/git/commands/name_rev.rb +119 -0
  102. data/lib/git/commands/pull.rb +382 -0
  103. data/lib/git/commands/push.rb +251 -0
  104. data/lib/git/commands/read_tree.rb +154 -0
  105. data/lib/git/commands/remote/add.rb +96 -0
  106. data/lib/git/commands/remote/get_url.rb +68 -0
  107. data/lib/git/commands/remote/list.rb +56 -0
  108. data/lib/git/commands/remote/prune.rb +63 -0
  109. data/lib/git/commands/remote/remove.rb +52 -0
  110. data/lib/git/commands/remote/rename.rb +76 -0
  111. data/lib/git/commands/remote/set_branches.rb +70 -0
  112. data/lib/git/commands/remote/set_head.rb +89 -0
  113. data/lib/git/commands/remote/set_url.rb +78 -0
  114. data/lib/git/commands/remote/set_url_add.rb +70 -0
  115. data/lib/git/commands/remote/set_url_delete.rb +71 -0
  116. data/lib/git/commands/remote/show.rb +77 -0
  117. data/lib/git/commands/remote/update.rb +79 -0
  118. data/lib/git/commands/remote.rb +42 -0
  119. data/lib/git/commands/repack.rb +281 -0
  120. data/lib/git/commands/reset.rb +154 -0
  121. data/lib/git/commands/rev_parse.rb +304 -0
  122. data/lib/git/commands/revert/abort.rb +45 -0
  123. data/lib/git/commands/revert/continue.rb +62 -0
  124. data/lib/git/commands/revert/quit.rb +47 -0
  125. data/lib/git/commands/revert/skip.rb +44 -0
  126. data/lib/git/commands/revert/start.rb +158 -0
  127. data/lib/git/commands/revert.rb +29 -0
  128. data/lib/git/commands/rm.rb +113 -0
  129. data/lib/git/commands/show.rb +632 -0
  130. data/lib/git/commands/show_ref/exclude_existing.rb +119 -0
  131. data/lib/git/commands/show_ref/exists.rb +80 -0
  132. data/lib/git/commands/show_ref/list.rb +149 -0
  133. data/lib/git/commands/show_ref/verify.rb +122 -0
  134. data/lib/git/commands/show_ref.rb +42 -0
  135. data/lib/git/commands/stash/apply.rb +81 -0
  136. data/lib/git/commands/stash/branch.rb +67 -0
  137. data/lib/git/commands/stash/clear.rb +43 -0
  138. data/lib/git/commands/stash/create.rb +60 -0
  139. data/lib/git/commands/stash/drop.rb +73 -0
  140. data/lib/git/commands/stash/list.rb +43 -0
  141. data/lib/git/commands/stash/pop.rb +87 -0
  142. data/lib/git/commands/stash/push.rb +112 -0
  143. data/lib/git/commands/stash/show.rb +158 -0
  144. data/lib/git/commands/stash/store.rb +72 -0
  145. data/lib/git/commands/stash.rb +38 -0
  146. data/lib/git/commands/status.rb +174 -0
  147. data/lib/git/commands/symbolic_ref/delete.rb +72 -0
  148. data/lib/git/commands/symbolic_ref/read.rb +99 -0
  149. data/lib/git/commands/symbolic_ref/update.rb +79 -0
  150. data/lib/git/commands/symbolic_ref.rb +38 -0
  151. data/lib/git/commands/tag/create.rb +142 -0
  152. data/lib/git/commands/tag/delete.rb +57 -0
  153. data/lib/git/commands/tag/list.rb +146 -0
  154. data/lib/git/commands/tag/verify.rb +71 -0
  155. data/lib/git/commands/tag.rb +26 -0
  156. data/lib/git/commands/update_ref/batch.rb +145 -0
  157. data/lib/git/commands/update_ref/delete.rb +90 -0
  158. data/lib/git/commands/update_ref/update.rb +103 -0
  159. data/lib/git/commands/update_ref.rb +42 -0
  160. data/lib/git/commands/version.rb +60 -0
  161. data/lib/git/commands/worktree/add.rb +139 -0
  162. data/lib/git/commands/worktree/list.rb +64 -0
  163. data/lib/git/commands/worktree/lock.rb +58 -0
  164. data/lib/git/commands/worktree/management_base.rb +51 -0
  165. data/lib/git/commands/worktree/move.rb +66 -0
  166. data/lib/git/commands/worktree/prune.rb +67 -0
  167. data/lib/git/commands/worktree/remove.rb +63 -0
  168. data/lib/git/commands/worktree/repair.rb +76 -0
  169. data/lib/git/commands/worktree/unlock.rb +47 -0
  170. data/lib/git/commands/worktree.rb +43 -0
  171. data/lib/git/commands/write_tree.rb +68 -0
  172. data/lib/git/commands.rb +88 -0
  173. data/lib/git/config.rb +72 -5
  174. data/lib/git/config_entry_info.rb +106 -0
  175. data/lib/git/configuring.rb +795 -0
  176. data/lib/git/detached_head_info.rb +57 -0
  177. data/lib/git/diff.rb +437 -86
  178. data/lib/git/diff_file_numstat_info.rb +31 -0
  179. data/lib/git/diff_file_patch_info.rb +136 -0
  180. data/lib/git/diff_file_raw_info.rb +129 -0
  181. data/lib/git/diff_info.rb +162 -0
  182. data/lib/git/diff_path_status.rb +107 -0
  183. data/lib/git/diff_result.rb +34 -0
  184. data/lib/git/diff_stats.rb +111 -0
  185. data/lib/git/dirstat_info.rb +102 -0
  186. data/lib/git/encoding_utils.rb +32 -1
  187. data/lib/git/errors.rb +285 -0
  188. data/lib/git/escaped_path.rb +57 -5
  189. data/lib/git/execution_context/global.rb +31 -0
  190. data/lib/git/execution_context/repository.rb +151 -0
  191. data/lib/git/execution_context.rb +559 -0
  192. data/lib/git/factories.rb +813 -0
  193. data/lib/git/file_ref.rb +77 -0
  194. data/lib/git/fsck_object.rb +56 -0
  195. data/lib/git/fsck_result.rb +132 -0
  196. data/lib/git/log.rb +306 -90
  197. data/lib/git/object.rb +563 -141
  198. data/lib/git/parsers/branch.rb +240 -0
  199. data/lib/git/parsers/cat_file.rb +111 -0
  200. data/lib/git/parsers/config_entry.rb +110 -0
  201. data/lib/git/parsers/diff.rb +792 -0
  202. data/lib/git/parsers/fsck.rb +144 -0
  203. data/lib/git/parsers/grep.rb +42 -0
  204. data/lib/git/parsers/ls_remote.rb +79 -0
  205. data/lib/git/parsers/ls_tree.rb +58 -0
  206. data/lib/git/parsers/remote.rb +162 -0
  207. data/lib/git/parsers/stash.rb +292 -0
  208. data/lib/git/parsers/status.rb +251 -0
  209. data/lib/git/parsers/tag.rb +341 -0
  210. data/lib/git/parsers/worktree.rb +185 -0
  211. data/lib/git/path_resolver.rb +206 -0
  212. data/lib/git/remote.rb +165 -12
  213. data/lib/git/remote_info.rb +203 -0
  214. data/lib/git/repository/branching.rb +964 -0
  215. data/lib/git/repository/committing.rb +246 -0
  216. data/lib/git/repository/context_helpers.rb +293 -0
  217. data/lib/git/repository/diffing.rb +785 -0
  218. data/lib/git/repository/inspecting.rb +252 -0
  219. data/lib/git/repository/logging.rb +410 -0
  220. data/lib/git/repository/maintenance.rb +65 -0
  221. data/lib/git/repository/merging.rb +451 -0
  222. data/lib/git/repository/object_operations.rb +1551 -0
  223. data/lib/git/repository/remote_operations.rb +984 -0
  224. data/lib/git/repository/shared_private.rb +120 -0
  225. data/lib/git/repository/staging.rb +587 -0
  226. data/lib/git/repository/stashing.rb +623 -0
  227. data/lib/git/repository/status_operations.rb +249 -0
  228. data/lib/git/repository/worktree_operations.rb +339 -0
  229. data/lib/git/repository.rb +484 -2
  230. data/lib/git/stash.rb +109 -12
  231. data/lib/git/stash_info.rb +102 -0
  232. data/lib/git/stashes.rb +169 -26
  233. data/lib/git/status.rb +308 -122
  234. data/lib/git/status_file_info.rb +258 -0
  235. data/lib/git/status_info.rb +189 -0
  236. data/lib/git/tag_delete_failure.rb +34 -0
  237. data/lib/git/tag_delete_result.rb +66 -0
  238. data/lib/git/tag_info.rb +99 -0
  239. data/lib/git/url.rb +15 -8
  240. data/lib/git/version.rb +113 -2
  241. data/lib/git/version_constraint.rb +85 -0
  242. data/lib/git/worktree.rb +150 -8
  243. data/lib/git/worktree_info.rb +128 -0
  244. data/lib/git/worktrees.rb +118 -13
  245. data/lib/git.rb +632 -234
  246. metadata +369 -54
  247. data/.github/stale.yml +0 -25
  248. data/.github/workflows/continuous_integration.yml +0 -49
  249. data/.gitignore +0 -10
  250. data/Dockerfile.changelog-rs +0 -12
  251. data/Gemfile +0 -5
  252. data/ISSUE_TEMPLATE.md +0 -15
  253. data/PULL_REQUEST_TEMPLATE.md +0 -9
  254. data/RELEASING.md +0 -70
  255. data/Rakefile +0 -60
  256. data/lib/git/base/factory.rb +0 -99
  257. data/lib/git/base.rb +0 -711
  258. data/lib/git/command_line_result.rb +0 -86
  259. data/lib/git/failed_error.rb +0 -53
  260. data/lib/git/git_execute_error.rb +0 -7
  261. data/lib/git/index.rb +0 -5
  262. data/lib/git/lib.rb +0 -1328
  263. data/lib/git/path.rb +0 -31
  264. data/lib/git/signaled_error.rb +0 -50
  265. data/lib/git/working_directory.rb +0 -4
@@ -0,0 +1,304 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git rev-parse` command
8
+ #
9
+ # Picks out and massages parameters for other git commands. Most commonly
10
+ # used to resolve a revision specifier (branch name, tag, abbreviated SHA)
11
+ # to its full object name. Also provides repository metadata queries and
12
+ # argument classification for porcelain scripts.
13
+ #
14
+ # The `--parseopt` and `--sq-quote` operation modes are excluded because
15
+ # they require stdin interaction or provide no value in a Ruby library.
16
+ #
17
+ # @example Resolve HEAD to its full SHA
18
+ # rev_parse = Git::Commands::RevParse.new(execution_context)
19
+ # result = rev_parse.call('HEAD', verify: true)
20
+ #
21
+ # @example Query the repository top-level directory
22
+ # rev_parse = Git::Commands::RevParse.new(execution_context)
23
+ # result = rev_parse.call(show_toplevel: true)
24
+ #
25
+ # @example List all branch refs
26
+ # rev_parse = Git::Commands::RevParse.new(execution_context)
27
+ # result = rev_parse.call(branches: true)
28
+ #
29
+ # @note `arguments` block audited against https://git-scm.com/docs/git-rev-parse/2.53.0
30
+ #
31
+ # @see https://git-scm.com/docs/git-rev-parse git-rev-parse
32
+ #
33
+ # @api private
34
+ #
35
+ class RevParse < Git::Commands::Base
36
+ arguments do
37
+ literal 'rev-parse'
38
+
39
+ # Filtering
40
+ flag_option :revs_only
41
+ flag_option :no_revs
42
+ flag_option :flags, negatable: true
43
+
44
+ # Output
45
+ value_option :default
46
+ value_option :prefix
47
+ flag_option :verify
48
+ flag_option %i[quiet q]
49
+ flag_option :sq
50
+ flag_or_value_option :short, inline: true
51
+ flag_option :not
52
+ flag_or_value_option :abbrev_ref, inline: true
53
+ flag_option :symbolic
54
+ flag_option :symbolic_full_name
55
+ value_option :output_object_format, inline: true
56
+
57
+ # Objects
58
+ flag_option :all
59
+ flag_or_value_option :branches, inline: true
60
+ flag_or_value_option :tags, inline: true
61
+ flag_or_value_option :remotes, inline: true
62
+ value_option :glob, inline: true
63
+ value_option :exclude, inline: true, repeatable: true
64
+ value_option :exclude_hidden, inline: true
65
+ value_option :disambiguate, inline: true
66
+
67
+ # Files
68
+ flag_option :local_env_vars
69
+ value_option :path_format, inline: true, repeatable: true
70
+ flag_option :git_dir
71
+ flag_option :absolute_git_dir
72
+ flag_option :git_common_dir
73
+ flag_option :is_inside_git_dir
74
+ flag_option :is_inside_work_tree
75
+ flag_option :is_bare_repository
76
+ flag_option :is_shallow_repository
77
+ value_option :resolve_git_dir
78
+ value_option :git_path
79
+ flag_option :show_cdup
80
+ flag_option :show_prefix
81
+ flag_option :show_toplevel
82
+ flag_option :show_superproject_working_tree
83
+ flag_option :shared_index_path
84
+ flag_or_value_option :show_object_format, inline: true
85
+ flag_option :show_ref_format
86
+
87
+ # Date conversion
88
+ value_option %i[since after], inline: true
89
+ value_option %i[until before], inline: true
90
+
91
+ execution_option :chdir
92
+
93
+ end_of_options as: '--end-of-options'
94
+
95
+ # Positional arguments (revisions, file paths, or mixed).
96
+ #
97
+ # In git rev-parse, `--` separates verified arguments from those
98
+ # echoed back without verification. Because this operand is after
99
+ # the end_of_options boundary, callers can freely include `--` and
100
+ # hyphen-prefixed values (e.g. branch names starting with `-`).
101
+ operand :args, repeatable: true
102
+ end
103
+
104
+ # @overload call(*args, **options)
105
+ #
106
+ # Execute the `git rev-parse` command
107
+ #
108
+ # @param args [Array<String>] zero or more revision specifiers,
109
+ # object names, or file paths to parse. Include `'--'` to
110
+ # separate verified arguments from those echoed back without
111
+ # verification, e.g. `call('HEAD', '--', 'file.txt')`
112
+ #
113
+ # @param options [Hash] command options
114
+ #
115
+ # @option options [Boolean, nil] :revs_only (nil) do not output flags
116
+ # and parameters not meant for `git rev-list`
117
+ #
118
+ # @option options [Boolean, nil] :no_revs (nil) do not output flags and
119
+ # parameters meant for `git rev-list`
120
+ #
121
+ # @option options [Boolean, nil] :flags (nil) do not output non-flag
122
+ # parameters (`--flags`)
123
+ #
124
+ # @option options [Boolean, nil] :no_flags (nil) do not output flag
125
+ # parameters (`--no-flags`)
126
+ #
127
+ # @option options [String] :default (nil) use this value if no
128
+ # parameter is given by the user
129
+ #
130
+ # @option options [String] :prefix (nil) behave as if invoked from
131
+ # this subdirectory of the working tree
132
+ #
133
+ # @option options [Boolean, nil] :verify (nil) verify that exactly one
134
+ # parameter is provided and that it can be resolved to an object
135
+ #
136
+ # @option options [Boolean, nil] :quiet (nil) do not output an error
137
+ # message if the first argument is not a valid object name;
138
+ # exit with non-zero status silently
139
+ #
140
+ # Only meaningful with `:verify`.
141
+ #
142
+ # Alias: :q
143
+ #
144
+ # @option options [Boolean, nil] :sq (nil) output a single line
145
+ # properly quoted for shell consumption
146
+ #
147
+ # @option options [Boolean, Integer, String, nil] :short (nil) shorten
148
+ # the object name to a unique prefix
149
+ #
150
+ # When `true`, emits `--short` (git default length). When an Integer
151
+ # or String, emits `--short=<length>`.
152
+ #
153
+ # @option options [Boolean, nil] :not (nil) prefix object names with
154
+ # `^` and strip `^` from names that already have one
155
+ #
156
+ # @option options [Boolean, String, nil] :abbrev_ref (nil) output a
157
+ # non-ambiguous short name of the object
158
+ #
159
+ # When `true`, emits `--abbrev-ref`. When a String (`"strict"`
160
+ # or `"loose"`), emits `--abbrev-ref=<mode>`.
161
+ #
162
+ # @option options [Boolean, nil] :symbolic (nil) output object names
163
+ # in a form as close to the original input as possible
164
+ #
165
+ # @option options [Boolean, nil] :symbolic_full_name (nil) like
166
+ # `:symbolic` but omit non-ref input and show full refnames
167
+ #
168
+ # @option options [String] :output_object_format (nil) translate
169
+ # object identifiers to the specified format
170
+ #
171
+ # Accepted values are `"sha1"`, `"sha256"`, and `"storage"`.
172
+ #
173
+ # @option options [Boolean, nil] :all (nil) show all refs found in
174
+ # `refs/`
175
+ #
176
+ # @option options [Boolean, String, nil] :branches (nil) show all
177
+ # branches
178
+ #
179
+ # When `true`, emits `--branches`. When a String, emits
180
+ # `--branches=<pattern>`.
181
+ #
182
+ # @option options [Boolean, String, nil] :tags (nil) show all tags
183
+ #
184
+ # When `true`, emits `--tags`. When a String, emits
185
+ # `--tags=<pattern>`.
186
+ #
187
+ # @option options [Boolean, String, nil] :remotes (nil) show all
188
+ # remote-tracking branches
189
+ #
190
+ # When `true`, emits `--remotes`. When a String, emits
191
+ # `--remotes=<pattern>`.
192
+ #
193
+ # @option options [String] :glob (nil) show all refs matching
194
+ # the shell glob pattern
195
+ #
196
+ # @option options [String, Array<String>] :exclude (nil) exclude
197
+ # refs matching the glob pattern from the next `--all`,
198
+ # `--branches`, `--tags`, `--remotes`, or `--glob`
199
+ #
200
+ # @option options [String] :disambiguate (nil) show every object
201
+ # whose name begins with the given prefix
202
+ #
203
+ # @option options [String] :exclude_hidden (nil) do not include
204
+ # refs that would be hidden by the specified protocol
205
+ #
206
+ # Accepted values are `"fetch"`, `"receive"`, and `"uploadpack"`.
207
+ # Affects the next `--all` or `--glob` and is cleared after
208
+ # processing them.
209
+ #
210
+ # @option options [Boolean, nil] :local_env_vars (nil) list the
211
+ # `GIT_*` environment variables local to the repository
212
+ #
213
+ # @option options [String, Array<String>] :path_format (nil) control
214
+ # whether paths output by subsequent path-related options are
215
+ # absolute or relative
216
+ #
217
+ # Accepted values are `"absolute"` and `"relative"`. May be
218
+ # given multiple times; each instance affects the arguments
219
+ # that follow it on the command line.
220
+ #
221
+ # @option options [Boolean, nil] :git_dir (nil) show `$GIT_DIR` if
222
+ # defined, otherwise show the path to the `.git` directory
223
+ #
224
+ # @option options [Boolean, nil] :absolute_git_dir (nil) like
225
+ # `:git_dir` but always output the canonicalized absolute path
226
+ #
227
+ # @option options [Boolean, nil] :git_common_dir (nil) show
228
+ # `$GIT_COMMON_DIR` if defined, else `$GIT_DIR`
229
+ #
230
+ # @option options [Boolean, nil] :is_inside_git_dir (nil) print
231
+ # `"true"` when the current working directory is below the
232
+ # repository directory, `"false"` otherwise
233
+ #
234
+ # @option options [Boolean, nil] :is_inside_work_tree (nil) print
235
+ # `"true"` when inside the work tree, `"false"` otherwise
236
+ #
237
+ # @option options [Boolean, nil] :is_bare_repository (nil) print
238
+ # `"true"` when the repository is bare, `"false"` otherwise
239
+ #
240
+ # @option options [Boolean, nil] :is_shallow_repository (nil) print
241
+ # `"true"` when the repository is shallow, `"false"` otherwise
242
+ #
243
+ # @option options [String] :resolve_git_dir (nil) check if the
244
+ # given path is a valid repository or a gitfile that points at
245
+ # one and print the location
246
+ #
247
+ # @option options [String] :git_path (nil) resolve
248
+ # `"$GIT_DIR/<path>"` taking relocation variables into account
249
+ #
250
+ # @option options [Boolean, nil] :show_cdup (nil) show the path of
251
+ # the top-level directory relative to the current directory
252
+ #
253
+ # @option options [Boolean, nil] :show_prefix (nil) show the path of
254
+ # the current directory relative to the top-level directory
255
+ #
256
+ # @option options [Boolean, nil] :show_toplevel (nil) show the
257
+ # absolute path of the top-level directory of the working tree
258
+ #
259
+ # @option options [Boolean, nil] :show_superproject_working_tree (nil)
260
+ # show the absolute path of the root of the superproject's
261
+ # working tree if the current repository is a submodule
262
+ #
263
+ # @option options [Boolean, nil] :shared_index_path (nil) show the
264
+ # path to the shared index file in split index mode
265
+ #
266
+ # @option options [Boolean, String, nil] :show_object_format (nil)
267
+ # show the object format (hash algorithm) used for the
268
+ # repository
269
+ #
270
+ # When `true`, emits `--show-object-format` (defaults to
271
+ # `"storage"`). When a String (`"storage"`, `"input"`, or
272
+ # `"output"`), emits `--show-object-format=<mode>`.
273
+ #
274
+ # @option options [Boolean, nil] :show_ref_format (nil) show the
275
+ # reference storage format used for the repository
276
+ #
277
+ # @option options [String] :since (nil) parse the date string
278
+ # and output the corresponding `--max-age=` parameter
279
+ #
280
+ # Alias: :after
281
+ #
282
+ # @option options [String] :until (nil) parse the date string
283
+ # and output the corresponding `--min-age=` parameter
284
+ #
285
+ # Alias: :before
286
+ #
287
+ # @option options [String, nil] :chdir (nil) change to this directory
288
+ # before running git; not passed to the git CLI
289
+ #
290
+ # @return [Git::CommandLine::Result] the result of calling
291
+ # `git rev-parse`
292
+ #
293
+ # @raise [ArgumentError] if unsupported options are provided
294
+ #
295
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
296
+ #
297
+ # @api public
298
+ #
299
+ def call(*, **)
300
+ super
301
+ end
302
+ end
303
+ end
304
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert --abort` to cancel an in-progress revert sequence
9
+ #
10
+ # Cancels the in-progress revert and restores the branch to the state it
11
+ # was in before the `git revert` sequence started.
12
+ #
13
+ # @example Abort an in-progress revert
14
+ # abort_cmd = Git::Commands::Revert::Abort.new(execution_context)
15
+ # abort_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
18
+ #
19
+ # @see Git::Commands::Revert
20
+ #
21
+ # @see https://git-scm.com/docs/git-revert git-revert
22
+ #
23
+ # @api private
24
+ #
25
+ class Abort < Git::Commands::Base
26
+ arguments do
27
+ literal 'revert'
28
+ literal '--abort'
29
+ end
30
+
31
+ # @!method call()
32
+ #
33
+ # @overload call()
34
+ #
35
+ # Cancel the in-progress revert and restore the branch to its
36
+ # pre-revert state
37
+ #
38
+ # @return [Git::CommandLine::Result] the result of calling
39
+ # `git revert --abort`
40
+ #
41
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert --continue` to resume after resolving conflicts
9
+ #
10
+ # After the user has resolved a conflict and staged the changes, the
11
+ # revert session can be continued with this command.
12
+ #
13
+ # @example Resume a revert session after resolving conflicts
14
+ # continue_cmd = Git::Commands::Revert::Continue.new(execution_context)
15
+ # continue_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
18
+ #
19
+ # @see Git::Commands::Revert
20
+ #
21
+ # @see https://git-scm.com/docs/git-revert git-revert
22
+ #
23
+ # @api private
24
+ #
25
+ class Continue < Git::Commands::Base
26
+ arguments do
27
+ literal 'revert'
28
+ literal '--continue'
29
+ flag_option %i[edit e], negatable: true
30
+ end
31
+
32
+ # @!method call(**options)
33
+ #
34
+ # @param options [Hash] command options
35
+ #
36
+ # @option options [Boolean, nil] :edit (nil) command option key; see
37
+ # overload docs for the full option list
38
+ #
39
+ # @overload call(**options)
40
+ #
41
+ # Resume the in-progress revert after conflicts have been resolved
42
+ #
43
+ # @param options [Hash] command options
44
+ #
45
+ # @option options [Boolean, nil] :edit (nil) open the editor for the
46
+ # commit message (`--edit`)
47
+ #
48
+ # Alias: `:e`
49
+ #
50
+ # @option options [Boolean, nil] :no_edit (nil) suppress the editor for
51
+ # the commit message (`--no-edit`)
52
+ #
53
+ # @return [Git::CommandLine::Result] the result of calling
54
+ # `git revert --continue`
55
+ #
56
+ # @raise [ArgumentError] if unsupported options are provided
57
+ #
58
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert --quit` to forget an in-progress revert sequence
9
+ #
10
+ # Clears the sequencer state without restoring the branch, leaving the
11
+ # working tree and index in their current state. If no revert is in
12
+ # progress, this is a no-op and still succeeds.
13
+ #
14
+ # @example Forget an in-progress revert session
15
+ # quit_cmd = Git::Commands::Revert::Quit.new(execution_context)
16
+ # quit_cmd.call
17
+ #
18
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
19
+ #
20
+ # @see Git::Commands::Revert
21
+ #
22
+ # @see https://git-scm.com/docs/git-revert git-revert
23
+ #
24
+ # @api private
25
+ #
26
+ class Quit < Git::Commands::Base
27
+ arguments do
28
+ literal 'revert'
29
+ literal '--quit'
30
+ end
31
+
32
+ # @!method call()
33
+ #
34
+ # @overload call()
35
+ #
36
+ # Clear any in-progress revert sequencer state, leaving the
37
+ # working tree as-is. If no revert is in progress, this is a
38
+ # no-op and still succeeds.
39
+ #
40
+ # @return [Git::CommandLine::Result] the result of calling
41
+ # `git revert --quit`
42
+ #
43
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert --skip` to skip the current commit in a sequence
9
+ #
10
+ # Skips the current commit and continues applying the remaining commits
11
+ # in the revert sequence.
12
+ #
13
+ # @example Skip a conflicting commit during a revert sequence
14
+ # skip_cmd = Git::Commands::Revert::Skip.new(execution_context)
15
+ # skip_cmd.call
16
+ #
17
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
18
+ #
19
+ # @see Git::Commands::Revert
20
+ #
21
+ # @see https://git-scm.com/docs/git-revert git-revert
22
+ #
23
+ # @api private
24
+ #
25
+ class Skip < Git::Commands::Base
26
+ arguments do
27
+ literal 'revert'
28
+ literal '--skip'
29
+ end
30
+
31
+ # @!method call()
32
+ #
33
+ # @overload call()
34
+ #
35
+ # Skip the current commit and continue with the remaining sequence
36
+ #
37
+ # @return [Git::CommandLine::Result] the result of calling
38
+ # `git revert --skip`
39
+ #
40
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,158 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Revert
8
+ # Implements `git revert` to create commits that undo prior changes
9
+ #
10
+ # Given one or more existing commits, reverts the changes introduced by
11
+ # those commits and records new commits that reverse them. This requires
12
+ # the working tree to be clean.
13
+ #
14
+ # @example Revert the most recent commit
15
+ # revert = Git::Commands::Revert::Start.new(execution_context)
16
+ # revert.call('HEAD')
17
+ #
18
+ # @example Revert a specific commit without committing
19
+ # revert.call('abc123', no_commit: true)
20
+ #
21
+ # @example Revert a range of commits
22
+ # revert.call('HEAD~3..HEAD~1')
23
+ #
24
+ # @example Revert a merge commit specifying the mainline parent
25
+ # revert.call('abc123', mainline: 1)
26
+ #
27
+ # @note `arguments` block audited against https://git-scm.com/docs/git-revert/2.53.0
28
+ #
29
+ # @see Git::Commands::Revert
30
+ #
31
+ # @see https://git-scm.com/docs/git-revert git-revert
32
+ #
33
+ # @api private
34
+ #
35
+ class Start < Git::Commands::Base
36
+ arguments do
37
+ literal 'revert'
38
+
39
+ # Edit commit message (SYNOPSIS: [--[no-]edit])
40
+ flag_option %i[edit e], negatable: true
41
+
42
+ # Commit behavior (SYNOPSIS: [-n])
43
+ flag_option %i[no_commit n]
44
+
45
+ # Parent selection for merge commits (SYNOPSIS: [-m <parent-number>])
46
+ value_option %i[mainline m]
47
+
48
+ # Authorship (SYNOPSIS: [-s])
49
+ flag_option %i[signoff s], negatable: true
50
+
51
+ # GPG signing (SYNOPSIS: [-S[<keyid>]])
52
+ flag_or_value_option %i[gpg_sign S], negatable: true, inline: true
53
+
54
+ # Commit message cleanup
55
+ value_option :cleanup, inline: true
56
+
57
+ # Merge strategy
58
+ value_option :strategy, inline: true
59
+ value_option %i[strategy_option X], inline: true, repeatable: true
60
+
61
+ # Conflict resolution
62
+ flag_option :rerere_autoupdate, negatable: true
63
+
64
+ # Commit log message format
65
+ flag_option :reference
66
+
67
+ end_of_options
68
+
69
+ # Commits to revert
70
+ operand :commit, repeatable: true, required: true
71
+ end
72
+
73
+ # @!method call(*, **options)
74
+ #
75
+ # @param options [Hash] command options
76
+ #
77
+ # @option options [Boolean, nil] :edit (nil) command option key; see
78
+ # overload docs for the full option list
79
+ #
80
+ # @overload call(*commit, **options)
81
+ #
82
+ # Execute the git revert command
83
+ #
84
+ # @param commit [Array<String>] one or more commit SHAs, refs, or
85
+ # rev ranges to revert
86
+ #
87
+ # @param options [Hash] command options
88
+ #
89
+ # @option options [Boolean, nil] :edit (nil) open the editor for the
90
+ # commit message (`--edit`)
91
+ #
92
+ # Alias: `:e`
93
+ #
94
+ # @option options [Boolean, nil] :no_edit (nil) suppress the editor for
95
+ # the commit message (`--no-edit`)
96
+ #
97
+ # @option options [Boolean, nil] :no_commit (nil) apply changes to index
98
+ # and working tree without committing
99
+ #
100
+ # Alias: `:n`
101
+ #
102
+ # @option options [Integer, String] :mainline (nil) parent number (starting
103
+ # from 1) identifying the mainline when reverting a merge commit
104
+ #
105
+ # Alias: `:m`
106
+ #
107
+ # @option options [Boolean, nil] :signoff (nil) add a `Signed-off-by`
108
+ # trailer to the commit message (`--signoff`)
109
+ #
110
+ # Alias: `:s`
111
+ #
112
+ # @option options [Boolean, nil] :no_signoff (nil) suppress the
113
+ # `Signed-off-by` trailer (`--no-signoff`)
114
+ #
115
+ # @option options [Boolean, String, nil] :gpg_sign (nil) GPG-sign the
116
+ # resulting commit (`--gpg-sign`)
117
+ #
118
+ # When `true`, uses the default key. When a `String`, uses the
119
+ # specified key ID. Alias: `:S`
120
+ #
121
+ # @option options [Boolean, nil] :no_gpg_sign (nil) disable GPG signing
122
+ # (`--no-gpg-sign`)
123
+ #
124
+ # @option options [String] :cleanup (nil) commit message cleanup mode
125
+ #
126
+ # Accepted values include `strip`, `whitespace`, `verbatim`,
127
+ # `scissors`, and `default`. Emits `--cleanup=<mode>`.
128
+ #
129
+ # @option options [String] :strategy (nil) merge strategy to use
130
+ # (e.g., `'ort'`, `'recursive'`, `'resolve'`)
131
+ #
132
+ # Emits `--strategy=<strategy>`.
133
+ #
134
+ # @option options [String, Array<String>] :strategy_option (nil) pass
135
+ # option(s) to the merge strategy (e.g., `'ours'`, `'theirs'`)
136
+ #
137
+ # Can be a single value or an array for multiple `-X` flags.
138
+ # Emits `--strategy-option=<option>`. Alias: `:X`
139
+ #
140
+ # @option options [Boolean, nil] :rerere_autoupdate (nil) allow rerere to
141
+ # update the index with the auto-resolved conflict result
142
+ # (`--rerere-autoupdate`)
143
+ #
144
+ # @option options [Boolean, nil] :no_rerere_autoupdate (nil) prevent rerere
145
+ # from auto-updating the index (`--no-rerere-autoupdate`)
146
+ #
147
+ # @option options [Boolean, nil] :reference (nil) use compact reference
148
+ # format in the revert commit message instead of the full object name
149
+ #
150
+ # @return [Git::CommandLine::Result] the result of calling `git revert`
151
+ #
152
+ # @raise [ArgumentError] if unsupported options are provided
153
+ #
154
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
155
+ end
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'revert/abort'
4
+ require_relative 'revert/continue'
5
+ require_relative 'revert/quit'
6
+ require_relative 'revert/skip'
7
+ require_relative 'revert/start'
8
+
9
+ module Git
10
+ module Commands
11
+ # Commands for reverting commits via `git revert`
12
+ #
13
+ # This module contains command classes for starting a revert and managing
14
+ # in-progress revert sessions:
15
+ #
16
+ # - {Revert::Start} — revert one or more commits
17
+ # - {Revert::Continue} — resume after resolving conflicts (`--continue`)
18
+ # - {Revert::Skip} — skip the current commit (`--skip`)
19
+ # - {Revert::Abort} — abort the in-progress revert (`--abort`)
20
+ # - {Revert::Quit} — forget the in-progress revert (`--quit`)
21
+ #
22
+ # @see https://git-scm.com/docs/git-revert git-revert documentation
23
+ #
24
+ # @api private
25
+ #
26
+ module Revert
27
+ end
28
+ end
29
+ end