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,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'remote/add'
4
+ require_relative 'remote/get_url'
5
+ require_relative 'remote/list'
6
+ require_relative 'remote/prune'
7
+ require_relative 'remote/remove'
8
+ require_relative 'remote/rename'
9
+ require_relative 'remote/set_branches'
10
+ require_relative 'remote/set_head'
11
+ require_relative 'remote/set_url'
12
+ require_relative 'remote/set_url_add'
13
+ require_relative 'remote/set_url_delete'
14
+ require_relative 'remote/show'
15
+ require_relative 'remote/update'
16
+
17
+ module Git
18
+ module Commands
19
+ # Commands for managing git remotes via `git remote`
20
+ #
21
+ # This module contains command classes split by remote operation:
22
+ # - {Remote::List} - list configured remotes
23
+ # - {Remote::Add} - add a new remote
24
+ # - {Remote::Rename} - rename an existing remote
25
+ # - {Remote::Remove} - remove a remote
26
+ # - {Remote::SetHead} - manage a remote's default branch
27
+ # - {Remote::SetBranches} - configure tracked branches for a remote
28
+ # - {Remote::GetUrl} - retrieve fetch or push URLs
29
+ # - {Remote::SetUrl} - replace a remote URL
30
+ # - {Remote::SetUrlAdd} - append a remote URL
31
+ # - {Remote::SetUrlDelete} - delete a matching remote URL
32
+ # - {Remote::Show} - show details about one or more remotes
33
+ # - {Remote::Prune} - prune stale tracking refs for remotes
34
+ # - {Remote::Update} - update one or more remotes or groups
35
+ #
36
+ # @see https://git-scm.com/docs/git-remote git-remote documentation
37
+ #
38
+ # @api private
39
+ module Remote
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,281 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Wrapper for the `git repack` command
8
+ #
9
+ # Packs unpacked objects in a repository into pack files, and can reorganize
10
+ # existing packs into a single, more efficient pack. Running `git repack -a -d`
11
+ # is the most common usage: pack all objects and delete redundant packs.
12
+ #
13
+ # @example Pack all objects and delete redundant packs
14
+ # repack = Git::Commands::Repack.new(execution_context)
15
+ # repack.call(a: true, d: true)
16
+ #
17
+ # @example Pack all objects with bitmap index
18
+ # repack = Git::Commands::Repack.new(execution_context)
19
+ # repack.call(a: true, d: true, write_bitmap_index: true)
20
+ #
21
+ # @example Control delta compression performance
22
+ # repack = Git::Commands::Repack.new(execution_context)
23
+ # repack.call(a: true, d: true, window: 250, depth: 50)
24
+ #
25
+ # @note `arguments` block audited against
26
+ # https://git-scm.com/docs/git-repack/2.53.0
27
+ #
28
+ # @see https://git-scm.com/docs/git-repack git-repack
29
+ #
30
+ # @see Git::Commands
31
+ #
32
+ # @api private
33
+ #
34
+ class Repack < Git::Commands::Base
35
+ arguments do
36
+ literal 'repack'
37
+
38
+ # Pack selection
39
+ flag_option :a
40
+ flag_option :A
41
+ flag_option :d
42
+ flag_option :cruft
43
+ value_option :cruft_expiration, inline: true
44
+ value_option :max_cruft_size, inline: true
45
+ value_option :combine_cruft_below_size, inline: true
46
+ value_option :expire_to, inline: true
47
+
48
+ # Object transfer
49
+ flag_option :l
50
+ flag_option :f
51
+ flag_option :F
52
+
53
+ # Output control
54
+ flag_option %i[quiet q]
55
+ flag_option :n
56
+
57
+ # Delta compression
58
+ value_option :window, inline: true
59
+ value_option :depth, inline: true
60
+ value_option :threads, inline: true
61
+ value_option :window_memory, inline: true
62
+ value_option :max_pack_size, inline: true
63
+
64
+ # Object filtering
65
+ value_option :filter, inline: true
66
+ value_option :filter_to, inline: true
67
+
68
+ # Bitmaps and multi-pack index
69
+ flag_option %i[write_bitmap_index b]
70
+ flag_option :pack_kept_objects
71
+ value_option :keep_pack, inline: true, repeatable: true
72
+ flag_option %i[write_midx m]
73
+
74
+ # Unreachable objects
75
+ value_option :unpack_unreachable, inline: true
76
+ flag_option %i[keep_unreachable k]
77
+
78
+ # Delta and geometry
79
+ flag_option %i[delta_islands i]
80
+ value_option %i[geometric g], inline: true
81
+
82
+ # Pack-objects pass-through
83
+ value_option :name_hash_version, inline: true
84
+ flag_option :path_walk
85
+ end
86
+
87
+ # @overload call(**options)
88
+ #
89
+ # Execute the `git repack` command
90
+ #
91
+ # @param options [Hash] command options
92
+ #
93
+ # @option options [Boolean, nil] :a (nil) pack all objects into a single pack
94
+ #
95
+ # When `true`, passes `-a`. Especially useful when packing a repository
96
+ # used for private development. Use with `:d` to clean up objects.
97
+ #
98
+ # @option options [Boolean, nil] :A (nil) pack all objects, loosening unreachable
99
+ # objects when combined with `:d`
100
+ #
101
+ # When `true`, passes `-A`. Like `:a`, but any unreachable objects in a
102
+ # previous pack become loose unpacked objects instead of being removed. The
103
+ # loose unreachable objects are pruned by the next `git gc` invocation.
104
+ #
105
+ # @option options [Boolean, nil] :d (nil) delete redundant packs after repacking
106
+ #
107
+ # When `true`, passes `-d`. After packing, removes any existing packs that
108
+ # are made redundant by the newly created pack. Also runs `git prune-packed`.
109
+ #
110
+ # @option options [Boolean, nil] :cruft (nil) pack unreachable objects into a
111
+ # separate cruft pack when combined with `:d`
112
+ #
113
+ # When `true`, passes `--cruft`. Like `:a`, but any unreachable objects are
114
+ # packed into a separate cruft pack instead of being removed. Incompatible
115
+ # with `:keep_unreachable`.
116
+ #
117
+ # @option options [String] :cruft_expiration (nil) expire cruft objects older
118
+ # than the given date immediately
119
+ #
120
+ # Passed as `--cruft-expiration=<approxidate>`. Only useful with
121
+ # `--cruft -d`.
122
+ #
123
+ # @option options [Integer, String] :max_cruft_size (nil) override
124
+ # `--max-pack-size` for cruft packs
125
+ #
126
+ # Passed as `--max-cruft-size=<n>`. Accepts size suffixes (`k`, `m`, `g`).
127
+ # Inherits the value of `:max_pack_size` by default.
128
+ #
129
+ # @option options [Integer, String] :combine_cruft_below_size (nil) only
130
+ # repack cruft packs strictly smaller than this size
131
+ #
132
+ # Passed as `--combine-cruft-below-size=<n>`. Accepts size suffixes
133
+ # (`k`, `m`, `g`). Useful to avoid repacking large cruft packs.
134
+ #
135
+ # @option options [String] :expire_to (nil) write pruned cruft objects to
136
+ # a directory
137
+ #
138
+ # Passed as `--expire-to=<dir>`. Only useful with `--cruft -d`.
139
+ #
140
+ # @option options [Boolean, nil] :l (nil) pass `--local` to `git pack-objects`
141
+ #
142
+ # When `true`, passes `-l`. Ignores objects that come from an alternates
143
+ # object store.
144
+ #
145
+ # @option options [Boolean, nil] :f (nil) pass `--no-reuse-delta` to
146
+ # `git pack-objects`
147
+ #
148
+ # When `true`, passes `-f`. Forces reconstruction of all pack deltas.
149
+ #
150
+ # @option options [Boolean, nil] :F (nil) pass `--no-reuse-object` to
151
+ # `git pack-objects`
152
+ #
153
+ # When `true`, passes `-F`. Forces reconstruction of all object data, not
154
+ # just deltas.
155
+ #
156
+ # @option options [Boolean, nil] :quiet (nil) suppress progress reporting
157
+ #
158
+ # When `true`, passes `--quiet`.
159
+ #
160
+ # Alias: `:q`
161
+ #
162
+ # @option options [Boolean, nil] :n (nil) do not update server information
163
+ #
164
+ # When `true`, passes `-n`. Skips running `git update-server-info`, which
165
+ # updates local catalog files needed to publish the repository
166
+ # over HTTP or FTP.
167
+ #
168
+ # @option options [Integer, String] :window (nil) number of previous objects
169
+ # used to generate delta compressions
170
+ #
171
+ # Passed as `--window=<n>` to `git pack-objects`.
172
+ #
173
+ # @option options [Integer, String] :depth (nil) maximum delta depth
174
+ #
175
+ # Passed as `--depth=<n>` to `git pack-objects`.
176
+ #
177
+ # @option options [Integer, String] :threads (nil) number of threads for
178
+ # delta search
179
+ #
180
+ # Passed as `--threads=<n>` to `git pack-objects`.
181
+ #
182
+ # @option options [Integer, String] :window_memory (nil) maximum memory usage
183
+ # for delta window
184
+ #
185
+ # Passed as `--window-memory=<n>` to `git pack-objects`. Accepts size
186
+ # suffixes (`k`, `m`, `g`).
187
+ #
188
+ # @option options [Integer, String] :max_pack_size (nil) maximum size of each
189
+ # output pack file
190
+ #
191
+ # Passed as `--max-pack-size=<n>`. Accepts size suffixes (`k`, `m`, `g`).
192
+ #
193
+ # @option options [String] :filter (nil) remove objects matching the filter
194
+ # specification from the resulting packfile
195
+ #
196
+ # Passed as `--filter=<filter-spec>`. Filtered objects are placed in a
197
+ # separate packfile. Best used with `-a -d` and in a bare repository.
198
+ #
199
+ # @option options [String] :filter_to (nil) write the pack containing filtered
200
+ # objects to a directory
201
+ #
202
+ # Passed as `--filter-to=<dir>`. Only useful with `:filter`.
203
+ #
204
+ # @option options [Boolean, nil] :write_bitmap_index (nil) write a reachability
205
+ # bitmap index as part of the repack
206
+ #
207
+ # When `true`, passes `--write-bitmap-index`. Only meaningful when used with
208
+ # `:a`, `:A`, or `:write_midx`. Overrides `repack.writeBitmaps`.
209
+ #
210
+ # Alias: `:b`
211
+ #
212
+ # @option options [Boolean, nil] :pack_kept_objects (nil) include objects in
213
+ # `.keep` files when repacking
214
+ #
215
+ # When `true`, passes `--pack-kept-objects`. Generally only useful when
216
+ # writing bitmaps with `:write_bitmap_index`.
217
+ #
218
+ # @option options [String, Array<String>] :keep_pack (nil) exclude named
219
+ # pack(s) from repacking
220
+ #
221
+ # Pass a pack file name (without leading directory, e.g. `'pack-abc123.pack'`)
222
+ # or an array of pack file names. Each value is passed as a separate
223
+ # `--keep-pack=<name>` argument.
224
+ #
225
+ # @option options [Boolean, nil] :write_midx (nil) write a multi-pack index
226
+ # containing the non-redundant packs
227
+ #
228
+ # When `true`, passes `--write-midx`.
229
+ #
230
+ # Alias: `:m`
231
+ #
232
+ # @option options [String] :unpack_unreachable (nil) do not loosen unreachable
233
+ # objects older than the given date
234
+ #
235
+ # Passed as `--unpack-unreachable=<when>`. Objects older than the given date
236
+ # are not loosened, since they would be immediately pruned by a follow-up
237
+ # `git prune`.
238
+ #
239
+ # @option options [Boolean, nil] :keep_unreachable (nil) keep unreachable objects
240
+ # in the new packfile rather than removing them
241
+ #
242
+ # When `true`, passes `--keep-unreachable`. Appends unreachable objects from
243
+ # existing packs to the end of the new packfile. For use with `-ad`.
244
+ #
245
+ # Alias: `:k`
246
+ #
247
+ # @option options [Boolean, nil] :delta_islands (nil) pass `--delta-islands` to
248
+ # `git pack-objects`
249
+ #
250
+ # When `true`, passes `--delta-islands`.
251
+ #
252
+ # Alias: `:i`
253
+ #
254
+ # @option options [Integer, String] :geometric (nil) arrange pack structure so
255
+ # each successive pack contains at least this many times the objects of the
256
+ # next-largest pack
257
+ #
258
+ # Passed as `--geometric=<factor>`.
259
+ #
260
+ # Alias: `:g`
261
+ #
262
+ # @option options [Integer, String] :name_hash_version (nil) pass
263
+ # `--name-hash-version=<n>` to `git pack-objects`
264
+ #
265
+ # @option options [Boolean, nil] :path_walk (nil) pass `--path-walk` to
266
+ # `git pack-objects`
267
+ #
268
+ # @return [Git::CommandLine::Result] the result of calling `git repack`
269
+ #
270
+ # @raise [ArgumentError] if unsupported options are provided
271
+ #
272
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
273
+ #
274
+ # @api public
275
+ #
276
+ def call(*, **)
277
+ super
278
+ end
279
+ end
280
+ end
281
+ end
@@ -0,0 +1,154 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git reset` command
8
+ #
9
+ # Resets the current HEAD to a specified state, or updates the staged
10
+ # version of specified files to match the state from a given commit or tree.
11
+ #
12
+ # @example Reset to HEAD (unstage all changes)
13
+ # reset = Git::Commands::Reset.new(execution_context)
14
+ # reset.call
15
+ #
16
+ # @example Hard reset to a specific commit
17
+ # reset = Git::Commands::Reset.new(execution_context)
18
+ # reset.call('HEAD~1', hard: true)
19
+ #
20
+ # @example Soft reset (preserve staged changes)
21
+ # reset = Git::Commands::Reset.new(execution_context)
22
+ # reset.call('HEAD~1', soft: true)
23
+ #
24
+ # @example Reset specific files to HEAD (unstage)
25
+ # reset = Git::Commands::Reset.new(execution_context)
26
+ # reset.call(pathspec: ['file.rb'])
27
+ #
28
+ # @example Reset specific files to a commit's version
29
+ # reset = Git::Commands::Reset.new(execution_context)
30
+ # reset.call('HEAD~1', pathspec: ['file.rb'])
31
+ #
32
+ # @note `arguments` block audited against
33
+ # https://git-scm.com/docs/git-reset/2.53.0
34
+ #
35
+ # @see https://git-scm.com/docs/git-reset git-reset
36
+ #
37
+ # @see Git::Commands
38
+ #
39
+ # @api private
40
+ #
41
+ class Reset < Git::Commands::Base
42
+ arguments do
43
+ literal 'reset'
44
+
45
+ # Reset mode
46
+ flag_option :soft
47
+ flag_option :mixed
48
+ flag_option :N
49
+ flag_option :hard
50
+ flag_option :merge
51
+ flag_option :keep
52
+
53
+ # Output
54
+ flag_option %i[quiet q], negatable: true
55
+
56
+ # Index refresh
57
+ flag_option :refresh, negatable: true
58
+
59
+ # Diff context
60
+ value_option %i[unified U], inline: true
61
+ value_option :inter_hunk_context, inline: true
62
+
63
+ # Pathspec from file
64
+ value_option :pathspec_from_file, inline: true
65
+ flag_option :pathspec_file_nul
66
+
67
+ # Submodule handling
68
+ flag_option :recurse_submodules, negatable: true
69
+
70
+ operand :commit, required: false
71
+ end_of_options
72
+ value_option :pathspec, as_operand: true, repeatable: true
73
+ end
74
+
75
+ # @overload call(commit = nil, **options)
76
+ #
77
+ # Execute the `git reset` command
78
+ #
79
+ # @param commit [String, nil] (nil) commit or tree-ish to reset to;
80
+ # defaults to HEAD when not given
81
+ #
82
+ # @param options [Hash] command options
83
+ #
84
+ # @option options [Boolean, nil] :soft (nil) leave working tree and index unchanged;
85
+ # reset HEAD to the specified commit
86
+ #
87
+ # @option options [Boolean, nil] :mixed (nil) reset the index but not the working tree;
88
+ # default mode when no mode flag is given
89
+ #
90
+ # @option options [Boolean, nil] :N (nil) mark removed paths as intent-to-add;
91
+ # only meaningful alongside `:mixed`
92
+ #
93
+ # @option options [Boolean, nil] :hard (nil) reset the index and working tree to the
94
+ # specified commit; discards all tracked changes since that commit
95
+ #
96
+ # @option options [Boolean, nil] :merge (nil) reset the index and update files that
97
+ # differ between the commit and HEAD, while preserving uncommitted changes
98
+ #
99
+ # @option options [Boolean, nil] :keep (nil) reset index entries and update files that
100
+ # differ between the commit and HEAD; aborts if any such file has local changes
101
+ #
102
+ # @option options [Boolean, nil] :quiet (nil) suppress all output; report errors only
103
+ # (`--quiet`)
104
+ #
105
+ # Alias: :q
106
+ #
107
+ # @option options [Boolean, nil] :no_quiet (nil) do not suppress output (`--no-quiet`)
108
+ #
109
+ # @option options [Boolean, nil] :refresh (nil) refresh the index after a mixed reset;
110
+ # enabled by default when omitted (`--refresh`)
111
+ #
112
+ # @option options [Boolean, nil] :no_refresh (nil) do not refresh the index after a mixed
113
+ # reset (`--no-refresh`)
114
+ #
115
+ # @option options [Integer, String] :unified (nil) number of context lines around each
116
+ # diff hunk
117
+ #
118
+ # Alias: :U
119
+ #
120
+ # @option options [Integer, String] :inter_hunk_context (nil) number of context lines to
121
+ # show between diff hunks
122
+ #
123
+ # @option options [String] :pathspec_from_file (nil) read pathspec from the given file;
124
+ # pass `"-"` to read from standard input
125
+ #
126
+ # @option options [Boolean, nil] :pathspec_file_nul (nil) delimit pathspec elements with
127
+ # NUL when reading from `:pathspec_from_file`; only meaningful alongside
128
+ # `:pathspec_from_file`
129
+ #
130
+ # @option options [Boolean, nil] :recurse_submodules (nil) also reset the working tree of
131
+ # all active submodules to the commit recorded in the superproject
132
+ # (`--recurse-submodules`)
133
+ #
134
+ # @option options [Boolean, nil] :no_recurse_submodules (nil) do not reset submodule
135
+ # working trees (`--no-recurse-submodules`)
136
+ #
137
+ # @option options [String, Array<String>] :pathspec (nil) path(s) to
138
+ # reset in the index; when given, only the index entries for the
139
+ # matching paths are updated
140
+ #
141
+ # @return [Git::CommandLine::Result] the result of calling `git reset`
142
+ #
143
+ # @raise [ArgumentError] if unsupported options are provided
144
+ #
145
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
146
+ #
147
+ # @api public
148
+ #
149
+ def call(*, **)
150
+ super
151
+ end
152
+ end
153
+ end
154
+ end