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,632 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'git/commands/base'
4
+
5
+ module Git
6
+ module Commands
7
+ # Implements the `git log` command.
8
+ #
9
+ # Returns commit history.
10
+ #
11
+ # @example Typical usage
12
+ # log = Git::Commands::Log.new(execution_context)
13
+ # log.call
14
+ # log.call(max_count: 20, since: '2 weeks ago')
15
+ # log.call('v1.0..v2.0', pretty: 'format:%H %s', path: ['lib/', 'spec/'])
16
+ # log.call(name_only: true, patch: true)
17
+ #
18
+ # @note `arguments` block audited against https://git-scm.com/docs/git-log/2.53.0
19
+ #
20
+ # @see https://git-scm.com/docs/git-log git-log documentation
21
+ #
22
+ # @see Git::Commands
23
+ #
24
+ # @api private
25
+ #
26
+ class Log < Git::Commands::Base # rubocop:disable Metrics/ClassLength
27
+ arguments do
28
+ literal 'log'
29
+
30
+ # Commit Limiting
31
+ value_option %i[max_count n], inline: true
32
+ value_option :skip, inline: true
33
+ value_option :since, inline: true
34
+ value_option :after, inline: true
35
+ value_option :since_as_filter, inline: true
36
+ value_option :until, inline: true
37
+ value_option :before, inline: true
38
+ value_option :author, inline: true
39
+ value_option :committer, inline: true
40
+ value_option :grep_reflog, inline: true
41
+ value_option :grep, inline: true
42
+ flag_option :all_match
43
+ flag_option :invert_grep
44
+ flag_option %i[regexp_ignore_case i]
45
+ flag_option :basic_regexp
46
+ flag_option %i[extended_regexp E]
47
+ flag_option %i[fixed_strings F]
48
+ flag_option %i[perl_regexp P]
49
+ flag_option :remove_empty
50
+ flag_option :merges, negatable: true
51
+ value_option :min_parents, inline: true
52
+ value_option :max_parents, inline: true
53
+ flag_option :first_parent
54
+ flag_option :exclude_first_parent_only
55
+ flag_option :all
56
+ flag_or_value_option :branches, inline: true
57
+ flag_or_value_option :tags, inline: true
58
+ flag_or_value_option :remotes, inline: true
59
+ value_option :glob, inline: true
60
+ value_option :exclude, inline: true
61
+ value_option :exclude_hidden, inline: true
62
+ flag_option :reflog
63
+ flag_option :alternate_refs
64
+ flag_option :single_worktree
65
+ flag_option :ignore_missing
66
+ flag_option :bisect
67
+ # --stdin excluded: requires stdin interaction (execution-model conflict)
68
+ flag_option :cherry_mark
69
+ flag_option :cherry_pick
70
+ flag_option :left_only
71
+ flag_option :right_only
72
+ flag_option :cherry
73
+ flag_option %i[walk_reflogs g]
74
+ flag_option :merge
75
+ flag_option :boundary
76
+
77
+ # History Simplification
78
+ flag_option :simplify_by_decoration
79
+ flag_option :show_pulls
80
+ flag_option :full_history
81
+ flag_option :dense
82
+ flag_option :sparse
83
+ flag_option :simplify_merges
84
+ flag_or_value_option :ancestry_path, inline: true
85
+
86
+ # Commit Ordering
87
+ flag_option :date_order
88
+ flag_option :author_date_order
89
+ flag_option :topo_order
90
+ flag_option :reverse
91
+
92
+ # Object Traversal
93
+ flag_or_value_option :no_walk, inline: true
94
+ flag_option :do_walk
95
+
96
+ # Commit Formatting
97
+ flag_or_value_option %i[pretty format], inline: true
98
+ flag_option :abbrev_commit, negatable: true
99
+ flag_option :oneline
100
+ value_option :encoding, inline: true
101
+ flag_or_value_option :expand_tabs, inline: true, negatable: true
102
+ flag_or_value_option :notes, inline: true, negatable: true
103
+ flag_option :show_notes_by_default
104
+ flag_option :show_signature
105
+ flag_option :relative_date
106
+ value_option :date, inline: true
107
+ flag_option :parents
108
+ flag_option :children
109
+ flag_option :left_right
110
+ flag_option :graph
111
+ flag_or_value_option :show_linear_break, inline: true
112
+ flag_option :follow
113
+ flag_or_value_option :decorate, inline: true, negatable: true
114
+ value_option :decorate_refs, inline: true
115
+ value_option :decorate_refs_exclude, inline: true
116
+ flag_option :clear_decorations
117
+ flag_option :source
118
+ flag_option :use_mailmap, negatable: true
119
+ flag_option :full_diff
120
+ flag_option :log_size
121
+
122
+ # Diff Formatting
123
+ flag_option %i[patch p]
124
+ flag_option %i[no_patch s]
125
+ value_option :diff_merges, inline: true
126
+ flag_option :no_diff_merges
127
+ flag_option :combined_all_paths
128
+ flag_option :raw
129
+ flag_or_value_option :stat, inline: true
130
+ flag_option :compact_summary
131
+ flag_option :numstat
132
+ flag_option :shortstat
133
+ flag_or_value_option :dirstat, inline: true
134
+ flag_option :summary
135
+ flag_option :name_only
136
+ flag_option :name_status
137
+ flag_or_value_option :submodule, inline: true
138
+ flag_or_value_option :color, inline: true, negatable: true
139
+ flag_option :full_index
140
+ flag_option :binary
141
+ flag_or_value_option :abbrev, inline: true
142
+ value_option :diff_filter, inline: true
143
+ flag_or_value_option :find_renames, inline: true
144
+ flag_or_value_option :find_copies, inline: true
145
+ flag_option :find_copies_harder
146
+ flag_or_value_option :relative, inline: true, negatable: true
147
+ flag_option :text
148
+ flag_option :ignore_space_at_eol
149
+ flag_option %i[ignore_space_change b]
150
+ flag_option %i[ignore_all_space w]
151
+ flag_option :ignore_blank_lines
152
+ value_option :ignore_matching_lines, inline: true
153
+ flag_option :ext_diff, negatable: true
154
+ flag_option :textconv, negatable: true
155
+ flag_option :no_prefix
156
+ value_option :src_prefix, inline: true
157
+ value_option :dst_prefix, inline: true
158
+
159
+ operand :revision_range, repeatable: true
160
+ end_of_options
161
+ value_option :path, as_operand: true, repeatable: true
162
+ execution_option :timeout
163
+ end
164
+
165
+ # @!method call(*, **)
166
+ #
167
+ # @overload call(*revision_range, **options)
168
+ #
169
+ # Execute the `git log` command.
170
+ #
171
+ # @param revision_range [Array<String>] zero or more revision specifiers
172
+ #
173
+ # Examples include `'v1.0..v2.0'`, `'abc123'`, `'^v0.9'`, or any
174
+ # expression accepted by git-log(1). When multiple values are given they
175
+ # are passed as separate positional arguments to git. Defaults to no
176
+ # revision constraint (i.e. all reachable commits).
177
+ #
178
+ # @param options [Hash] command options
179
+ #
180
+ # ### Commit Limiting
181
+ #
182
+ # @option options [Integer, String] :max_count (nil) maximum number of commits to output
183
+ #
184
+ # Alias: `:n`
185
+ #
186
+ # @option options [Integer, String] :skip (nil) skip this many commits before starting output
187
+ #
188
+ # @option options [String] :since (nil) show commits more recent than the given date
189
+ #
190
+ # Examples: `'2 weeks ago'`, `'2024-01-01'`
191
+ #
192
+ # @option options [String] :after (nil) show commits more recent than the given date
193
+ # (synonym for `:since`)
194
+ #
195
+ # @option options [String] :since_as_filter (nil) like `:since` but visits all commits
196
+ # in the range rather than stopping at the first older commit
197
+ #
198
+ # @option options [String] :until (nil) show commits older than the given date
199
+ #
200
+ # Examples: `'1 month ago'`, `'2024-01-01'`
201
+ #
202
+ # @option options [String] :before (nil) show commits older than the given date
203
+ # (synonym for `:until`)
204
+ #
205
+ # @option options [String] :author (nil) limit commits to those whose author line
206
+ # matches the given pattern (regular expression)
207
+ #
208
+ # @option options [String] :committer (nil) limit commits to those whose committer
209
+ # line matches the given pattern (regular expression)
210
+ #
211
+ # @option options [String] :grep_reflog (nil) limit commits to those with reflog entries
212
+ # matching the given pattern; requires `:walk_reflogs`
213
+ #
214
+ # @option options [String] :grep (nil) limit commits to those whose log message matches
215
+ # the given pattern (regular expression)
216
+ #
217
+ # @option options [Boolean, nil] :all_match (nil) limit output to commits matching all
218
+ # `--grep` patterns (default: any)
219
+ #
220
+ # @option options [Boolean, nil] :invert_grep (nil) limit output to commits whose log
221
+ # message does **not** match the `:grep` pattern
222
+ #
223
+ # @option options [Boolean, nil] :regexp_ignore_case (nil) match `--grep`, `--author`,
224
+ # and `--committer` patterns case-insensitively
225
+ #
226
+ # Alias: `:i`
227
+ #
228
+ # @option options [Boolean, nil] :basic_regexp (nil) treat limiting patterns as basic POSIX
229
+ # regular expressions (this is the default behavior)
230
+ #
231
+ # @option options [Boolean, nil] :extended_regexp (nil) treat limiting patterns as extended
232
+ # POSIX regular expressions
233
+ #
234
+ # Mutually exclusive with `:fixed_strings` and `:perl_regexp`. Alias: `:E`
235
+ #
236
+ # @option options [Boolean, nil] :fixed_strings (nil) treat limiting patterns as fixed
237
+ # strings instead of regular expressions
238
+ #
239
+ # Mutually exclusive with `:extended_regexp` and `:perl_regexp`. Alias: `:F`
240
+ #
241
+ # @option options [Boolean, nil] :perl_regexp (nil) treat limiting patterns as
242
+ # Perl-compatible regular expressions
243
+ #
244
+ # Mutually exclusive with `:extended_regexp` and `:fixed_strings`. Alias: `:P`
245
+ #
246
+ # @option options [Boolean, nil] :remove_empty (nil) stop when a given path disappears
247
+ # from the tree
248
+ #
249
+ # @option options [Boolean, nil] :merges (nil) include only merge commits (`--merges`)
250
+ #
251
+ # Equivalent to `--min-parents=2`.
252
+ #
253
+ # @option options [Boolean, nil] :no_merges (nil) exclude merge commits (`--no-merges`)
254
+ #
255
+ # Equivalent to `--max-parents=1`.
256
+ #
257
+ # @option options [Integer, String] :min_parents (nil) show only commits with at least this
258
+ # many parents
259
+ #
260
+ # @option options [Integer, String] :max_parents (nil) show only commits with at most this
261
+ # many parents
262
+ #
263
+ # @option options [Boolean, nil] :first_parent (nil) follow only the first parent commit
264
+ # upon seeing a merge commit
265
+ #
266
+ # @option options [Boolean, nil] :exclude_first_parent_only (nil) when excluding commits
267
+ # with `^`, follow only the first parent of merge commits
268
+ #
269
+ # @option options [Boolean, nil] :all (nil) pretend as if all refs in `refs/`, along
270
+ # with `HEAD`, are listed on the command line
271
+ #
272
+ # @option options [Boolean, String, nil] :branches (nil) pretend as if all refs in
273
+ # `refs/heads` are listed on the command line
274
+ #
275
+ # Pass a shell glob pattern (e.g. `'feature*'`) to restrict to matching branch names
276
+ #
277
+ # @option options [Boolean, String, nil] :tags (nil) pretend as if all refs in
278
+ # `refs/tags` are listed on the command line
279
+ #
280
+ # Pass a shell glob pattern to restrict to matching tag names
281
+ #
282
+ # @option options [Boolean, String, nil] :remotes (nil) pretend as if all refs in
283
+ # `refs/remotes` are listed on the command line
284
+ #
285
+ # Pass a shell glob pattern to restrict to matching remote-tracking branches
286
+ #
287
+ # @option options [String] :glob (nil) pretend as if all refs matching the given shell
288
+ # glob pattern are listed on the command line
289
+ #
290
+ # @option options [String] :exclude (nil) do not include refs matching the given glob
291
+ # that `--all`, `--branches`, `--tags`, `--remotes`, or `--glob` would otherwise use
292
+ #
293
+ # @option options [String] :exclude_hidden (nil) do not include refs hidden by the given
294
+ # configuration; value is one of `fetch`, `receive`, or `uploadpack`
295
+ #
296
+ # @option options [Boolean, nil] :reflog (nil) pretend as if all objects mentioned by
297
+ # reflogs are listed on the command line
298
+ #
299
+ # @option options [Boolean, nil] :alternate_refs (nil) pretend as if all objects mentioned
300
+ # as ref tips of alternate repositories are listed on the command line
301
+ #
302
+ # @option options [Boolean, nil] :single_worktree (nil) examine only the current working
303
+ # tree when `--all`, `--reflog`, or similar options are in use
304
+ #
305
+ # @option options [Boolean, nil] :ignore_missing (nil) ignore invalid object names in input
306
+ #
307
+ # @option options [Boolean, nil] :bisect (nil) pretend as if the bad bisect ref was listed
308
+ # and the good bisect refs were excluded
309
+ #
310
+ # @option options [Boolean, nil] :cherry_mark (nil) like `:cherry_pick` but marks
311
+ # equivalent commits with `=` instead of omitting them; inequivalent ones with +++
312
+ #
313
+ # @option options [Boolean, nil] :cherry_pick (nil) omit commits that introduce the same
314
+ # change as a commit on the other side of a symmetric difference
315
+ #
316
+ # @option options [Boolean, nil] :left_only (nil) list only commits reachable from the
317
+ # left side of a symmetric difference
318
+ #
319
+ # @option options [Boolean, nil] :right_only (nil) list only commits reachable from the
320
+ # right side of a symmetric difference
321
+ #
322
+ # @option options [Boolean, nil] :cherry (nil) synonym for
323
+ # `--right-only --cherry-mark --no-merges`
324
+ #
325
+ # @option options [Boolean, nil] :walk_reflogs (nil) walk reflog entries from most recent
326
+ # to oldest instead of the commit ancestry chain
327
+ #
328
+ # Alias: `:g`
329
+ #
330
+ # @option options [Boolean, nil] :merge (nil) show commits touching conflicted paths in
331
+ # the range `HEAD...MERGE_HEAD`; only useful with unmerged index entries
332
+ #
333
+ # @option options [Boolean, nil] :boundary (nil) output excluded boundary commits,
334
+ # prefixed with `-`
335
+ #
336
+ # ### History Simplification
337
+ #
338
+ # @option options [Boolean, nil] :simplify_by_decoration (nil) show only commits referenced
339
+ # by some branch or tag
340
+ #
341
+ # @option options [Boolean, nil] :show_pulls (nil) include merge commits that are not
342
+ # TREESAME to their first parent but are TREESAME to a later parent
343
+ #
344
+ # @option options [Boolean, nil] :full_history (nil) do not prune history; show all commits
345
+ # that touched the given path(s)
346
+ #
347
+ # @option options [Boolean, nil] :dense (nil) show only commits not TREESAME to any parent
348
+ #
349
+ # @option options [Boolean, nil] :sparse (nil) show all commits in the simplified history
350
+ #
351
+ # @option options [Boolean, nil] :simplify_merges (nil) remove needless merges from the
352
+ # result of `:full_history` with parent rewriting
353
+ #
354
+ # @option options [Boolean, String, nil] :ancestry_path (nil) limit to commits on the
355
+ # ancestry chain between the range endpoints
356
+ #
357
+ # Pass `true` for `--ancestry-path`; pass a commit SHA for `--ancestry-path=<commit>`
358
+ #
359
+ # ### Commit Ordering
360
+ #
361
+ # @option options [Boolean, nil] :date_order (nil) show commits in commit timestamp order,
362
+ # no parents before all children
363
+ #
364
+ # @option options [Boolean, nil] :author_date_order (nil) like `:date_order` but ordered
365
+ # by author timestamp
366
+ #
367
+ # @option options [Boolean, nil] :topo_order (nil) avoid showing commits on multiple lines
368
+ # of history intermixed
369
+ #
370
+ # @option options [Boolean, nil] :reverse (nil) output selected commits in reverse order;
371
+ # cannot be combined with `:walk_reflogs`
372
+ #
373
+ # ### Object Traversal
374
+ #
375
+ # @option options [Boolean, String, nil] :no_walk (nil) show only the given commits without
376
+ # traversing ancestors
377
+ #
378
+ # Pass `true` for `--no-walk` (sorted); pass `"unsorted"` for `--no-walk=unsorted`
379
+ #
380
+ # @option options [Boolean, nil] :do_walk (nil) override a previous `--no-walk`
381
+ #
382
+ # ### Commit Formatting
383
+ #
384
+ # @option options [Boolean, String, nil] :pretty (nil) pretty-print commit log in a format
385
+ #
386
+ # Pass `true` for `--pretty` (`medium` format); pass a format name such as `"oneline"`,
387
+ # `"short"`, `"full"`, `"fuller"`, `"email"`, `"raw"`, or a `format:<string>`
388
+ # expression for `--pretty=<format>`.
389
+ #
390
+ # Alias: `:format`
391
+ #
392
+ # @option options [Boolean, nil] :abbrev_commit (nil) abbreviate commit hash (`--abbrev-commit`)
393
+ #
394
+ # @option options [Boolean, nil] :no_abbrev_commit (nil) do not abbreviate commit hash (`--no-abbrev-commit`)
395
+ #
396
+ # @option options [Boolean, nil] :oneline (nil) shorthand for
397
+ # `--pretty=oneline --abbrev-commit`
398
+ #
399
+ # @option options [String] :encoding (nil) re-encode the commit log message in the
400
+ # given character encoding before output
401
+ #
402
+ # @option options [Boolean, String, nil] :expand_tabs (nil) expand tabs in log messages (`--expand-tabs`)
403
+ #
404
+ # Pass `true` for `--expand-tabs` (width 8); pass an integer string like `"4"` for
405
+ # `--expand-tabs=<n>`
406
+ #
407
+ # @option options [Boolean, nil] :no_expand_tabs (nil) do not expand tabs in log messages (`--no-expand-tabs`)
408
+ #
409
+ # @option options [Boolean, String, nil] :notes (nil) show notes annotating the commit (`--notes`)
410
+ #
411
+ # Pass `true` for `--notes`; pass a ref string for `--notes=<ref>`
412
+ #
413
+ # @option options [Boolean, nil] :no_notes (nil) suppress notes output (`--no-notes`)
414
+ #
415
+ # @option options [Boolean, nil] :show_notes_by_default (nil) show the default notes unless
416
+ # options for displaying specific notes are given
417
+ #
418
+ # @option options [Boolean, nil] :show_signature (nil) verify a signed commit with
419
+ # `gpg --verify`
420
+ #
421
+ # @option options [Boolean, nil] :relative_date (nil) show dates relative to the current
422
+ # time (synonym for `--date=relative`)
423
+ #
424
+ # @option options [String] :date (nil) format for dates in human-readable output
425
+ #
426
+ # Examples: `'relative'`, `'iso'`, `'short'`, `'format:%Y-%m-%d'`
427
+ #
428
+ # @option options [Boolean, nil] :parents (nil) print the parents of each commit and
429
+ # enable parent rewriting
430
+ #
431
+ # @option options [Boolean, nil] :children (nil) print the children of each commit and
432
+ # enable parent rewriting
433
+ #
434
+ # @option options [Boolean, nil] :left_right (nil) mark which side of a symmetric
435
+ # difference a commit is reachable from (`<` for left, `>` for right)
436
+ #
437
+ # @option options [Boolean, nil] :graph (nil) draw a text-based graphical representation
438
+ # of the commit history on the left side of output; implies `--topo-order`
439
+ #
440
+ # @option options [Boolean, String, nil] :show_linear_break (nil) put a barrier between
441
+ # non-linear consecutive commits when `--graph` is not used
442
+ #
443
+ # Pass `true` for `--show-linear-break`; pass a string for a custom barrier text
444
+ #
445
+ # @option options [Boolean, nil] :follow (nil) continue listing the history of a file
446
+ # beyond renames; requires `:path` to be set to exactly one path element
447
+ #
448
+ # @option options [Boolean, String, nil] :decorate (nil) print ref names of commits shown (`--decorate`)
449
+ #
450
+ # Pass `true` for `--decorate` (short format); pass a string such as `"full"` for
451
+ # `--decorate=<format>`
452
+ #
453
+ # @option options [Boolean, nil] :no_decorate (nil) do not print ref names (`--no-decorate`)
454
+ #
455
+ # @option options [String] :decorate_refs (nil) use only refs matching this pattern
456
+ # for decorations
457
+ #
458
+ # @option options [String] :decorate_refs_exclude (nil) do not use refs matching this
459
+ # pattern for decorations
460
+ #
461
+ # @option options [Boolean, nil] :clear_decorations (nil) clear all previous
462
+ # `--decorate-refs` / `--decorate-refs-exclude` options
463
+ #
464
+ # @option options [Boolean, nil] :source (nil) print the ref name by which each commit
465
+ # was reached
466
+ #
467
+ # @option options [Boolean, nil] :use_mailmap (nil) use the mailmap file to map author/
468
+ # committer names and addresses to canonical real names (`--use-mailmap`)
469
+ #
470
+ # @option options [Boolean, nil] :no_use_mailmap (nil) disable mailmap substitution (`--no-use-mailmap`)
471
+ #
472
+ # @option options [Boolean, nil] :full_diff (nil) show full diff for commits touching the
473
+ # specified paths, not just the diff for those paths
474
+ #
475
+ # @option options [Boolean, nil] :log_size (nil) include a `log size <n>` line for each
476
+ # commit indicating the length of the commit message in bytes
477
+ #
478
+ # ### Diff Formatting
479
+ #
480
+ # @option options [Boolean, nil] :patch (nil) generate patch output
481
+ #
482
+ # Alias: `:p`
483
+ #
484
+ # @option options [Boolean, nil] :no_patch (nil) suppress all diff output
485
+ #
486
+ # Alias: `:s`
487
+ #
488
+ # @option options [String] :diff_merges (nil) diff format for merge commits
489
+ #
490
+ # Values: `"off"`, `"on"`, `"first-parent"`, `"separate"`, `"combined"`,
491
+ # `"dense-combined"`, `"remerge"`
492
+ #
493
+ # @option options [Boolean, nil] :no_diff_merges (nil) disable diff output for merge
494
+ # commits (synonym for `--diff-merges=off`)
495
+ #
496
+ # @option options [Boolean, nil] :combined_all_paths (nil) in combined diffs, list the
497
+ # file name from all parents; only meaningful with `-c` or `--cc`
498
+ #
499
+ # @option options [Boolean, nil] :raw (nil) show a summary of changes using the raw diff
500
+ # format for each commit
501
+ #
502
+ # @option options [Boolean, String, nil] :stat (nil) generate a diffstat
503
+ #
504
+ # Pass `true` for `--stat`; pass a string such as `"80,40"` for
505
+ # `--stat=<width>[,<name-width>[,<count>]]`
506
+ #
507
+ # @option options [Boolean, nil] :compact_summary (nil) output a condensed summary of
508
+ # extended header information in diffstat; implies `--stat`
509
+ #
510
+ # @option options [Boolean, nil] :numstat (nil) like `--stat` but shows numbers of added
511
+ # and deleted lines in decimal notation without abbreviation
512
+ #
513
+ # @option options [Boolean, nil] :shortstat (nil) output only the last line of the
514
+ # `--stat` format
515
+ #
516
+ # @option options [Boolean, String, nil] :dirstat (nil) output distribution of relative
517
+ # amount of changes per sub-directory
518
+ #
519
+ # Pass `true` for `--dirstat`; pass a parameter string such as `"files,10"` for
520
+ # `--dirstat=<params>`
521
+ #
522
+ # @option options [Boolean, nil] :summary (nil) output a condensed summary of extended
523
+ # header information such as creations, renames, and mode changes
524
+ #
525
+ # @option options [Boolean, nil] :name_only (nil) show only the names of changed files
526
+ #
527
+ # @option options [Boolean, nil] :name_status (nil) show only the names and status of
528
+ # changed files
529
+ #
530
+ # @option options [Boolean, String, nil] :submodule (nil) specify how differences in
531
+ # submodules are shown
532
+ #
533
+ # Pass `true` for `--submodule` (log format); pass `"short"`, `"log"`, or `"diff"`
534
+ # for `--submodule=<format>`
535
+ #
536
+ # @option options [Boolean, String, nil] :color (nil) show colored diff output (`--color`)
537
+ #
538
+ # Pass `true` for `--color`; pass a string such as `"always"` for `--color=<when>`
539
+ #
540
+ # @option options [Boolean, nil] :no_color (nil) suppress colored diff output (`--no-color`)
541
+ #
542
+ # @option options [Boolean, nil] :full_index (nil) show the full pre- and post-image blob
543
+ # object names on the index line of patch output
544
+ #
545
+ # @option options [Boolean, nil] :binary (nil) output a binary diff that can be applied
546
+ # with `git apply`; implies `--patch`
547
+ #
548
+ # @option options [Boolean, String, nil] :abbrev (nil) show the shortest unique object
549
+ # name prefix in diff-raw output
550
+ #
551
+ # Pass `true` for `--abbrev`; pass an integer string for `--abbrev=<n>`
552
+ #
553
+ # @option options [String] :diff_filter (nil) select files by status letter
554
+ # (e.g. `"AD"` for Added and Deleted)
555
+ #
556
+ # @option options [Boolean, String, nil] :find_renames (nil) detect renames
557
+ #
558
+ # Pass `true` for `--find-renames`; pass a percentage threshold string such as
559
+ # `"90"` for `--find-renames=<n>`
560
+ #
561
+ # @option options [Boolean, String, nil] :find_copies (nil) detect copies as well as
562
+ # renames
563
+ #
564
+ # Pass `true` for `--find-copies`; pass a threshold string for `--find-copies=<n>`
565
+ #
566
+ # @option options [Boolean, nil] :find_copies_harder (nil) inspect unmodified files as
567
+ # candidates for copy source; expensive for large projects
568
+ #
569
+ # @option options [Boolean, String, nil] :relative (nil) show pathnames relative to the
570
+ # given subdirectory, or the current directory when run from a subdirectory (`--relative`)
571
+ #
572
+ # Pass `true` for `--relative`; pass a path string for `--relative=<path>`
573
+ #
574
+ # @option options [Boolean, nil] :no_relative (nil) show absolute pathnames (`--no-relative`)
575
+ #
576
+ # @option options [Boolean, nil] :text (nil) treat all files as text; alias `-a`
577
+ #
578
+ # @option options [Boolean, nil] :ignore_space_at_eol (nil) ignore changes in whitespace
579
+ # at end of line
580
+ #
581
+ # @option options [Boolean, nil] :ignore_space_change (nil) ignore changes in amount of
582
+ # whitespace; alias `-b`
583
+ #
584
+ # @option options [Boolean, nil] :ignore_all_space (nil) ignore whitespace when comparing
585
+ # lines; alias `-w`
586
+ #
587
+ # @option options [Boolean, nil] :ignore_blank_lines (nil) ignore changes whose lines are
588
+ # all blank
589
+ #
590
+ # @option options [String] :ignore_matching_lines (nil) ignore changes whose all lines
591
+ # match the given regular expression
592
+ #
593
+ # @option options [Boolean, nil] :ext_diff (nil) allow external diff helpers (`--ext-diff`)
594
+ #
595
+ # @option options [Boolean, nil] :no_ext_diff (nil) disallow external diff helpers (`--no-ext-diff`)
596
+ #
597
+ # @option options [Boolean, nil] :textconv (nil) allow external text conversion filters
598
+ # when comparing binary files (`--textconv`)
599
+ #
600
+ # @option options [Boolean, nil] :no_textconv (nil) disallow external text conversion filters
601
+ # (`--no-textconv`)
602
+ #
603
+ # @option options [Boolean, nil] :no_prefix (nil) do not show any source or destination
604
+ # prefix
605
+ #
606
+ # @option options [String] :src_prefix (nil) show the given source prefix instead of
607
+ # `a/`
608
+ #
609
+ # @option options [String] :dst_prefix (nil) show the given destination prefix instead
610
+ # of `b/`
611
+ #
612
+ # ### Paths
613
+ #
614
+ # @option options [Array<String>] :path (nil) limit commits to those that affected the
615
+ # given paths
616
+ #
617
+ # ### Execution
618
+ #
619
+ # @option options [Integer, Float] :timeout (nil) number of seconds to wait before the
620
+ # command is aborted with a timeout error
621
+ #
622
+ # @return [Git::CommandLineResult] the result of calling `git log`
623
+ #
624
+ # @raise [ArgumentError] if unsupported options are provided
625
+ #
626
+ # @raise [Git::FailedError] if git exits with a non-zero exit status
627
+ #
628
+ # @api public
629
+ #
630
+ end
631
+ end
632
+ end