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,251 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git push` command
8
+ #
9
+ # Updates remote refs using local refs, while sending objects necessary to
10
+ # complete the given refs.
11
+ #
12
+ # @example Push to the default remote
13
+ # push = Git::Commands::Push.new(execution_context)
14
+ # push.call
15
+ #
16
+ # @example Push to a named remote
17
+ # push = Git::Commands::Push.new(execution_context)
18
+ # push.call('origin')
19
+ #
20
+ # @example Push a specific branch to a remote
21
+ # push = Git::Commands::Push.new(execution_context)
22
+ # push.call('origin', 'main')
23
+ #
24
+ # @example Force push to a remote branch
25
+ # push = Git::Commands::Push.new(execution_context)
26
+ # push.call('origin', 'main', force: true)
27
+ #
28
+ # @example Push with a server-side option
29
+ # push = Git::Commands::Push.new(execution_context)
30
+ # push.call('origin', push_option: 'ci.skip')
31
+ #
32
+ # @example Push all tags to a remote
33
+ # push = Git::Commands::Push.new(execution_context)
34
+ # push.call('origin', tags: true)
35
+ #
36
+ # @note `arguments` block audited against https://git-scm.com/docs/git-push/2.53.0
37
+ #
38
+ # @see https://git-scm.com/docs/git-push git-push
39
+ #
40
+ # @see Git::Commands
41
+ #
42
+ # @api private
43
+ #
44
+ class Push < Git::Commands::Base
45
+ arguments do
46
+ literal 'push'
47
+
48
+ # Push scope (SYNOPSIS order: [--all | --branches | --mirror | --tags])
49
+ flag_option %i[all branches]
50
+ flag_option :mirror
51
+ flag_option :tags
52
+ flag_option :follow_tags, negatable: true
53
+ flag_option :atomic, negatable: true
54
+
55
+ # Transfer options
56
+ flag_option %i[dry_run n]
57
+ flag_option :porcelain
58
+ value_option %i[receive_pack exec], inline: true
59
+ value_option :repo, inline: true
60
+
61
+ # Safety
62
+ flag_option %i[force f]
63
+ flag_option %i[delete d]
64
+ flag_option :prune
65
+
66
+ # Output verbosity
67
+ flag_option %i[quiet q]
68
+ flag_option %i[verbose v]
69
+
70
+ # Tracking
71
+ flag_option %i[set_upstream u]
72
+
73
+ # Push options (server-side)
74
+ value_option %i[push_option o], repeatable: true, inline: true
75
+
76
+ # GPG signing
77
+ flag_or_value_option :signed,
78
+ negatable: true, inline: true
79
+
80
+ # Force safety
81
+ flag_or_value_option :force_with_lease,
82
+ negatable: true, inline: true
83
+ flag_option :force_if_includes, negatable: true
84
+
85
+ # Hooks
86
+ flag_option :verify, negatable: true
87
+
88
+ # Submodules
89
+ flag_or_value_option :recurse_submodules,
90
+ negatable: true, inline: true, type: String
91
+
92
+ # Transfer
93
+ flag_option :thin, negatable: true
94
+ flag_option :progress
95
+
96
+ # Protocol and connectivity
97
+ flag_option %i[ipv4 4]
98
+ flag_option %i[ipv6 6]
99
+
100
+ # Execution options (not emitted as CLI flags)
101
+ execution_option :timeout
102
+
103
+ end_of_options
104
+
105
+ operand :repository
106
+ operand :refspec, repeatable: true
107
+ end
108
+
109
+ # @!method call(*, **options)
110
+ #
111
+ # @param options [Hash] command options
112
+ #
113
+ # @option options [Boolean, nil] :all (nil) command option key; see overload docs
114
+ # for the full option list
115
+ #
116
+ # Execute the `git push` command
117
+ #
118
+ # @overload call(repository = nil, *refspecs, **options)
119
+ #
120
+ # @param repository [String, nil] The remote name or URL to push to
121
+ #
122
+ # When nil, git uses the default remote configured for the current branch.
123
+ #
124
+ # @param refspecs [Array<String>] Zero or more refspecs specifying which refs to push
125
+ #
126
+ # Each may be a branch name or a full refspec pattern such as
127
+ # `refs/heads/main:refs/heads/main`. When no refspecs are given, git uses
128
+ # the push configuration for the current branch.
129
+ #
130
+ # @param options [Hash] command options
131
+ #
132
+ # @option options [Boolean, nil] :all (nil) push all branches
133
+ #
134
+ # Alias: :branches
135
+ #
136
+ # @option options [Boolean, nil] :mirror (nil) push all refs under `refs/` to the remote
137
+ #
138
+ # @option options [Boolean, nil] :tags (nil) push all refs under `refs/tags/`
139
+ #
140
+ # @option options [Boolean, nil] :follow_tags (nil) push reachable annotated tags (`--follow-tags`)
141
+ #
142
+ # @option options [Boolean, nil] :no_follow_tags (nil) do not push reachable annotated tags
143
+ # (`--no-follow-tags`)
144
+ #
145
+ # @option options [Boolean, nil] :atomic (nil) use an atomic transaction to update remote refs (`--atomic`)
146
+ #
147
+ # @option options [Boolean, nil] :no_atomic (nil) disable atomic transaction for remote updates
148
+ # (`--no-atomic`)
149
+ #
150
+ # @option options [Boolean, nil] :dry_run (nil) do not send updates, only report what would be pushed
151
+ #
152
+ # Alias: :n
153
+ #
154
+ # @option options [Boolean, nil] :porcelain (nil) produce machine-readable output
155
+ #
156
+ # @option options [String] :receive_pack (nil) path to the git-receive-pack program on the remote end
157
+ #
158
+ # Alias: :exec
159
+ #
160
+ # @option options [String] :repo (nil) use this repository instead of the
161
+ # positional repository argument
162
+ #
163
+ # Equivalent to the positional `<repository>` argument. If both are given, the
164
+ # positional argument takes precedence.
165
+ #
166
+ # @option options [Boolean, nil] :force (nil) force updates, overriding the fast-forward check
167
+ #
168
+ # Alias: :f
169
+ #
170
+ # @option options [Boolean, nil] :delete (nil) delete all listed refs from the remote repository
171
+ #
172
+ # Alias: :d
173
+ #
174
+ # @option options [Boolean, nil] :prune (nil) remove remote branches that have no local counterpart
175
+ #
176
+ # @option options [Boolean, nil] :quiet (nil) suppress all output
177
+ #
178
+ # Alias: :q
179
+ #
180
+ # @option options [Boolean, nil] :verbose (nil) run verbosely
181
+ #
182
+ # Alias: :v
183
+ #
184
+ # @option options [Boolean, nil] :set_upstream (nil) set upstream tracking for each successfully pushed branch
185
+ #
186
+ # Alias: :u
187
+ #
188
+ # @option options [String, Array<String>] :push_option (nil) transmit one or more server-side options
189
+ #
190
+ # Repeatable. Each occurrence emits a separate `--push-option=<value>` flag.
191
+ #
192
+ # Alias: :o
193
+ #
194
+ # @option options [Boolean, String, nil] :signed (nil) GPG-sign the push certificate (`--signed`)
195
+ #
196
+ # When a String (`'true'`, `'false'`, `'if-asked'`), emits `--signed=<value>`.
197
+ #
198
+ # @option options [Boolean, nil] :no_signed (nil) disable GPG signing of the push certificate (`--no-signed`)
199
+ #
200
+ # @option options [Boolean, String, nil] :force_with_lease (nil) refuse force pushes unless the
201
+ # remote ref matches the expected value (`--force-with-lease`)
202
+ #
203
+ # When a String (e.g. `'main:abc123'`), emits `--force-with-lease=<string>`.
204
+ #
205
+ # @option options [Boolean, nil] :no_force_with_lease (nil) disable force-with-lease (`--no-force-with-lease`)
206
+ #
207
+ # @option options [Boolean, nil] :force_if_includes (nil) force pushes only if commits being
208
+ # pushed are already in the remote-tracking branch (`--force-if-includes`)
209
+ #
210
+ # @option options [Boolean, nil] :no_force_if_includes (nil) disable force-if-includes
211
+ # (`--no-force-if-includes`)
212
+ #
213
+ # @option options [Boolean, nil] :verify (nil) run the pre-push hook (`--verify`)
214
+ #
215
+ # @option options [Boolean, nil] :no_verify (nil) bypass the pre-push hook (`--no-verify`)
216
+ #
217
+ # @option options [String] :recurse_submodules (nil) control whether submodule
218
+ # commits are pushed
219
+ #
220
+ # Pass a String (`'check'`, `'on-demand'`, `'only'`, `'no'`) to emit
221
+ # `--recurse-submodules=<value>`. Note: passing `true` is not valid; git requires
222
+ # an explicit value for this option.
223
+ #
224
+ # @option options [Boolean, nil] :no_recurse_submodules (nil) disable submodule push
225
+ # (`--no-recurse-submodules`)
226
+ #
227
+ # @option options [Boolean, nil] :thin (nil) send a "thin" pack to reduce network traffic (`--thin`)
228
+ #
229
+ # @option options [Boolean, nil] :no_thin (nil) send a full pack instead of a thin pack (`--no-thin`)
230
+ #
231
+ # @option options [Boolean, nil] :progress (nil) force progress reporting even when stderr is not a terminal
232
+ #
233
+ # @option options [Boolean, nil] :ipv4 (nil) use IPv4 addresses only
234
+ #
235
+ # Alias: :"4"
236
+ #
237
+ # @option options [Boolean, nil] :ipv6 (nil) use IPv6 addresses only
238
+ #
239
+ # Alias: :"6"
240
+ #
241
+ # @option options [Integer] :timeout (nil) maximum seconds to wait for the command to complete
242
+ #
243
+ # @return [Git::CommandLine::Result] the result of calling `git push`
244
+ #
245
+ # @raise [ArgumentError] if unsupported options are provided
246
+ #
247
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
248
+ #
249
+ end
250
+ end
251
+ 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 read-tree` command
8
+ #
9
+ # Reads tree information into the index. Optionally performs a merge
10
+ # (single-tree, two-way fast-forward, or three-way) with the `-m` flag,
11
+ # and updates the working tree files with `-u`.
12
+ #
13
+ # @example Read a single tree into the index
14
+ # read_tree = Git::Commands::ReadTree.new(execution_context)
15
+ # result = read_tree.call('HEAD')
16
+ #
17
+ # @example Read a tree under a prefix directory
18
+ # read_tree = Git::Commands::ReadTree.new(execution_context)
19
+ # result = read_tree.call('HEAD', prefix: 'subdir/')
20
+ #
21
+ # @example Perform a three-way merge
22
+ # read_tree = Git::Commands::ReadTree.new(execution_context)
23
+ # result = read_tree.call('base', 'ours', 'theirs', m: true, u: true)
24
+ #
25
+ # @example Empty the index
26
+ # read_tree = Git::Commands::ReadTree.new(execution_context)
27
+ # result = read_tree.call(empty: true)
28
+ #
29
+ # @note `arguments` block audited against https://git-scm.com/docs/git-read-tree/2.53.0
30
+ #
31
+ # @see https://git-scm.com/docs/git-read-tree git-read-tree
32
+ #
33
+ # @see Git::Commands
34
+ #
35
+ # @api private
36
+ #
37
+ class ReadTree < Git::Commands::Base
38
+ arguments do
39
+ literal 'read-tree'
40
+
41
+ # Merge mode
42
+ flag_option :m
43
+ flag_option :trivial
44
+ flag_option :aggressive
45
+ flag_option :reset
46
+ value_option :prefix, inline: true
47
+
48
+ # Working tree update
49
+ flag_option :u
50
+ flag_option :i
51
+
52
+ # Dry run and progress
53
+ flag_option %i[dry_run n]
54
+ flag_option :v
55
+
56
+ # Filtering and output
57
+ value_option :index_output, inline: true
58
+ flag_option :recurse_submodules, negatable: true
59
+ flag_option :no_sparse_checkout
60
+ flag_option :empty
61
+
62
+ # Feedback control
63
+ flag_option %i[quiet q]
64
+
65
+ end_of_options
66
+
67
+ operand :tree_ish, repeatable: true
68
+ end
69
+
70
+ # @!method call(*, **options)
71
+ #
72
+ # @param options [Hash] command options
73
+ #
74
+ # @option options [Boolean, nil] :m (nil) command option key; see overload docs
75
+ # for the full option list
76
+ #
77
+ # @overload call(*tree_ish, **options)
78
+ #
79
+ # Execute the `git read-tree` command
80
+ #
81
+ # @param tree_ish [Array<String>] zero or more tree-ish objects to
82
+ # read into the index
83
+ #
84
+ # Pass one tree-ish for a simple read or single-tree merge, two
85
+ # for a fast-forward (two-way) merge, or three for a three-way
86
+ # merge. Omit when using the `:empty` option.
87
+ #
88
+ # @param options [Hash] command options
89
+ #
90
+ # @option options [Boolean, nil] :m (nil) perform a merge, not just a
91
+ # read
92
+ #
93
+ # @option options [Boolean, nil] :trivial (nil) restrict three-way merge
94
+ # to happen only if there is no file-level merging required
95
+ #
96
+ # @option options [Boolean, nil] :aggressive (nil) resolve a few more
97
+ # three-way merge cases internally beyond the trivial defaults
98
+ #
99
+ # @option options [Boolean, nil] :reset (nil) same as `-m`, except that
100
+ # unmerged entries are discarded instead of failing
101
+ #
102
+ # @option options [String] :prefix (nil) keep the current index
103
+ # contents, and read the named tree-ish under the directory at
104
+ # the given prefix
105
+ #
106
+ # Maps to `--prefix=<prefix>`.
107
+ #
108
+ # @option options [Boolean, nil] :u (nil) after a successful merge,
109
+ # update the files in the work tree with the result
110
+ #
111
+ # @option options [Boolean, nil] :i (nil) disable the check with the
112
+ # working tree, meant for creating a merge of trees not directly
113
+ # related to the current working tree status
114
+ #
115
+ # @option options [Boolean, nil] :dry_run (nil) check if the command
116
+ # would error out, without updating the index or files for real
117
+ #
118
+ # Alias: `:n`
119
+ #
120
+ # @option options [Boolean, nil] :v (nil) show the progress of checking
121
+ # files out
122
+ #
123
+ # @option options [String] :index_output (nil) write the resulting
124
+ # index in the named file instead of `$GIT_INDEX_FILE`
125
+ #
126
+ # Maps to `--index-output=<file>`.
127
+ #
128
+ # @option options [Boolean, nil] :recurse_submodules (nil) update the
129
+ # content of all active submodules according to the commit
130
+ # recorded in the superproject (`--recurse-submodules`)
131
+ #
132
+ # @option options [Boolean, nil] :no_recurse_submodules (nil) disable
133
+ # recursive submodule update (`--no-recurse-submodules`)
134
+ #
135
+ # @option options [Boolean, nil] :no_sparse_checkout (nil) disable
136
+ # sparse checkout support even if `core.sparseCheckout` is true
137
+ #
138
+ # @option options [Boolean, nil] :empty (nil) empty the index instead of
139
+ # reading tree object(s)
140
+ #
141
+ # @option options [Boolean, nil] :quiet (nil) suppress feedback messages
142
+ #
143
+ # Alias: `:q`
144
+ #
145
+ # @return [Git::CommandLine::Result] the result of calling
146
+ # `git read-tree`
147
+ #
148
+ # @raise [ArgumentError] if unsupported options are provided
149
+ #
150
+ # @raise [Git::FailedError] if git exits with a non-zero exit
151
+ # status
152
+ end
153
+ end
154
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Remote
8
+ # `git remote add` command
9
+ #
10
+ # Adds a new remote to the repository, associating a name with a URL and
11
+ # configuring how tracking branches and tags are handled.
12
+ #
13
+ # @example Add a remote with a name and URL
14
+ # add = Git::Commands::Remote::Add.new(execution_context)
15
+ # add.call('origin', 'https://example.com/repo.git')
16
+ #
17
+ # @example Add a remote and immediately fetch
18
+ # add = Git::Commands::Remote::Add.new(execution_context)
19
+ # add.call('upstream', 'https://example.com/upstream.git', fetch: true)
20
+ #
21
+ # @example Track a specific branch and disable tag import
22
+ # add = Git::Commands::Remote::Add.new(execution_context)
23
+ # add.call('origin', 'https://example.com/repo.git', track: 'main', no_tags: true)
24
+ #
25
+ # @note `arguments` block audited against https://git-scm.com/docs/git-remote/2.53.0
26
+ #
27
+ # @see Git::Commands::Remote
28
+ #
29
+ # @see https://git-scm.com/docs/git-remote git-remote
30
+ #
31
+ # @api private
32
+ #
33
+ class Add < Git::Commands::Base
34
+ arguments do
35
+ literal 'remote'
36
+ literal 'add'
37
+ value_option %i[track t], repeatable: true
38
+ value_option %i[master m]
39
+ flag_option %i[fetch f]
40
+ flag_option :tags, negatable: true
41
+ value_option :mirror, inline: true
42
+
43
+ end_of_options
44
+
45
+ operand :name, required: true
46
+ operand :url, required: true
47
+ end
48
+
49
+ # @!method call(*, **options)
50
+ #
51
+ # @param options [Hash] command options
52
+ #
53
+ # @option options [String, Array<String>] :track (nil) command option key; see
54
+ # overload docs for the full option list
55
+ #
56
+ # @overload call(name, url, **options)
57
+ #
58
+ # Execute the `git remote add` command
59
+ #
60
+ # @param name [String] the remote name to create
61
+ #
62
+ # @param url [String] the remote URL to configure
63
+ #
64
+ # @param options [Hash] command options
65
+ #
66
+ # @option options [String, Array<String>] :track (nil) track only the given branch(es) during fetch
67
+ #
68
+ # Accepts a single branch name or an array; each value causes a separate `--track` flag.
69
+ #
70
+ # Alias: :t
71
+ #
72
+ # @option options [String] :master (nil) set the remote HEAD symbolic ref to the given branch
73
+ #
74
+ # Alias: :m
75
+ #
76
+ # @option options [Boolean, nil] :fetch (nil) fetch the remote immediately after adding it
77
+ #
78
+ # Alias: :f
79
+ #
80
+ # @option options [Boolean, nil] :tags (nil) import all tags from the remote (`--tags`)
81
+ #
82
+ # @option options [Boolean, nil] :no_tags (nil) disable importing tags from the remote (`--no-tags`)
83
+ #
84
+ # @option options [String] :mirror (nil) set mirror mode
85
+ #
86
+ # Common values are `'fetch'` and `'push'`.
87
+ #
88
+ # @return [Git::CommandLine::Result] the result of calling `git remote add`
89
+ #
90
+ # @raise [ArgumentError] if unsupported options are provided
91
+ #
92
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Remote
8
+ # `git remote get-url` command
9
+ #
10
+ # Retrieves the fetch or push URL configured for the named remote.
11
+ #
12
+ # @example Retrieve the fetch URL for a remote
13
+ # get_url = Git::Commands::Remote::GetUrl.new(execution_context)
14
+ # get_url.call('origin')
15
+ #
16
+ # @example Retrieve the push URL for a remote
17
+ # get_url = Git::Commands::Remote::GetUrl.new(execution_context)
18
+ # get_url.call('origin', push: true)
19
+ #
20
+ # @example Retrieve all configured URLs for a remote
21
+ # get_url = Git::Commands::Remote::GetUrl.new(execution_context)
22
+ # get_url.call('origin', all: true)
23
+ #
24
+ # @note `arguments` block audited against https://git-scm.com/docs/git-remote/2.53.0
25
+ #
26
+ # @see Git::Commands::Remote
27
+ #
28
+ # @see https://git-scm.com/docs/git-remote git-remote
29
+ #
30
+ # @api private
31
+ #
32
+ class GetUrl < Git::Commands::Base
33
+ arguments do
34
+ literal 'remote'
35
+ literal 'get-url'
36
+ flag_option :push
37
+ flag_option :all
38
+
39
+ end_of_options
40
+
41
+ operand :name, required: true
42
+ end
43
+
44
+ # @!method call(*)
45
+ #
46
+ # @overload call(name, **options)
47
+ #
48
+ # Execute the `git remote get-url` command
49
+ #
50
+ # @param name [String] the remote name to query
51
+ #
52
+ # @param options [Hash] command options
53
+ #
54
+ # @option options [Boolean, nil] :push (nil) query push URLs instead of fetch URLs
55
+ #
56
+ # @option options [Boolean, nil] :all (nil) return all configured URLs instead of only the first one
57
+ #
58
+ # @return [Git::CommandLine::Result] the result of calling `git remote get-url`
59
+ #
60
+ # @raise [ArgumentError] if unsupported options are provided
61
+ #
62
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
63
+ #
64
+ # @api public
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Remote
8
+ # `git remote` command (list remotes)
9
+ #
10
+ # Lists all configured remote connections.
11
+ #
12
+ # @example List all remotes
13
+ # list = Git::Commands::Remote::List.new(execution_context)
14
+ # list.call
15
+ #
16
+ # @example List remotes with URLs
17
+ # list = Git::Commands::Remote::List.new(execution_context)
18
+ # list.call(verbose: true)
19
+ #
20
+ # @note `arguments` block audited against https://git-scm.com/docs/git-remote/2.53.0
21
+ #
22
+ # @see Git::Commands::Remote
23
+ #
24
+ # @see https://git-scm.com/docs/git-remote git-remote
25
+ #
26
+ # @api private
27
+ #
28
+ class List < Git::Commands::Base
29
+ arguments do
30
+ literal 'remote'
31
+ flag_option %i[verbose v]
32
+ end
33
+
34
+ # @!method call(*)
35
+ #
36
+ # @overload call(**options)
37
+ #
38
+ # Execute the `git remote` command
39
+ #
40
+ # @param options [Hash] command options
41
+ #
42
+ # @option options [Boolean, nil] :verbose (nil) show remote URLs alongside remote names
43
+ #
44
+ # Alias: :v
45
+ #
46
+ # @return [Git::CommandLine::Result] the result of calling `git remote`
47
+ #
48
+ # @raise [ArgumentError] if unsupported options are provided
49
+ #
50
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
51
+ #
52
+ # @api public
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Remote
8
+ # `git remote prune` command
9
+ #
10
+ # Deletes stale remote-tracking refs that no longer exist on the named remote.
11
+ #
12
+ # @example Dry-run to preview which refs would be pruned
13
+ # prune = Git::Commands::Remote::Prune.new(execution_context)
14
+ # prune.call('origin', dry_run: true)
15
+ #
16
+ # @example Prune stale tracking refs for a remote
17
+ # prune = Git::Commands::Remote::Prune.new(execution_context)
18
+ # prune.call('origin')
19
+ #
20
+ # @note `arguments` block audited against https://git-scm.com/docs/git-remote/2.53.0
21
+ #
22
+ # @see Git::Commands::Remote
23
+ #
24
+ # @see https://git-scm.com/docs/git-remote git-remote
25
+ #
26
+ # @api private
27
+ #
28
+ class Prune < Git::Commands::Base
29
+ arguments do
30
+ literal 'remote'
31
+ literal 'prune'
32
+ flag_option %i[dry_run n]
33
+
34
+ end_of_options
35
+
36
+ operand :name, repeatable: true, required: true
37
+ end
38
+
39
+ # @!method call(*)
40
+ #
41
+ # @overload call(*name, **options)
42
+ #
43
+ # Prune stale remote-tracking refs for one or more remotes
44
+ #
45
+ # @param name [Array<String>] one or more remote names to prune
46
+ #
47
+ # @param options [Hash] command options
48
+ #
49
+ # @option options [Boolean, nil] :dry_run (nil) report what would be pruned without deleting refs
50
+ #
51
+ # Alias: :n
52
+ #
53
+ # @return [Git::CommandLine::Result] the result of calling `git remote prune`
54
+ #
55
+ # @raise [ArgumentError] if unsupported options are provided
56
+ #
57
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
58
+ #
59
+ # @api public
60
+ end
61
+ end
62
+ end
63
+ end