git 4.3.2 → 5.0.0.beta.1

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 (280) hide show
  1. checksums.yaml +4 -4
  2. data/.github/copilot-instructions.md +67 -2705
  3. data/.github/pull_request_template.md +3 -1
  4. data/.github/skills/breaking-change-analysis/SKILL.md +102 -0
  5. data/.github/skills/ci-cd-troubleshooting/SKILL.md +264 -0
  6. data/.github/skills/command-implementation/REFERENCE.md +993 -0
  7. data/.github/skills/command-implementation/SKILL.md +229 -0
  8. data/.github/skills/command-test-conventions/SKILL.md +660 -0
  9. data/.github/skills/command-yard-documentation/SKILL.md +426 -0
  10. data/.github/skills/dependency-management/SKILL.md +72 -0
  11. data/.github/skills/development-workflow/SKILL.md +506 -0
  12. data/.github/skills/extract-command-from-lib/SKILL.md +487 -0
  13. data/.github/skills/extract-facade-from-base-lib/SKILL.md +586 -0
  14. data/.github/skills/facade-implementation/REFERENCE.md +840 -0
  15. data/.github/skills/facade-implementation/SKILL.md +260 -0
  16. data/.github/skills/facade-test-conventions/SKILL.md +380 -0
  17. data/.github/skills/facade-yard-documentation/SKILL.md +429 -0
  18. data/.github/skills/make-skill-template/SKILL.md +176 -0
  19. data/.github/skills/pr-readiness-review/SKILL.md +185 -0
  20. data/.github/skills/project-context/SKILL.md +313 -0
  21. data/.github/skills/pull-request-review/SKILL.md +168 -0
  22. data/.github/skills/refactor-command-to-commandlineresult/SKILL.md +131 -0
  23. data/.github/skills/release-management/SKILL.md +125 -0
  24. data/.github/skills/review-arguments-dsl/CHECKLIST.md +788 -0
  25. data/.github/skills/review-arguments-dsl/SKILL.md +214 -0
  26. data/.github/skills/review-backward-compatibility/SKILL.md +275 -0
  27. data/.github/skills/review-cross-command-consistency/SKILL.md +139 -0
  28. data/.github/skills/reviewing-skills/SKILL.md +189 -0
  29. data/.github/skills/rspec-unit-testing-standards/SKILL.md +639 -0
  30. data/.github/skills/tdd-refactor-step/SKILL.md +236 -0
  31. data/.github/skills/test-debugging/SKILL.md +160 -0
  32. data/.github/skills/yard-documentation/SKILL.md +793 -0
  33. data/.github/workflows/continuous_integration.yml +3 -2
  34. data/.github/workflows/enforce_conventional_commits.yml +1 -1
  35. data/.github/workflows/experimental_continuous_integration.yml +2 -2
  36. data/.github/workflows/release.yml +3 -4
  37. data/.gitignore +8 -0
  38. data/.husky/pre-commit +13 -0
  39. data/.release-please-manifest.json +1 -1
  40. data/.rspec +3 -0
  41. data/.rubocop.yml +7 -3
  42. data/.rubocop_todo.yml +23 -5
  43. data/.yardopts +1 -0
  44. data/CHANGELOG.md +0 -40
  45. data/CONTRIBUTING.md +694 -53
  46. data/README.md +17 -5
  47. data/Rakefile +61 -9
  48. data/commitlint.test +4 -0
  49. data/git.gemspec +14 -8
  50. data/lib/git/args_builder.rb +0 -8
  51. data/lib/git/base.rb +486 -410
  52. data/lib/git/branch.rb +380 -43
  53. data/lib/git/branch_delete_failure.rb +31 -0
  54. data/lib/git/branch_delete_result.rb +63 -0
  55. data/lib/git/branch_info.rb +178 -0
  56. data/lib/git/branches.rb +130 -24
  57. data/lib/git/command_line/base.rb +245 -0
  58. data/lib/git/command_line/capturing.rb +249 -0
  59. data/lib/git/command_line/result.rb +96 -0
  60. data/lib/git/command_line/streaming.rb +194 -0
  61. data/lib/git/command_line.rb +43 -322
  62. data/lib/git/command_line_result.rb +4 -88
  63. data/lib/git/commands/add.rb +131 -0
  64. data/lib/git/commands/am/abort.rb +43 -0
  65. data/lib/git/commands/am/apply.rb +252 -0
  66. data/lib/git/commands/am/continue.rb +43 -0
  67. data/lib/git/commands/am/quit.rb +43 -0
  68. data/lib/git/commands/am/retry.rb +47 -0
  69. data/lib/git/commands/am/show_current_patch.rb +64 -0
  70. data/lib/git/commands/am/skip.rb +42 -0
  71. data/lib/git/commands/am.rb +33 -0
  72. data/lib/git/commands/apply.rb +237 -0
  73. data/lib/git/commands/archive/list_formats.rb +46 -0
  74. data/lib/git/commands/archive.rb +140 -0
  75. data/lib/git/commands/arguments.rb +3510 -0
  76. data/lib/git/commands/base.rb +403 -0
  77. data/lib/git/commands/branch/copy.rb +94 -0
  78. data/lib/git/commands/branch/create.rb +173 -0
  79. data/lib/git/commands/branch/delete.rb +80 -0
  80. data/lib/git/commands/branch/list.rb +162 -0
  81. data/lib/git/commands/branch/move.rb +94 -0
  82. data/lib/git/commands/branch/set_upstream.rb +86 -0
  83. data/lib/git/commands/branch/show_current.rb +49 -0
  84. data/lib/git/commands/branch/unset_upstream.rb +57 -0
  85. data/lib/git/commands/branch.rb +34 -0
  86. data/lib/git/commands/cat_file/batch.rb +364 -0
  87. data/lib/git/commands/cat_file/filtered.rb +105 -0
  88. data/lib/git/commands/cat_file/raw.rb +210 -0
  89. data/lib/git/commands/cat_file.rb +49 -0
  90. data/lib/git/commands/checkout/branch.rb +151 -0
  91. data/lib/git/commands/checkout/files.rb +115 -0
  92. data/lib/git/commands/checkout.rb +38 -0
  93. data/lib/git/commands/checkout_index.rb +105 -0
  94. data/lib/git/commands/clean.rb +100 -0
  95. data/lib/git/commands/clone.rb +240 -0
  96. data/lib/git/commands/commit.rb +272 -0
  97. data/lib/git/commands/commit_tree.rb +100 -0
  98. data/lib/git/commands/config_option_syntax/add.rb +83 -0
  99. data/lib/git/commands/config_option_syntax/get.rb +117 -0
  100. data/lib/git/commands/config_option_syntax/get_all.rb +115 -0
  101. data/lib/git/commands/config_option_syntax/get_color.rb +91 -0
  102. data/lib/git/commands/config_option_syntax/get_color_bool.rb +93 -0
  103. data/lib/git/commands/config_option_syntax/get_regexp.rb +115 -0
  104. data/lib/git/commands/config_option_syntax/get_urlmatch.rb +102 -0
  105. data/lib/git/commands/config_option_syntax/list.rb +107 -0
  106. data/lib/git/commands/config_option_syntax/remove_section.rb +74 -0
  107. data/lib/git/commands/config_option_syntax/rename_section.rb +78 -0
  108. data/lib/git/commands/config_option_syntax/replace_all.rb +104 -0
  109. data/lib/git/commands/config_option_syntax/set.rb +114 -0
  110. data/lib/git/commands/config_option_syntax/unset.rb +89 -0
  111. data/lib/git/commands/config_option_syntax/unset_all.rb +89 -0
  112. data/lib/git/commands/config_option_syntax.rb +56 -0
  113. data/lib/git/commands/describe.rb +155 -0
  114. data/lib/git/commands/diff.rb +656 -0
  115. data/lib/git/commands/diff_files.rb +518 -0
  116. data/lib/git/commands/diff_index.rb +496 -0
  117. data/lib/git/commands/fetch.rb +352 -0
  118. data/lib/git/commands/fsck.rb +136 -0
  119. data/lib/git/commands/gc.rb +132 -0
  120. data/lib/git/commands/grep.rb +338 -0
  121. data/lib/git/commands/init.rb +99 -0
  122. data/lib/git/commands/log.rb +632 -0
  123. data/lib/git/commands/ls_files.rb +191 -0
  124. data/lib/git/commands/ls_remote.rb +155 -0
  125. data/lib/git/commands/ls_tree.rb +131 -0
  126. data/lib/git/commands/maintenance/register.rb +75 -0
  127. data/lib/git/commands/maintenance/run.rb +104 -0
  128. data/lib/git/commands/maintenance/start.rb +66 -0
  129. data/lib/git/commands/maintenance/stop.rb +55 -0
  130. data/lib/git/commands/maintenance/unregister.rb +79 -0
  131. data/lib/git/commands/maintenance.rb +31 -0
  132. data/lib/git/commands/merge/abort.rb +44 -0
  133. data/lib/git/commands/merge/continue.rb +44 -0
  134. data/lib/git/commands/merge/quit.rb +46 -0
  135. data/lib/git/commands/merge/start.rb +245 -0
  136. data/lib/git/commands/merge.rb +28 -0
  137. data/lib/git/commands/merge_base.rb +86 -0
  138. data/lib/git/commands/mv.rb +77 -0
  139. data/lib/git/commands/name_rev.rb +114 -0
  140. data/lib/git/commands/pull.rb +377 -0
  141. data/lib/git/commands/push.rb +246 -0
  142. data/lib/git/commands/read_tree.rb +149 -0
  143. data/lib/git/commands/remote/add.rb +91 -0
  144. data/lib/git/commands/remote/get_url.rb +66 -0
  145. data/lib/git/commands/remote/list.rb +54 -0
  146. data/lib/git/commands/remote/prune.rb +61 -0
  147. data/lib/git/commands/remote/remove.rb +52 -0
  148. data/lib/git/commands/remote/rename.rb +69 -0
  149. data/lib/git/commands/remote/set_branches.rb +63 -0
  150. data/lib/git/commands/remote/set_head.rb +82 -0
  151. data/lib/git/commands/remote/set_url.rb +71 -0
  152. data/lib/git/commands/remote/set_url_add.rb +61 -0
  153. data/lib/git/commands/remote/set_url_delete.rb +64 -0
  154. data/lib/git/commands/remote/show.rb +71 -0
  155. data/lib/git/commands/remote/update.rb +72 -0
  156. data/lib/git/commands/remote.rb +42 -0
  157. data/lib/git/commands/repack.rb +277 -0
  158. data/lib/git/commands/reset.rb +147 -0
  159. data/lib/git/commands/rev_parse.rb +297 -0
  160. data/lib/git/commands/revert/abort.rb +45 -0
  161. data/lib/git/commands/revert/continue.rb +57 -0
  162. data/lib/git/commands/revert/quit.rb +47 -0
  163. data/lib/git/commands/revert/skip.rb +44 -0
  164. data/lib/git/commands/revert/start.rb +153 -0
  165. data/lib/git/commands/revert.rb +29 -0
  166. data/lib/git/commands/rm.rb +114 -0
  167. data/lib/git/commands/show.rb +632 -0
  168. data/lib/git/commands/show_ref/exclude_existing.rb +120 -0
  169. data/lib/git/commands/show_ref/exists.rb +78 -0
  170. data/lib/git/commands/show_ref/list.rb +145 -0
  171. data/lib/git/commands/show_ref/verify.rb +120 -0
  172. data/lib/git/commands/show_ref.rb +42 -0
  173. data/lib/git/commands/stash/apply.rb +75 -0
  174. data/lib/git/commands/stash/branch.rb +65 -0
  175. data/lib/git/commands/stash/clear.rb +41 -0
  176. data/lib/git/commands/stash/create.rb +58 -0
  177. data/lib/git/commands/stash/drop.rb +67 -0
  178. data/lib/git/commands/stash/list.rb +39 -0
  179. data/lib/git/commands/stash/pop.rb +78 -0
  180. data/lib/git/commands/stash/push.rb +103 -0
  181. data/lib/git/commands/stash/show.rb +149 -0
  182. data/lib/git/commands/stash/store.rb +63 -0
  183. data/lib/git/commands/stash.rb +38 -0
  184. data/lib/git/commands/status.rb +169 -0
  185. data/lib/git/commands/symbolic_ref/delete.rb +68 -0
  186. data/lib/git/commands/symbolic_ref/read.rb +95 -0
  187. data/lib/git/commands/symbolic_ref/update.rb +76 -0
  188. data/lib/git/commands/symbolic_ref.rb +38 -0
  189. data/lib/git/commands/tag/create.rb +139 -0
  190. data/lib/git/commands/tag/delete.rb +55 -0
  191. data/lib/git/commands/tag/list.rb +143 -0
  192. data/lib/git/commands/tag/verify.rb +71 -0
  193. data/lib/git/commands/tag.rb +26 -0
  194. data/lib/git/commands/update_ref/batch.rb +140 -0
  195. data/lib/git/commands/update_ref/delete.rb +92 -0
  196. data/lib/git/commands/update_ref/update.rb +106 -0
  197. data/lib/git/commands/update_ref.rb +42 -0
  198. data/lib/git/commands/version.rb +52 -0
  199. data/lib/git/commands/worktree/add.rb +140 -0
  200. data/lib/git/commands/worktree/list.rb +64 -0
  201. data/lib/git/commands/worktree/lock.rb +58 -0
  202. data/lib/git/commands/worktree/management_base.rb +51 -0
  203. data/lib/git/commands/worktree/move.rb +66 -0
  204. data/lib/git/commands/worktree/prune.rb +67 -0
  205. data/lib/git/commands/worktree/remove.rb +63 -0
  206. data/lib/git/commands/worktree/repair.rb +76 -0
  207. data/lib/git/commands/worktree/unlock.rb +47 -0
  208. data/lib/git/commands/worktree.rb +43 -0
  209. data/lib/git/commands/write_tree.rb +68 -0
  210. data/lib/git/commands.rb +89 -0
  211. data/lib/git/detached_head_info.rb +54 -0
  212. data/lib/git/diff.rb +297 -7
  213. data/lib/git/diff_file_numstat_info.rb +29 -0
  214. data/lib/git/diff_file_patch_info.rb +134 -0
  215. data/lib/git/diff_file_raw_info.rb +127 -0
  216. data/lib/git/diff_info.rb +169 -0
  217. data/lib/git/diff_path_status.rb +78 -19
  218. data/lib/git/diff_result.rb +32 -0
  219. data/lib/git/diff_stats.rb +59 -14
  220. data/lib/git/dirstat_info.rb +86 -0
  221. data/lib/git/errors.rb +65 -2
  222. data/lib/git/execution_context/global.rb +56 -0
  223. data/lib/git/execution_context/repository.rb +147 -0
  224. data/lib/git/execution_context.rb +482 -0
  225. data/lib/git/file_ref.rb +74 -0
  226. data/lib/git/fsck_object.rb +9 -9
  227. data/lib/git/fsck_result.rb +1 -1
  228. data/lib/git/lib.rb +1606 -1028
  229. data/lib/git/log.rb +15 -2
  230. data/lib/git/object.rb +92 -22
  231. data/lib/git/parsers/branch.rb +224 -0
  232. data/lib/git/parsers/cat_file.rb +111 -0
  233. data/lib/git/parsers/diff.rb +585 -0
  234. data/lib/git/parsers/fsck.rb +133 -0
  235. data/lib/git/parsers/grep.rb +42 -0
  236. data/lib/git/parsers/ls_tree.rb +58 -0
  237. data/lib/git/parsers/stash.rb +208 -0
  238. data/lib/git/parsers/tag.rb +257 -0
  239. data/lib/git/remote.rb +133 -9
  240. data/lib/git/repository/branching.rb +572 -0
  241. data/lib/git/repository/committing.rb +191 -0
  242. data/lib/git/repository/configuring.rb +156 -0
  243. data/lib/git/repository/diffing.rb +775 -0
  244. data/lib/git/repository/inspecting.rb +153 -0
  245. data/lib/git/repository/logging.rb +247 -0
  246. data/lib/git/repository/merging.rb +295 -0
  247. data/lib/git/repository/object_operations.rb +1101 -0
  248. data/lib/git/repository/path_resolver.rb +207 -0
  249. data/lib/git/repository/remote_operations.rb +753 -0
  250. data/lib/git/repository/shared_private.rb +51 -0
  251. data/lib/git/repository/staging.rb +390 -0
  252. data/lib/git/repository/stashing.rb +107 -0
  253. data/lib/git/repository/status_operations.rb +180 -0
  254. data/lib/git/repository/worktree_operations.rb +159 -0
  255. data/lib/git/repository.rb +264 -1
  256. data/lib/git/stash.rb +85 -4
  257. data/lib/git/stash_info.rb +104 -0
  258. data/lib/git/stashes.rb +130 -13
  259. data/lib/git/status.rb +224 -18
  260. data/lib/git/tag_delete_failure.rb +31 -0
  261. data/lib/git/tag_delete_result.rb +63 -0
  262. data/lib/git/tag_info.rb +105 -0
  263. data/lib/git/version.rb +109 -2
  264. data/lib/git/version_constraint.rb +81 -0
  265. data/lib/git/worktree.rb +120 -5
  266. data/lib/git/worktrees.rb +107 -7
  267. data/lib/git.rb +114 -18
  268. data/redesign/1_architecture_existing.md +54 -18
  269. data/redesign/2_architecture_redesign.md +365 -46
  270. data/redesign/3_architecture_implementation.md +1451 -54
  271. data/tasks/gem_tasks.rake +4 -0
  272. data/tasks/npm_tasks.rake +7 -0
  273. data/tasks/rspec.rake +48 -0
  274. data/tasks/test.rake +13 -1
  275. data/tasks/yard.rake +34 -7
  276. metadata +349 -20
  277. data/lib/git/index.rb +0 -6
  278. data/lib/git/path.rb +0 -38
  279. data/lib/git/working_directory.rb +0 -6
  280. /data/{release-please-config.json → .release-please-config.json} +0 -0
