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,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Stash
8
+ # Remove all stash entries
9
+ #
10
+ # Removes all stash entries. Use with caution as this cannot be undone.
11
+ #
12
+ # @example Clear all stashes
13
+ # Git::Commands::Stash::Clear.new(execution_context).call
14
+ #
15
+ # @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
16
+ #
17
+ # @see Git::Commands::Stash Git::Commands::Stash for usage examples
18
+ #
19
+ # @see https://git-scm.com/docs/git-stash git-stash documentation
20
+ #
21
+ # @api private
22
+ #
23
+ class Clear < Git::Commands::Base
24
+ arguments do
25
+ literal 'stash'
26
+ literal 'clear'
27
+ end
28
+
29
+ # @!method call(*)
30
+ #
31
+ # @overload call()
32
+ #
33
+ # Clear all stash entries
34
+ #
35
+ # @return [Git::CommandLine::Result] the result of calling `git stash clear`
36
+ #
37
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
38
+ #
39
+ # @api public
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Stash
8
+ # Create a stash commit without storing it in refs/stash
9
+ #
10
+ # This is a plumbing command used to create a stash commit object without
11
+ # actually storing it in the stash reflog. It's useful for scripts that
12
+ # need to create stash commits programmatically.
13
+ #
14
+ # The command creates a stash commit and outputs its SHA, but does not
15
+ # update refs/stash. Use {Store} to store the commit in the stash reflog.
16
+ #
17
+ # @example Create a stash commit
18
+ # Git::Commands::Stash::Create.new(execution_context).call
19
+ #
20
+ # @example Create a stash commit with a message
21
+ # Git::Commands::Stash::Create.new(execution_context).call('WIP: my changes')
22
+ #
23
+ # @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
24
+ #
25
+ # @see Git::Commands::Stash Git::Commands::Stash for usage examples
26
+ #
27
+ # @see https://git-scm.com/docs/git-stash git-stash documentation
28
+ #
29
+ # @api private
30
+ #
31
+ class Create < Git::Commands::Base
32
+ arguments do
33
+ literal 'stash'
34
+ literal 'create'
35
+ operand :message
36
+ end
37
+
38
+ # @!method call(*)
39
+ #
40
+ # Create a stash commit
41
+ #
42
+ # @overload call()
43
+ #
44
+ # Create a stash commit without a message
45
+ #
46
+ # @overload call(message)
47
+ #
48
+ # Create a stash commit with a message
49
+ #
50
+ # @param message [String] optional message for the stash commit
51
+ #
52
+ # @return [Git::CommandLine::Result] the result of calling `git stash create`
53
+ #
54
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
55
+ #
56
+ # @api public
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Stash
8
+ # Remove a stash entry from the stash list
9
+ #
10
+ # Removes a single stash entry from the list of stash entries.
11
+ # If no stash reference is given, it removes the latest one.
12
+ #
13
+ # @example Drop the latest stash
14
+ # Git::Commands::Stash::Drop.new(execution_context).call
15
+ #
16
+ # @example Drop a specific stash
17
+ # Git::Commands::Stash::Drop.new(execution_context).call('stash@\\{2}')
18
+ #
19
+ # @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
20
+ #
21
+ # @see Git::Commands::Stash Git::Commands::Stash for usage examples
22
+ #
23
+ # @see https://git-scm.com/docs/git-stash git-stash documentation
24
+ #
25
+ # @api private
26
+ #
27
+ class Drop < Git::Commands::Base
28
+ arguments do
29
+ literal 'stash'
30
+ literal 'drop'
31
+ flag_option %i[quiet q]
32
+ operand :stash
33
+ end
34
+
35
+ # @!method call(*)
36
+ #
37
+ # Drop a stash entry
38
+ #
39
+ # @overload call(**options)
40
+ #
41
+ # Drop the latest stash
42
+ #
43
+ # @param options [Hash] command options
44
+ #
45
+ # @option options [Boolean, nil] :quiet (nil) suppress informational messages
46
+ #
47
+ # Alias: :q
48
+ #
49
+ # @raise [ArgumentError] if unsupported options are provided
50
+ #
51
+ # @overload call(stash, **options)
52
+ #
53
+ # Drop a specific stash
54
+ #
55
+ # @param stash [String] stash reference (e.g., 'stash@\\{0}', '0')
56
+ #
57
+ # @param options [Hash] command options
58
+ #
59
+ # @option options [Boolean, nil] :quiet (nil) suppress informational messages
60
+ #
61
+ # Alias: :q
62
+ #
63
+ # @raise [ArgumentError] if unsupported options are provided
64
+ #
65
+ # @return [Git::CommandLine::Result] the result of calling `git stash drop`
66
+ #
67
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
68
+ #
69
+ # @api public
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+ require 'git/parsers/stash'
5
+
6
+ module Git
7
+ module Commands
8
+ module Stash
9
+ # List all stash entries
10
+ #
11
+ # @example List all stashes
12
+ # Git::Commands::Stash::List.new(execution_context).call
13
+ #
14
+ # @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
15
+ #
16
+ # @see Git::Commands::Stash Git::Commands::Stash for usage examples
17
+ #
18
+ # @see https://git-scm.com/docs/git-stash git-stash documentation
19
+ #
20
+ # @api private
21
+ #
22
+ class List < Git::Commands::Base
23
+ arguments do
24
+ literal 'stash'
25
+ literal 'list'
26
+ literal "--format=#{Git::Parsers::Stash::STASH_FORMAT}"
27
+ end
28
+
29
+ # @!method call(*)
30
+ #
31
+ # List all stash entries
32
+ #
33
+ # @overload call()
34
+ #
35
+ # @return [Git::CommandLine::Result] the result of calling `git stash list`
36
+ #
37
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
38
+ #
39
+ # @api public
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Stash
8
+ # Apply stashed changes and remove from stash list
9
+ #
10
+ # Like {Apply}, but removes the stash from the stash list after
11
+ # applying, unless there are conflicts.
12
+ #
13
+ # @example Pop the latest stash
14
+ # Git::Commands::Stash::Pop.new(execution_context).call
15
+ #
16
+ # @example Pop a specific stash
17
+ # Git::Commands::Stash::Pop.new(execution_context).call('stash@\\{2}')
18
+ #
19
+ # @example Pop and restore index state
20
+ # Git::Commands::Stash::Pop.new(execution_context).call(index: true)
21
+ #
22
+ # @example Pop quietly
23
+ # Git::Commands::Stash::Pop.new(execution_context).call(quiet: true)
24
+ #
25
+ # @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
26
+ #
27
+ # @see Git::Commands::Stash Git::Commands::Stash for usage examples
28
+ #
29
+ # @see https://git-scm.com/docs/git-stash git-stash documentation
30
+ #
31
+ # @api private
32
+ #
33
+ class Pop < Git::Commands::Base
34
+ arguments do
35
+ literal 'stash'
36
+ literal 'pop'
37
+ flag_option :index
38
+ flag_option %i[quiet q]
39
+ operand :stash
40
+ end
41
+
42
+ # @!method call(*, **options)
43
+ #
44
+ # @param options [Hash] command options
45
+ #
46
+ # @option options [Boolean, nil] :index (nil) command option key; see overload docs
47
+ # for the full option list
48
+ #
49
+ # @overload call(**options)
50
+ #
51
+ # Pop the latest stash
52
+ #
53
+ # @param options [Hash] command options
54
+ #
55
+ # @option options [Boolean, nil] :index (nil) restore the index state as well
56
+ #
57
+ # @option options [Boolean, nil] :quiet (nil) suppress informational messages
58
+ #
59
+ # Alias: :q
60
+ #
61
+ # @return [Git::CommandLine::Result] the result of calling `git stash pop`
62
+ #
63
+ # @overload call(stash, **options)
64
+ #
65
+ # Pop a specific stash
66
+ #
67
+ # @param stash [String] stash reference (e.g., 'stash@\\{0}', '0')
68
+ #
69
+ # @param options [Hash] command options
70
+ #
71
+ # @option options [Boolean, nil] :index (nil) restore the index state as well
72
+ #
73
+ # @option options [Boolean, nil] :quiet (nil) suppress informational messages
74
+ #
75
+ # Alias: :q
76
+ #
77
+ # @return [Git::CommandLine::Result] the result of calling `git stash pop`
78
+ #
79
+ # @raise [ArgumentError] if unsupported options are provided
80
+ #
81
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
82
+ #
83
+ # @api public
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Stash
8
+ # Stash changes in the working directory
9
+ #
10
+ # Saves local modifications to a new stash entry and rolls them back
11
+ # to HEAD (in the working tree and index). The command takes
12
+ # various options to customize what gets stashed.
13
+ #
14
+ # @example Save all changes with a message
15
+ # Git::Commands::Stash::Push.new(execution_context).call(message: 'WIP: feature work')
16
+ #
17
+ # @example Stash only specific files
18
+ # Git::Commands::Stash::Push.new(execution_context).call('src/file.rb', message: 'Partial stash')
19
+ #
20
+ # @example Keep staged changes in index
21
+ # Git::Commands::Stash::Push.new(execution_context).call(keep_index: true)
22
+ #
23
+ # @example Include untracked files
24
+ # Git::Commands::Stash::Push.new(execution_context).call(include_untracked: true)
25
+ #
26
+ # @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
27
+ #
28
+ # @see Git::Commands::Stash Git::Commands::Stash for usage examples
29
+ #
30
+ # @see https://git-scm.com/docs/git-stash git-stash documentation
31
+ #
32
+ # @api private
33
+ #
34
+ class Push < Git::Commands::Base
35
+ arguments do
36
+ literal 'stash'
37
+ literal 'push'
38
+ flag_option %i[patch p]
39
+ flag_option %i[staged S]
40
+ flag_option %i[keep_index k], negatable: true
41
+ flag_option %i[quiet q]
42
+ flag_option %i[include_untracked u]
43
+ flag_option %i[all a]
44
+ value_option %i[message m]
45
+ value_option :pathspec_from_file, inline: true
46
+ flag_option :pathspec_file_nul
47
+ end_of_options
48
+ operand :pathspec, repeatable: true
49
+ end
50
+
51
+ # @!method call(*, **options)
52
+ #
53
+ # @param options [Hash] command options
54
+ #
55
+ # @option options [Boolean, nil] :patch (nil) command option key; see overload docs
56
+ # for the full option list
57
+ #
58
+ # @overload call(*pathspec, **options)
59
+ #
60
+ # Stash changes in the working directory
61
+ #
62
+ # @param pathspec [Array<String>] optional paths to limit what gets stashed
63
+ #
64
+ # @param options [Hash] command options
65
+ #
66
+ # @option options [Boolean, nil] :patch (nil) interactively select hunks to stash
67
+ #
68
+ # Alias: :p
69
+ #
70
+ # @option options [Boolean, nil] :staged (nil) stash only staged changes
71
+ #
72
+ # Alias: :S
73
+ #
74
+ # @option options [Boolean, nil] :keep_index (nil) keep staged changes in the index (`--keep-index`)
75
+ #
76
+ # Alias: :k
77
+ #
78
+ # @option options [Boolean, nil] :no_keep_index (nil) do not preserve staged changes in the index
79
+ # (`--no-keep-index`)
80
+ #
81
+ # @option options [Boolean, nil] :quiet (nil) suppress informational messages
82
+ #
83
+ # Alias: :q
84
+ #
85
+ # @option options [Boolean, nil] :include_untracked (nil) include untracked files in the stash
86
+ #
87
+ # Alias: :u
88
+ #
89
+ # @option options [Boolean, nil] :all (nil) include untracked and ignored files in the stash
90
+ #
91
+ # Alias: :a
92
+ #
93
+ # @option options [String] :message (nil) descriptive message for the stash
94
+ #
95
+ # Alias: :m
96
+ #
97
+ # @option options [String] :pathspec_from_file (nil) read pathspecs from the given file
98
+ #
99
+ # @option options [Boolean, nil] :pathspec_file_nul (nil) pathspecs in the file are NUL-separated
100
+ #
101
+ # @return [Git::CommandLine::Result] the result of calling `git stash push`
102
+ #
103
+ # @raise [ArgumentError] if unsupported options are provided
104
+ #
105
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
106
+ #
107
+ # @api public
108
+ #
109
+ end
110
+ end
111
+ end
112
+ 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 Stash
8
+ # Show the changes recorded in a stash entry as a diff
9
+ #
10
+ # Shows the changes recorded in the stash entry as a diff between the
11
+ # stashed contents and the commit back when the stash entry was first
12
+ # created.
13
+ #
14
+ # @example Show numstat for the latest stash
15
+ # Git::Commands::Stash::Show.new(ctx).call(numstat: true, shortstat: true)
16
+ #
17
+ # @example Show patch for a specific stash
18
+ # Git::Commands::Stash::Show.new(ctx).call('stash@{2}', patch: true, numstat: true, shortstat: true)
19
+ #
20
+ # @example Show with directory statistics
21
+ # Git::Commands::Stash::Show.new(ctx).call(numstat: true, shortstat: true, dirstat: true)
22
+ # Git::Commands::Stash::Show.new(ctx).call(numstat: true, shortstat: true, dirstat: 'lines,cumulative')
23
+ #
24
+ # @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
25
+ #
26
+ # @see Git::Commands::Stash Git::Commands::Stash for usage examples
27
+ #
28
+ # @see https://git-scm.com/docs/git-stash git-stash documentation
29
+ #
30
+ # @api private
31
+ #
32
+ class Show < Git::Commands::Base
33
+ arguments do
34
+ literal 'stash'
35
+ literal 'show'
36
+
37
+ flag_option :patch
38
+ flag_option :numstat
39
+ flag_option :raw
40
+ flag_option :shortstat
41
+ value_option %i[unified U], inline: true
42
+
43
+ flag_option %i[include_untracked u], negatable: true
44
+ flag_option :only_untracked
45
+ flag_or_value_option %i[find_renames M], inline: true
46
+ flag_or_value_option %i[find_copies C], inline: true
47
+ flag_option :find_copies_harder
48
+ value_option :inter_hunk_context, inline: true
49
+ flag_or_value_option :dirstat, inline: true
50
+ operand :stash
51
+ end
52
+
53
+ # @!method call(*, **options)
54
+ #
55
+ # @param options [Hash] command options
56
+ #
57
+ # @option options [Boolean, nil] :patch (nil) command option key; see overload docs
58
+ # for the full option list
59
+ #
60
+ # @overload call(**options)
61
+ #
62
+ # Show diff for the latest stash
63
+ #
64
+ # @param options [Hash] command options
65
+ #
66
+ # @option options [Boolean, nil] :patch (nil) include unified diff patches per file
67
+ #
68
+ # @option options [Boolean, nil] :numstat (nil) include per-file insertion/deletion counts
69
+ #
70
+ # @option options [Boolean, nil] :raw (nil) include per-file mode/SHA/status metadata
71
+ #
72
+ # @option options [Boolean, nil] :shortstat (nil) include aggregate totals line
73
+ #
74
+ # @option options [Integer, String] :unified (nil) generate diff with <n> lines of context
75
+ #
76
+ # Alias: :U
77
+ #
78
+ # @option options [Boolean, nil] :include_untracked (nil) include untracked files (`--include-untracked`)
79
+ #
80
+ # Alias: :u
81
+ #
82
+ # @option options [Boolean, nil] :no_include_untracked (nil) exclude untracked files
83
+ # (`--no-include-untracked`)
84
+ #
85
+ # @option options [Boolean, nil] :only_untracked (nil) show only untracked files
86
+ #
87
+ # @option options [Boolean, Integer, nil] :find_renames (nil) detect renames; optionally pass a
88
+ # similarity threshold (e.g., 50 for 50%). Alias: :M
89
+ #
90
+ # @option options [Boolean, Integer, nil] :find_copies (nil) detect copies as well as renames;
91
+ # optionally pass a threshold. Alias: :C
92
+ #
93
+ # @option options [Boolean, nil] :find_copies_harder (nil) inspect all files as copy sources; expensive
94
+ #
95
+ # @option options [Integer, String] :inter_hunk_context (nil) show context between diff hunks, up to
96
+ # <n> lines, fusing hunks that are close to each other
97
+ #
98
+ # @option options [Boolean, String, nil] :dirstat (nil) include directory statistics
99
+ #
100
+ # Pass `true` for default, or a string like `'lines,cumulative'` for options.
101
+ #
102
+ # @return [Git::CommandLine::Result] the result of calling `git stash show`
103
+ #
104
+ # @overload call(stash, **options)
105
+ #
106
+ # Show diff for a specific stash
107
+ #
108
+ # @param stash [String] stash reference (e.g., 'stash@\\{0}', '0')
109
+ #
110
+ # @param options [Hash] command options
111
+ #
112
+ # @option options [Boolean, nil] :patch (nil) include unified diff patches per file
113
+ #
114
+ # @option options [Boolean, nil] :numstat (nil) include per-file insertion/deletion counts
115
+ #
116
+ # @option options [Boolean, nil] :raw (nil) include per-file mode/SHA/status metadata
117
+ #
118
+ # @option options [Boolean, nil] :shortstat (nil) include aggregate totals line
119
+ #
120
+ # @option options [Integer, String] :unified (nil) generate diff with <n> lines of context
121
+ #
122
+ # Alias: :U
123
+ #
124
+ # @option options [Boolean, nil] :include_untracked (nil) include untracked files (`--include-untracked`)
125
+ #
126
+ # Alias: :u
127
+ #
128
+ # @option options [Boolean, nil] :no_include_untracked (nil) exclude untracked files
129
+ # (`--no-include-untracked`)
130
+ #
131
+ # @option options [Boolean, nil] :only_untracked (nil) show only untracked files
132
+ #
133
+ # @option options [Boolean, Integer, nil] :find_renames (nil) detect renames; optionally pass a
134
+ # similarity threshold (e.g., 50 for 50%). Alias: :M
135
+ #
136
+ # @option options [Boolean, Integer, nil] :find_copies (nil) detect copies as well as renames;
137
+ # optionally pass a threshold. Alias: :C
138
+ #
139
+ # @option options [Boolean, nil] :find_copies_harder (nil) inspect all files as copy sources; expensive
140
+ #
141
+ # @option options [Integer, String] :inter_hunk_context (nil) show context between diff hunks, up to
142
+ # <n> lines, fusing hunks that are close to each other
143
+ #
144
+ # @option options [Boolean, String, nil] :dirstat (nil) include directory statistics
145
+ #
146
+ # Pass `true` for default, or a string like `'lines,cumulative'` for options.
147
+ #
148
+ # @return [Git::CommandLine::Result] the result of calling `git stash show`
149
+ #
150
+ # @raise [ArgumentError] if unsupported options are provided
151
+ #
152
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
153
+ #
154
+ # @api public
155
+ end
156
+ end
157
+ end
158
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Stash
8
+ # Store a commit in the stash reflog
9
+ #
10
+ # This is a plumbing command used to store a given stash commit (created
11
+ # by `git stash create`) in the stash reflog, updating refs/stash.
12
+ #
13
+ # This command is typically used after {Create} to actually record
14
+ # the stash in the reflog.
15
+ #
16
+ # @example Store a stash commit
17
+ # Git::Commands::Stash::Store.new(execution_context).call('abc123def456')
18
+ #
19
+ # @example Store with a custom message
20
+ # Git::Commands::Stash::Store.new(execution_context).call('abc123def456', message: 'WIP: feature')
21
+ #
22
+ # @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
23
+ #
24
+ # @see Git::Commands::Stash Git::Commands::Stash for usage examples
25
+ #
26
+ # @see https://git-scm.com/docs/git-stash git-stash documentation
27
+ #
28
+ # @api private
29
+ #
30
+ class Store < Git::Commands::Base
31
+ arguments do
32
+ literal 'stash'
33
+ literal 'store'
34
+ value_option %i[message m]
35
+ flag_option %i[quiet q]
36
+ operand :commit, required: true
37
+ end
38
+
39
+ # @!method call(*, **options)
40
+ #
41
+ # @param options [Hash] command options
42
+ #
43
+ # @option options [String] :message (nil) command option key; see overload docs for
44
+ # the full option list
45
+ #
46
+ # @overload call(commit, **options)
47
+ #
48
+ # Store a commit in the stash reflog
49
+ #
50
+ # @param commit [String] the commit SHA to store in the stash (required)
51
+ #
52
+ # @param options [Hash] command options
53
+ #
54
+ # @option options [String] :message (nil) description for the reflog entry
55
+ #
56
+ # Alias: :m
57
+ #
58
+ # @option options [Boolean, nil] :quiet (nil) suppress output
59
+ #
60
+ # Alias: :q
61
+ #
62
+ # @return [Git::CommandLine::Result] the result of calling `git stash store`
63
+ #
64
+ # @raise [ArgumentError] if unsupported options are provided
65
+ #
66
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
67
+ #
68
+ # @api public
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'stash/apply'
4
+ require_relative 'stash/branch'
5
+ require_relative 'stash/clear'
6
+ require_relative 'stash/create'
7
+ require_relative 'stash/drop'
8
+ require_relative 'stash/list'
9
+ require_relative 'stash/pop'
10
+ require_relative 'stash/push'
11
+ require_relative 'stash/show'
12
+ require_relative 'stash/store'
13
+
14
+ module Git
15
+ module Commands
16
+ # Commands for stashing working directory changes via `git stash`
17
+ #
18
+ # This module contains command classes split by stash operation:
19
+ #
20
+ # - {Stash::Push} — save changes to a new stash entry
21
+ # - {Stash::Pop} — apply the top stash and remove it from the stash list
22
+ # - {Stash::Apply} — apply a stash without removing it
23
+ # - {Stash::Drop} — remove a single stash entry
24
+ # - {Stash::Clear} — remove all stash entries
25
+ # - {Stash::List} — list stash entries
26
+ # - {Stash::Show} — show changes recorded in a stash entry
27
+ # - {Stash::Branch} — create a new branch from a stash entry
28
+ # - {Stash::Create} — create a stash object without storing it
29
+ # - {Stash::Store} — store a stash object created with `create`
30
+ #
31
+ # @see https://git-scm.com/docs/git-stash git-stash documentation
32
+ #
33
+ # @api private
34
+ #
35
+ module Stash
36
+ end
37
+ end
38
+ end