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,191 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git ls-files` command.
8
+ #
9
+ # This command shows information about files in the index and the working tree.
10
+ # It is used to list tracked, untracked, ignored, and staged files.
11
+ #
12
+ # @example List staged files with stage info
13
+ # ls_files = Git::Commands::LsFiles.new(execution_context)
14
+ # ls_files.call('.', stage: true)
15
+ #
16
+ # @example List untracked files not ignored
17
+ # ls_files = Git::Commands::LsFiles.new(execution_context)
18
+ # ls_files.call(others: true, exclude_standard: true)
19
+ #
20
+ # @example List ignored files
21
+ # ls_files = Git::Commands::LsFiles.new(execution_context)
22
+ # ls_files.call(others: true, ignored: true, exclude_standard: true)
23
+ #
24
+ # @example List untracked files in a specific directory
25
+ # ls_files = Git::Commands::LsFiles.new(execution_context)
26
+ # ls_files.call(others: true, exclude_standard: true, chdir: '/path/to/workdir')
27
+ #
28
+ # @note `arguments` block audited against https://git-scm.com/docs/git-ls-files/2.53.0
29
+ #
30
+ # @see https://git-scm.com/docs/git-ls-files git-ls-files documentation
31
+ #
32
+ # @see Git::Commands
33
+ #
34
+ # @api private
35
+ #
36
+ class LsFiles < Git::Commands::Base
37
+ arguments do
38
+ literal 'ls-files'
39
+ flag_option :z
40
+ flag_option :t
41
+ flag_option :v
42
+ flag_option :f
43
+ flag_option %i[cached c]
44
+ flag_option %i[deleted d]
45
+ flag_option %i[others o]
46
+ flag_option %i[ignored i]
47
+ flag_option %i[stage s]
48
+ flag_option %i[unmerged u]
49
+ flag_option %i[killed k]
50
+ flag_option %i[modified m]
51
+ flag_option :resolve_undo
52
+ flag_option :directory
53
+ flag_option :no_empty_directory
54
+ flag_option :eol
55
+ flag_option :deduplicate
56
+ value_option %i[exclude x], inline: true
57
+ value_option %i[exclude_from X], inline: true
58
+ value_option :exclude_per_directory, inline: true
59
+ flag_option :exclude_standard
60
+ flag_option :error_unmatch
61
+ value_option :with_tree, inline: true
62
+ flag_option :full_name
63
+ flag_option :recurse_submodules
64
+ flag_or_value_option :abbrev, inline: true
65
+ flag_option :debug
66
+ flag_option :sparse
67
+ value_option :format, inline: true
68
+
69
+ end_of_options
70
+
71
+ operand :file, repeatable: true
72
+
73
+ execution_option :chdir
74
+ end
75
+
76
+ # @!method call(*, **)
77
+ #
78
+ # @overload call(*file, **options)
79
+ #
80
+ # Execute the `git ls-files` command.
81
+ #
82
+ # @param file [Array<String>] paths to limit file listing
83
+ #
84
+ # @param options [Hash] command options
85
+ #
86
+ # @option options [Boolean, nil] :z (nil) use NUL line termination and do not quote filenames
87
+ #
88
+ # @option options [Boolean, nil] :t (nil) show status tags together with filenames
89
+ #
90
+ # @option options [Boolean, nil] :v (nil) similar to `-t` but use lowercase letters for files
91
+ # that are marked as assume unchanged
92
+ #
93
+ # @option options [Boolean, nil] :f (nil) similar to `-t` but use lowercase letters for files
94
+ # that are marked as fsmonitor valid
95
+ #
96
+ # @option options [Boolean, nil] :cached (nil) show all files cached in the index
97
+ #
98
+ # Alias: :c
99
+ #
100
+ # @option options [Boolean, nil] :deleted (nil) show files with an unstaged deletion
101
+ #
102
+ # Alias: :d
103
+ #
104
+ # @option options [Boolean, nil] :others (nil) show other (i.e. untracked) files in the output
105
+ #
106
+ # Alias: :o
107
+ #
108
+ # @option options [Boolean, nil] :ignored (nil) show only ignored files in the output
109
+ #
110
+ # Must be used with either `:cached` or `:others`. When used with `:cached`, shows only
111
+ # cached files matching an exclude pattern. When used with `:others`, shows only
112
+ # untracked files matched by an exclude pattern.
113
+ #
114
+ # Alias: :i
115
+ #
116
+ # @option options [Boolean, nil] :stage (nil) show object name, mode bits, and stage number
117
+ #
118
+ # Alias: :s
119
+ #
120
+ # @option options [Boolean, nil] :unmerged (nil) show information about unmerged files
121
+ #
122
+ # Alias: :u
123
+ #
124
+ # @option options [Boolean, nil] :killed (nil) show untracked files that need to be removed
125
+ # due to file/directory conflicts for tracked files
126
+ #
127
+ # Alias: :k
128
+ #
129
+ # @option options [Boolean, nil] :modified (nil) show files with an unstaged modification
130
+ #
131
+ # Alias: :m
132
+ #
133
+ # @option options [Boolean, nil] :resolve_undo (nil) show files having resolve-undo information
134
+ #
135
+ # @option options [Boolean, nil] :directory (nil) show just the directory name (with trailing
136
+ # slash) when a whole directory is classified as "other"
137
+ #
138
+ # @option options [Boolean, nil] :no_empty_directory (nil) do not list empty directories
139
+ #
140
+ # @option options [Boolean, nil] :eol (nil) show EOL and encoding attributes of files
141
+ #
142
+ # @option options [Boolean, nil] :deduplicate (nil) suppress duplicate filenames when showing
143
+ # only filenames
144
+ #
145
+ # @option options [String] :exclude (nil) skip untracked files matching the given pattern
146
+ #
147
+ # Alias: :x
148
+ #
149
+ # @option options [String] :exclude_from (nil) read exclude patterns from the given file
150
+ #
151
+ # Alias: :X
152
+ #
153
+ # @option options [String] :exclude_per_directory (nil) read additional exclude patterns
154
+ # from the named file in each directory
155
+ #
156
+ # @option options [Boolean, nil] :exclude_standard (nil) add the standard git exclusions
157
+ #
158
+ # @option options [Boolean, nil] :error_unmatch (nil) treat unmatched files as an error
159
+ #
160
+ # @option options [String] :with_tree (nil) pretend paths removed since the named
161
+ # tree-ish are still present when using `--error-unmatch`
162
+ #
163
+ # @option options [Boolean, nil] :full_name (nil) force paths to be output relative to the
164
+ # project top-level directory
165
+ #
166
+ # @option options [Boolean, nil] :recurse_submodules (nil) recursively calls ls-files on each
167
+ # active submodule in the repository
168
+ #
169
+ # @option options [Boolean, Integer, String, nil] :abbrev (nil) show only a partial prefix of the
170
+ # object name; pass `true` for the default number of hex digits, or an Integer or String
171
+ # for a specific prefix length (e.g., `abbrev: 10` or `abbrev: "10"`)
172
+ #
173
+ # @option options [Boolean, nil] :debug (nil) after each filename, output raw index information
174
+ # (ctime data, mtime data, dev, ino, uid, gid, size, flags, flagsx)
175
+ #
176
+ # @option options [Boolean, nil] :sparse (nil) if the index is sparse, show the sparse directory
177
+ # entries rather than expanding to the contained files
178
+ #
179
+ # @option options [String] :format (nil) a string that interpolates %(fieldname) from
180
+ # the index entry for each file
181
+ #
182
+ # @option options [String] :chdir (nil) run the command from the specified directory
183
+ #
184
+ # @return [Git::CommandLineResult] the result of calling `git ls-files`
185
+ #
186
+ # @raise [ArgumentError] if unsupported options are provided
187
+ #
188
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
189
+ end
190
+ end
191
+ end
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git ls-remote` command
8
+ #
9
+ # Lists references available in a remote repository along with the
10
+ # associated commit IDs. Can be used to detect changes in a remote
11
+ # repository without cloning or fetching.
12
+ #
13
+ # @note `arguments` block audited against https://git-scm.com/docs/git-ls-remote/2.53.0
14
+ #
15
+ # @see https://git-scm.com/docs/git-ls-remote git-ls-remote documentation
16
+ #
17
+ # @see Git::Commands
18
+ #
19
+ # @api private
20
+ #
21
+ # @example List all refs in a remote
22
+ # ls_remote = Git::Commands::LsRemote.new(execution_context)
23
+ # ls_remote.call('origin')
24
+ #
25
+ # @example List only branches and tags
26
+ # ls_remote = Git::Commands::LsRemote.new(execution_context)
27
+ # ls_remote.call('origin', branches: true, tags: true)
28
+ #
29
+ # @example List only refs (no symbolic refs like HEAD)
30
+ # ls_remote = Git::Commands::LsRemote.new(execution_context)
31
+ # ls_remote.call('origin', refs: true)
32
+ #
33
+ # @example Filter by pattern
34
+ # ls_remote = Git::Commands::LsRemote.new(execution_context)
35
+ # ls_remote.call('origin', 'refs/heads/main')
36
+ #
37
+ # @example Detect the default branch of a remote
38
+ # ls_remote = Git::Commands::LsRemote.new(execution_context)
39
+ # ls_remote.call('origin', 'HEAD', symref: true)
40
+ #
41
+ class LsRemote < Git::Commands::Base
42
+ arguments do
43
+ literal 'ls-remote'
44
+
45
+ flag_option %i[branches b]
46
+ flag_option %i[heads h]
47
+ flag_option %i[tags t]
48
+ flag_option :refs
49
+
50
+ # Connectivity
51
+ value_option :upload_pack, inline: true
52
+
53
+ flag_option %i[quiet q]
54
+ flag_option :exit_code
55
+ flag_option :get_url
56
+ value_option :sort, inline: true
57
+ flag_option :symref
58
+
59
+ value_option %i[server_option o],
60
+ inline: true, repeatable: true
61
+
62
+ # Execution-only options (not emitted as CLI flags)
63
+ execution_option :timeout
64
+
65
+ end_of_options
66
+
67
+ operand :repository
68
+ operand :pattern, repeatable: true
69
+ end
70
+
71
+ # Exit status 2 means no matching refs were found (used with --exit-code)
72
+ allow_exit_status 0..2
73
+
74
+ # @!method call(*, **)
75
+ #
76
+ # @overload call(repository = nil, *patterns, **options)
77
+ #
78
+ # Execute the `git ls-remote` command
79
+ #
80
+ # @param repository [String, nil] The remote name or URL to query
81
+ #
82
+ # When nil, git uses the remote inferred from the current branch's
83
+ # tracking configuration, or "origin" if no tracking remote is set.
84
+ #
85
+ # @param patterns [Array<String>] One or more ref patterns to filter results
86
+ #
87
+ # When omitted, all references (after filtering via `--branches`, `--tags`,
88
+ # `--refs`) are shown. When specified, only refs matching one or more
89
+ # patterns are displayed.
90
+ #
91
+ # @param options [Hash] command options
92
+ #
93
+ # @option options [Boolean, nil] :branches (nil) limit output to refs under `refs/heads/`
94
+ #
95
+ # Alias: :b
96
+ #
97
+ # @option options [Boolean, nil] :heads (nil) limit output to refs under `refs/heads/`
98
+ #
99
+ # Deprecated: use `:branches` instead. Kept for backward compatibility with
100
+ # older git versions where `--heads` is the only supported flag.
101
+ #
102
+ # Alias: :h
103
+ #
104
+ # @option options [Boolean, nil] :tags (nil) limit output to refs under `refs/tags/`
105
+ #
106
+ # Alias: :t
107
+ #
108
+ # @option options [Boolean, nil] :refs (nil) exclude peeled tags and pseudorefs
109
+ # like `HEAD` from the output
110
+ #
111
+ # @option options [String] :upload_pack (nil) full path to `git-upload-pack`
112
+ # on the remote host
113
+ #
114
+ # Useful when accessing repositories via SSH where the daemon does not
115
+ # use the PATH configured by the user.
116
+ #
117
+ # @option options [Boolean, nil] :quiet (nil) do not print the remote URL to stderr
118
+ #
119
+ # Alias: :q
120
+ #
121
+ # @option options [Boolean, nil] :exit_code (nil) exit with status `2` when no
122
+ # matching refs are found in the remote repository
123
+ #
124
+ # Without this option, the command exits `0` whenever it successfully
125
+ # communicates with the remote, even if no refs match.
126
+ #
127
+ # @option options [Boolean, nil] :get_url (nil) expand and print the remote URL
128
+ # (respecting `url.<base>.insteadOf` config) and exit without contacting
129
+ # the remote
130
+ #
131
+ # @option options [String] :sort (nil) sort output by the given key
132
+ #
133
+ # Prefix `-` for descending order. Supports `"version:refname"` or
134
+ # `"v:refname"`. See `git for-each-ref` for sort key documentation.
135
+ #
136
+ # @option options [Boolean, nil] :symref (nil) show the underlying ref pointed to by
137
+ # symbolic refs
138
+ #
139
+ # The `upload-pack` protocol currently surfaces only the `HEAD` symref,
140
+ # so that is typically the only symref shown.
141
+ #
142
+ # @option options [String, Array<String>] :server_option (nil) transmit a
143
+ # string to the server when communicating using protocol version 2
144
+ #
145
+ # The string must not contain NUL or LF characters. Repeatable by
146
+ # passing an Array. Alias: :o
147
+ #
148
+ # @option options [Numeric] :timeout (nil) execution timeout in seconds
149
+ #
150
+ # @return [Git::CommandLineResult] the result of calling `git ls-remote`
151
+ #
152
+ # @raise [Git::FailedError] if git exits outside the allowed range (exit code > 2)
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,131 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git ls-tree` command
8
+ #
9
+ # Lists the contents of a tree object, showing the mode, type, object
10
+ # name, and file name of each item. Supports recursive listing, output
11
+ # format control, and path filtering.
12
+ #
13
+ # @note `arguments` block audited against https://git-scm.com/docs/git-ls-tree/2.53.0
14
+ #
15
+ # @see https://git-scm.com/docs/git-ls-tree git-ls-tree
16
+ #
17
+ # @api private
18
+ #
19
+ # @example List the top-level tree of HEAD
20
+ # ls_tree = Git::Commands::LsTree.new(execution_context)
21
+ # ls_tree.call('HEAD')
22
+ #
23
+ # @example Recursively list all files under HEAD
24
+ # ls_tree = Git::Commands::LsTree.new(execution_context)
25
+ # ls_tree.call('HEAD', r: true)
26
+ #
27
+ # @example List only file names recursively
28
+ # ls_tree = Git::Commands::LsTree.new(execution_context)
29
+ # ls_tree.call('HEAD', r: true, name_only: true)
30
+ #
31
+ # @example List entries under a specific path
32
+ # ls_tree = Git::Commands::LsTree.new(execution_context)
33
+ # ls_tree.call('HEAD', 'lib/')
34
+ #
35
+ class LsTree < Git::Commands::Base
36
+ arguments do
37
+ literal 'ls-tree'
38
+
39
+ # Listing behavior
40
+ flag_option :d
41
+ flag_option :r
42
+ flag_option :t
43
+ flag_option %i[long l]
44
+ flag_option :z
45
+
46
+ # Output format
47
+ flag_option %i[name_only name_status]
48
+ flag_option :object_only
49
+ flag_option :full_name
50
+ flag_option :full_tree
51
+ flag_or_value_option :abbrev, inline: true
52
+ value_option :format, inline: true
53
+
54
+ end_of_options
55
+
56
+ operand :tree_ish, required: true
57
+ operand :path, repeatable: true
58
+ end
59
+
60
+ # @!method call(*, **)
61
+ #
62
+ # @overload call(tree_ish, *path, **options)
63
+ #
64
+ # Execute the git ls-tree command
65
+ #
66
+ # @param tree_ish [String] the tree object to list (SHA, branch name, tag, etc.)
67
+ #
68
+ # @param path [Array<String>] optional path(s) to restrict the listing
69
+ #
70
+ # When given, only entries matching these paths are shown.
71
+ #
72
+ # @param options [Hash] command options
73
+ #
74
+ # @option options [Boolean, nil] :d (nil) show only the named tree entry itself,
75
+ # not its children
76
+ #
77
+ # @option options [Boolean, nil] :r (nil) recurse into sub-trees
78
+ #
79
+ # @option options [Boolean, nil] :t (nil) show tree entries even when going to
80
+ # recurse them
81
+ #
82
+ # Implies recursive listing (`:r`) in git.
83
+ #
84
+ # @option options [Boolean, nil] :long (nil) show object size of blob (file)
85
+ # objects
86
+ #
87
+ # Cannot be combined with `:name_only` or `:object_only`.
88
+ #
89
+ # Alias: :l
90
+ #
91
+ # @option options [Boolean, nil] :z (nil) use NUL (`\0`) as line terminator
92
+ # instead of newline, and do not quote filenames
93
+ #
94
+ # @option options [Boolean, nil] :name_only (nil) list only filenames, one per
95
+ # line
96
+ #
97
+ # Cannot be combined with `:object_only` or `:long`.
98
+ #
99
+ # Alias: :name_status
100
+ #
101
+ # @option options [Boolean, nil] :object_only (nil) list only the object names
102
+ # (SHAs), one per line
103
+ #
104
+ # Cannot be combined with `:name_only` or `:long`.
105
+ #
106
+ # @option options [Boolean, nil] :full_name (nil) show full path names instead
107
+ # of paths relative to the current working directory
108
+ #
109
+ # @option options [Boolean, nil] :full_tree (nil) do not limit the listing to
110
+ # the current working directory; implies `:full_name`
111
+ #
112
+ # @option options [Boolean, String, nil] :abbrev (nil) use abbreviated object names
113
+ #
114
+ # When `true`, uses git's default abbreviated name length. When a string
115
+ # (e.g. `'8'`), uses exactly that many hex digits.
116
+ #
117
+ # @option options [String] :format (nil) a format string that interpolates
118
+ # `%(fieldname)` placeholders from tree entries
119
+ #
120
+ # Cannot be combined with `:long`, `:name_only`, or `:object_only`.
121
+ #
122
+ # @return [Git::CommandLineResult] the result of calling `git ls-tree`
123
+ #
124
+ # @raise [ArgumentError] if unsupported options are provided
125
+ #
126
+ # @raise [ArgumentError] if the tree-ish operand is missing
127
+ #
128
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,75 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Maintenance
8
+ # Add the current repository to the maintenance config
9
+ #
10
+ # @example Register the repository for maintenance
11
+ # Git::Commands::Maintenance::Register.new(execution_context).call
12
+ #
13
+ # @example Register with a custom config file
14
+ # Git::Commands::Maintenance::Register.new(execution_context).call(config_file: '/path/to/config')
15
+ #
16
+ # @note `arguments` block audited against https://git-scm.com/docs/git-maintenance/2.54.0
17
+ #
18
+ # @see Git::Commands::Maintenance Git::Commands::Maintenance for the full sub-command list
19
+ #
20
+ # @see https://git-scm.com/docs/git-maintenance git-maintenance documentation
21
+ #
22
+ # @api private
23
+ #
24
+ class Register < Git::Commands::Base
25
+ requires_git_version '2.30.0'
26
+
27
+ arguments do
28
+ literal 'maintenance'
29
+ literal 'register'
30
+
31
+ flag_or_value_option :config_file, negatable: true
32
+ execution_option :env
33
+ end
34
+
35
+ # @!method call(*, **)
36
+ #
37
+ # @overload call(**options)
38
+ #
39
+ # Initialize config values so scheduled maintenance will start running
40
+ #
41
+ # This adds the repository to the `maintenance.repo` config variable
42
+ # in the current user's global config (or the specified config file)
43
+ # and enables recommended configuration values for
44
+ # `maintenance.<task>.schedule`.
45
+ #
46
+ # Also sets `maintenance.strategy` to 'incremental' if not previously set,
47
+ # and disables foreground maintenance by setting `maintenance.auto = false`
48
+ # in the current repository.
49
+ #
50
+ # @param options [Hash] command options
51
+ #
52
+ # @option options [Boolean, String, nil] :config_file (nil) use a specified
53
+ # config file instead of the global config (`--config-file`)
54
+ #
55
+ # When a String, the path is passed as `--config-file <file>`.
56
+ #
57
+ # @option options [Boolean, nil] :no_config_file (nil) disable the config file
58
+ # (`--no-config-file`)
59
+ #
60
+ # @option options [Hash] :env (nil) environment variables to set for the git
61
+ # process; merged with the default environment; not passed to the git CLI
62
+ #
63
+ # @return [Git::CommandLineResult] the result of calling `git maintenance register`
64
+ #
65
+ # @raise [ArgumentError] if unsupported options are provided
66
+ #
67
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
68
+ #
69
+ # @raise [Git::VersionError] if git version is below 2.30.0
70
+ #
71
+ # @api public
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ module Maintenance
8
+ # Run one or more maintenance tasks
9
+ #
10
+ # @example Run all enabled maintenance tasks
11
+ # Git::Commands::Maintenance::Run.new(execution_context).call
12
+ #
13
+ # @example Run specific tasks in order
14
+ # Git::Commands::Maintenance::Run.new(execution_context).call(task: ['gc', 'commit-graph'])
15
+ #
16
+ # @example Run tasks only if thresholds are met
17
+ # Git::Commands::Maintenance::Run.new(execution_context).call(auto: true)
18
+ #
19
+ # @example Run scheduled tasks at a specific frequency
20
+ # Git::Commands::Maintenance::Run.new(execution_context).call(schedule: 'hourly')
21
+ #
22
+ # @note `arguments` block audited against https://git-scm.com/docs/git-maintenance/2.54.0
23
+ #
24
+ # @see Git::Commands::Maintenance Git::Commands::Maintenance for the full sub-command list
25
+ #
26
+ # @see https://git-scm.com/docs/git-maintenance git-maintenance documentation
27
+ #
28
+ # @api private
29
+ #
30
+ class Run < Git::Commands::Base
31
+ requires_git_version '2.30.0'
32
+
33
+ arguments do
34
+ literal 'maintenance'
35
+ literal 'run'
36
+
37
+ flag_option :auto, negatable: true
38
+ flag_option :detach, negatable: true
39
+ flag_option :scheduled, negatable: true
40
+ flag_or_value_option :schedule, negatable: true, inline: true
41
+ flag_option :quiet, negatable: true
42
+ value_option :task, inline: true, repeatable: true
43
+ execution_option :env
44
+ end
45
+
46
+ # @!method call(*, **)
47
+ #
48
+ # @overload call(**options)
49
+ #
50
+ # Run one or more maintenance tasks
51
+ #
52
+ # @param options [Hash] command options
53
+ #
54
+ # @option options [Boolean, nil] :auto (nil) run tasks only if thresholds are met (`--auto`)
55
+ #
56
+ # Not compatible with the `:schedule` option.
57
+ #
58
+ # @option options [Boolean, nil] :no_auto (nil) disable threshold-based execution (`--no-auto`)
59
+ #
60
+ # @option options [Boolean, nil] :detach (nil) detach the maintenance process from the current terminal
61
+ # (`--detach`)
62
+ #
63
+ # @option options [Boolean, nil] :no_detach (nil) do not detach the maintenance process (`--no-detach`)
64
+ #
65
+ # @option options [Boolean, nil] :scheduled (nil) run tasks that are due according to schedule config
66
+ # (`--scheduled`)
67
+ #
68
+ # @option options [Boolean, nil] :no_scheduled (nil) do not limit runs to scheduled tasks (`--no-scheduled`)
69
+ #
70
+ # @option options [Boolean, String, nil] :schedule (nil) run tasks only if time conditions are met
71
+ # (`--schedule`)
72
+ #
73
+ # When a String (`'hourly'`, `'daily'`, or `'weekly'`), runs only tasks scheduled
74
+ # for that frequency; the string is emitted as `--schedule=<frequency>`.
75
+ #
76
+ # @option options [Boolean, nil] :no_schedule (nil) disable schedule-based filtering (`--no-schedule`)
77
+ #
78
+ # @option options [Boolean, nil] :quiet (nil) suppress progress and informational messages (`--quiet`)
79
+ #
80
+ # @option options [Boolean, nil] :no_quiet (nil) enable progress and informational messages (`--no-quiet`)
81
+ #
82
+ # @option options [Array<String>, String] :task (nil) specify which task(s) to run
83
+ #
84
+ # If specified, only the given tasks are run in the specified order.
85
+ # Otherwise, tasks are determined by config options.
86
+ # Valid task names: `commit-graph`, `prefetch`, `gc`, `loose-objects`,
87
+ # `incremental-repack`, `pack-refs`, `reflog-expire`, `rerere-gc`, `worktree-prune`.
88
+ #
89
+ # @option options [Hash] :env (nil) environment variables to set for the git
90
+ # process; merged with the default environment; not passed to the git CLI
91
+ #
92
+ # @return [Git::CommandLineResult] the result of calling `git maintenance run`
93
+ #
94
+ # @raise [ArgumentError] if unsupported options are provided
95
+ #
96
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
97
+ #
98
+ # @raise [Git::VersionError] if git version is below 2.30.0
99
+ #
100
+ # @api public
101
+ end
102
+ end
103
+ end
104
+ end