@@ -0,0 +1,277 @@
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
+ # @!method call(*, **)
88
+ #
89
+ # @overload call(**options)
90
+ #
91
+ # Execute the `git repack` command
92
+ #
93
+ # @param options [Hash] command options
94
+ #
95
+ # @option options [Boolean, nil] :a (nil) pack all objects into a single pack
96
+ #
97
+ # When `true`, passes `-a`. Especially useful when packing a repository
98
+ # used for private development. Use with `:d` to clean up objects.
99
+ #
100
+ # @option options [Boolean, nil] :A (nil) pack all objects, loosening unreachable
101
+ # objects when combined with `:d`
102
+ #
103
+ # When `true`, passes `-A`. Like `:a`, but any unreachable objects in a
104
+ # previous pack become loose unpacked objects instead of being removed. The
105
+ # loose unreachable objects are pruned by the next `git gc` invocation.
106
+ #
107
+ # @option options [Boolean, nil] :d (nil) delete redundant packs after repacking
108
+ #
109
+ # When `true`, passes `-d`. After packing, removes any existing packs that
110
+ # are made redundant by the newly created pack. Also runs `git prune-packed`.
111
+ #
112
+ # @option options [Boolean, nil] :cruft (nil) pack unreachable objects into a
113
+ # separate cruft pack when combined with `:d`
114
+ #
115
+ # When `true`, passes `--cruft`. Like `:a`, but any unreachable objects are
116
+ # packed into a separate cruft pack instead of being removed. Incompatible
117
+ # with `:keep_unreachable`.
118
+ #
119
+ # @option options [String] :cruft_expiration (nil) expire cruft objects older
120
+ # than the given date immediately
121
+ #
122
+ # Passed as `--cruft-expiration=<approxidate>`. Only useful with
123
+ # `--cruft -d`.
124
+ #
125
+ # @option options [Integer, String] :max_cruft_size (nil) override
126
+ # `--max-pack-size` for cruft packs
127
+ #
128
+ # Passed as `--max-cruft-size=<n>`. Accepts size suffixes (`k`, `m`, `g`).
129
+ # Inherits the value of `:max_pack_size` by default.
130
+ #
131
+ # @option options [Integer, String] :combine_cruft_below_size (nil) only
132
+ # repack cruft packs strictly smaller than this size
133
+ #
134
+ # Passed as `--combine-cruft-below-size=<n>`. Accepts size suffixes
135
+ # (`k`, `m`, `g`). Useful to avoid repacking large cruft packs.
136
+ #
137
+ # @option options [String] :expire_to (nil) write pruned cruft objects to
138
+ # a directory
139
+ #
140
+ # Passed as `--expire-to=<dir>`. Only useful with `--cruft -d`.
141
+ #
142
+ # @option options [Boolean, nil] :l (nil) pass `--local` to `git pack-objects`
143
+ #
144
+ # When `true`, passes `-l`. Ignores objects that come from an alternates
145
+ # object store.
146
+ #
147
+ # @option options [Boolean, nil] :f (nil) pass `--no-reuse-delta` to
148
+ # `git pack-objects`
149
+ #
150
+ # When `true`, passes `-f`. Forces reconstruction of all pack deltas.
151
+ #
152
+ # @option options [Boolean, nil] :F (nil) pass `--no-reuse-object` to
153
+ # `git pack-objects`
154
+ #
155
+ # When `true`, passes `-F`. Forces reconstruction of all object data, not
156
+ # just deltas.
157
+ #
158
+ # @option options [Boolean, nil] :quiet (nil) suppress progress reporting
159
+ #
160
+ # When `true`, passes `--quiet`.
161
+ #
162
+ # Alias: `:q`
163
+ #
164
+ # @option options [Boolean, nil] :n (nil) do not update server information
165
+ #
166
+ # When `true`, passes `-n`. Skips running `git update-server-info`, which
167
+ # updates local catalog files needed to publish the repository
168
+ # over HTTP or FTP.
169
+ #
170
+ # @option options [Integer, String] :window (nil) number of previous objects
171
+ # used to generate delta compressions
172
+ #
173
+ # Passed as `--window=<n>` to `git pack-objects`.
174
+ #
175
+ # @option options [Integer, String] :depth (nil) maximum delta depth
176
+ #
177
+ # Passed as `--depth=<n>` to `git pack-objects`.
178
+ #
179
+ # @option options [Integer, String] :threads (nil) number of threads for
180
+ # delta search
181
+ #
182
+ # Passed as `--threads=<n>` to `git pack-objects`.
183
+ #
184
+ # @option options [Integer, String] :window_memory (nil) maximum memory usage
185
+ # for delta window
186
+ #
187
+ # Passed as `--window-memory=<n>` to `git pack-objects`. Accepts size
188
+ # suffixes (`k`, `m`, `g`).
189
+ #
190
+ # @option options [Integer, String] :max_pack_size (nil) maximum size of each
191
+ # output pack file
192
+ #
193
+ # Passed as `--max-pack-size=<n>`. Accepts size suffixes (`k`, `m`, `g`).
194
+ #
195
+ # @option options [String] :filter (nil) remove objects matching the filter
196
+ # specification from the resulting packfile
197
+ #
198
+ # Passed as `--filter=<filter-spec>`. Filtered objects are placed in a
199
+ # separate packfile. Best used with `-a -d` and in a bare repository.
200
+ #
201
+ # @option options [String] :filter_to (nil) write the pack containing filtered
202
+ # objects to a directory
203
+ #
204
+ # Passed as `--filter-to=<dir>`. Only useful with `:filter`.
205
+ #
206
+ # @option options [Boolean, nil] :write_bitmap_index (nil) write a reachability
207
+ # bitmap index as part of the repack
208
+ #
209
+ # When `true`, passes `--write-bitmap-index`. Only meaningful when used with
210
+ # `:a`, `:A`, or `:write_midx`. Overrides `repack.writeBitmaps`.
211
+ #
212
+ # Alias: `:b`
213
+ #
214
+ # @option options [Boolean, nil] :pack_kept_objects (nil) include objects in
215
+ # `.keep` files when repacking
216
+ #
217
+ # When `true`, passes `--pack-kept-objects`. Generally only useful when
218
+ # writing bitmaps with `:write_bitmap_index`.
219
+ #
220
+ # @option options [String, Array<String>] :keep_pack (nil) exclude named
221
+ # pack(s) from repacking
222
+ #
223
+ # Pass a pack file name (without leading directory, e.g. `'pack-abc123.pack'`)
224
+ # or an array of pack file names. Each value is passed as a separate
225
+ # `--keep-pack=<name>` argument.
226
+ #
227
+ # @option options [Boolean, nil] :write_midx (nil) write a multi-pack index
228
+ # containing the non-redundant packs
229
+ #
230
+ # When `true`, passes `--write-midx`.
231
+ #
232
+ # Alias: `:m`
233
+ #
234
+ # @option options [String] :unpack_unreachable (nil) do not loosen unreachable
235
+ # objects older than the given date
236
+ #
237
+ # Passed as `--unpack-unreachable=<when>`. Objects older than the given date
238
+ # are not loosened, since they would be immediately pruned by a follow-up
239
+ # `git prune`.
240
+ #
241
+ # @option options [Boolean, nil] :keep_unreachable (nil) keep unreachable objects
242
+ # in the new packfile rather than removing them
243
+ #
244
+ # When `true`, passes `--keep-unreachable`. Appends unreachable objects from
245
+ # existing packs to the end of the new packfile. For use with `-ad`.
246
+ #
247
+ # Alias: `:k`
248
+ #
249
+ # @option options [Boolean, nil] :delta_islands (nil) pass `--delta-islands` to
250
+ # `git pack-objects`
251
+ #
252
+ # When `true`, passes `--delta-islands`.
253
+ #
254
+ # Alias: `:i`
255
+ #
256
+ # @option options [Integer, String] :geometric (nil) arrange pack structure so
257
+ # each successive pack contains at least this many times the objects of the
258
+ # next-largest pack
259
+ #
260
+ # Passed as `--geometric=<factor>`.
261
+ #
262
+ # Alias: `:g`
263
+ #
264
+ # @option options [Integer, String] :name_hash_version (nil) pass
265
+ # `--name-hash-version=<n>` to `git pack-objects`
266
+ #
267
+ # @option options [Boolean, nil] :path_walk (nil) pass `--path-walk` to
268
+ # `git pack-objects`
269
+ #
270
+ # @return [Git::CommandLineResult] the result of calling `git repack`
271
+ #
272
+ # @raise [ArgumentError] if unsupported options are provided
273
+ #
274
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
275
+ end
276
+ end
277
+ end
@@ -0,0 +1,147 @@
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
+ # @!method call(*, **)
76
+ #
77
+ # Execute the git reset command.
78
+ #
79
+ # @overload call(commit = nil, **options)
80
+ #
81
+ # @param commit [String, nil] (nil) commit or tree-ish to reset to;
82
+ # defaults to HEAD when not given
83
+ #
84
+ # @param options [Hash] command options
85
+ #
86
+ # @option options [Boolean, nil] :soft (nil) leave working tree and index unchanged;
87
+ # reset HEAD to the specified commit
88
+ #
89
+ # @option options [Boolean, nil] :mixed (nil) reset the index but not the working tree;
90
+ # default mode when no mode flag is given
91
+ #
92
+ # @option options [Boolean, nil] :N (nil) mark removed paths as intent-to-add;
93
+ # only meaningful alongside `:mixed`
94
+ #
95
+ # @option options [Boolean, nil] :hard (nil) reset the index and working tree to the
96
+ # specified commit; discards all tracked changes since that commit
97
+ #
98
+ # @option options [Boolean, nil] :merge (nil) reset the index and update files that
99
+ # differ between the commit and HEAD, while preserving uncommitted changes
100
+ #
101
+ # @option options [Boolean, nil] :keep (nil) reset index entries and update files that
102
+ # differ between the commit and HEAD; aborts if any such file has local changes
103
+ #
104
+ # @option options [Boolean, nil] :quiet (nil) suppress all output; report errors only
105
+ # (`--quiet`)
106
+ #
107
+ # Alias: :q
108
+ #
109
+ # @option options [Boolean, nil] :no_quiet (nil) do not suppress output (`--no-quiet`)
110
+ #
111
+ # @option options [Boolean, nil] :refresh (nil) refresh the index after a mixed reset;
112
+ # enabled by default when omitted (`--refresh`)
113
+ #
114
+ # @option options [Boolean, nil] :no_refresh (nil) do not refresh the index after a mixed
115
+ # reset (`--no-refresh`)
116
+ #
117
+ # @option options [Integer, String] :unified (nil) number of context lines around each diff hunk
118
+ #
119
+ # Alias: :U
120
+ #
121
+ # @option options [Integer, String] :inter_hunk_context (nil) number of context lines to show
122
+ # between diff hunks
123
+ #
124
+ # @option options [String] :pathspec_from_file (nil) read pathspec from the given file;
125
+ # pass `"-"` to read from standard input
126
+ #
127
+ # @option options [Boolean, nil] :pathspec_file_nul (nil) delimit pathspec elements with NUL
128
+ # when reading from `:pathspec_from_file`; only meaningful alongside `: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 [Array<String>] :pathspec (nil) path(s) to reset in the index;
138
+ # when given, only the index entries for the matching paths are updated
139
+ #
140
+ # @return [Git::CommandLineResult] the result of calling `git reset`
141
+ #
142
+ # @raise [ArgumentError] if unsupported options are provided
143
+ #
144
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
145
+ end
146
+ end
147
+ end