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.
- checksums.yaml +4 -4
- data/.github/copilot-instructions.md +67 -2705
- data/.github/pull_request_template.md +3 -1
- data/.github/skills/breaking-change-analysis/SKILL.md +102 -0
- data/.github/skills/ci-cd-troubleshooting/SKILL.md +264 -0
- data/.github/skills/command-implementation/REFERENCE.md +993 -0
- data/.github/skills/command-implementation/SKILL.md +229 -0
- data/.github/skills/command-test-conventions/SKILL.md +660 -0
- data/.github/skills/command-yard-documentation/SKILL.md +426 -0
- data/.github/skills/dependency-management/SKILL.md +72 -0
- data/.github/skills/development-workflow/SKILL.md +506 -0
- data/.github/skills/extract-command-from-lib/SKILL.md +487 -0
- data/.github/skills/extract-facade-from-base-lib/SKILL.md +586 -0
- data/.github/skills/facade-implementation/REFERENCE.md +840 -0
- data/.github/skills/facade-implementation/SKILL.md +260 -0
- data/.github/skills/facade-test-conventions/SKILL.md +380 -0
- data/.github/skills/facade-yard-documentation/SKILL.md +429 -0
- data/.github/skills/make-skill-template/SKILL.md +176 -0
- data/.github/skills/pr-readiness-review/SKILL.md +185 -0
- data/.github/skills/project-context/SKILL.md +313 -0
- data/.github/skills/pull-request-review/SKILL.md +168 -0
- data/.github/skills/refactor-command-to-commandlineresult/SKILL.md +131 -0
- data/.github/skills/release-management/SKILL.md +125 -0
- data/.github/skills/review-arguments-dsl/CHECKLIST.md +788 -0
- data/.github/skills/review-arguments-dsl/SKILL.md +214 -0
- data/.github/skills/review-backward-compatibility/SKILL.md +275 -0
- data/.github/skills/review-cross-command-consistency/SKILL.md +139 -0
- data/.github/skills/reviewing-skills/SKILL.md +189 -0
- data/.github/skills/rspec-unit-testing-standards/SKILL.md +639 -0
- data/.github/skills/tdd-refactor-step/SKILL.md +236 -0
- data/.github/skills/test-debugging/SKILL.md +160 -0
- data/.github/skills/yard-documentation/SKILL.md +793 -0
- data/.github/workflows/continuous_integration.yml +3 -2
- data/.github/workflows/enforce_conventional_commits.yml +1 -1
- data/.github/workflows/experimental_continuous_integration.yml +2 -2
- data/.github/workflows/release.yml +3 -4
- data/.gitignore +8 -0
- data/.husky/pre-commit +13 -0
- data/.release-please-manifest.json +1 -1
- data/.rspec +3 -0
- data/.rubocop.yml +7 -3
- data/.rubocop_todo.yml +23 -5
- data/.yardopts +1 -0
- data/CHANGELOG.md +0 -40
- data/CONTRIBUTING.md +694 -53
- data/README.md +17 -5
- data/Rakefile +61 -9
- data/commitlint.test +4 -0
- data/git.gemspec +14 -8
- data/lib/git/args_builder.rb +0 -8
- data/lib/git/base.rb +486 -410
- data/lib/git/branch.rb +380 -43
- data/lib/git/branch_delete_failure.rb +31 -0
- data/lib/git/branch_delete_result.rb +63 -0
- data/lib/git/branch_info.rb +178 -0
- data/lib/git/branches.rb +130 -24
- data/lib/git/command_line/base.rb +245 -0
- data/lib/git/command_line/capturing.rb +249 -0
- data/lib/git/command_line/result.rb +96 -0
- data/lib/git/command_line/streaming.rb +194 -0
- data/lib/git/command_line.rb +43 -322
- data/lib/git/command_line_result.rb +4 -88
- data/lib/git/commands/add.rb +131 -0
- data/lib/git/commands/am/abort.rb +43 -0
- data/lib/git/commands/am/apply.rb +252 -0
- data/lib/git/commands/am/continue.rb +43 -0
- data/lib/git/commands/am/quit.rb +43 -0
- data/lib/git/commands/am/retry.rb +47 -0
- data/lib/git/commands/am/show_current_patch.rb +64 -0
- data/lib/git/commands/am/skip.rb +42 -0
- data/lib/git/commands/am.rb +33 -0
- data/lib/git/commands/apply.rb +237 -0
- data/lib/git/commands/archive/list_formats.rb +46 -0
- data/lib/git/commands/archive.rb +140 -0
- data/lib/git/commands/arguments.rb +3510 -0
- data/lib/git/commands/base.rb +403 -0
- data/lib/git/commands/branch/copy.rb +94 -0
- data/lib/git/commands/branch/create.rb +173 -0
- data/lib/git/commands/branch/delete.rb +80 -0
- data/lib/git/commands/branch/list.rb +162 -0
- data/lib/git/commands/branch/move.rb +94 -0
- data/lib/git/commands/branch/set_upstream.rb +86 -0
- data/lib/git/commands/branch/show_current.rb +49 -0
- data/lib/git/commands/branch/unset_upstream.rb +57 -0
- data/lib/git/commands/branch.rb +34 -0
- data/lib/git/commands/cat_file/batch.rb +364 -0
- data/lib/git/commands/cat_file/filtered.rb +105 -0
- data/lib/git/commands/cat_file/raw.rb +210 -0
- data/lib/git/commands/cat_file.rb +49 -0
- data/lib/git/commands/checkout/branch.rb +151 -0
- data/lib/git/commands/checkout/files.rb +115 -0
- data/lib/git/commands/checkout.rb +38 -0
- data/lib/git/commands/checkout_index.rb +105 -0
- data/lib/git/commands/clean.rb +100 -0
- data/lib/git/commands/clone.rb +240 -0
- data/lib/git/commands/commit.rb +272 -0
- data/lib/git/commands/commit_tree.rb +100 -0
- data/lib/git/commands/config_option_syntax/add.rb +83 -0
- data/lib/git/commands/config_option_syntax/get.rb +117 -0
- data/lib/git/commands/config_option_syntax/get_all.rb +115 -0
- data/lib/git/commands/config_option_syntax/get_color.rb +91 -0
- data/lib/git/commands/config_option_syntax/get_color_bool.rb +93 -0
- data/lib/git/commands/config_option_syntax/get_regexp.rb +115 -0
- data/lib/git/commands/config_option_syntax/get_urlmatch.rb +102 -0
- data/lib/git/commands/config_option_syntax/list.rb +107 -0
- data/lib/git/commands/config_option_syntax/remove_section.rb +74 -0
- data/lib/git/commands/config_option_syntax/rename_section.rb +78 -0
- data/lib/git/commands/config_option_syntax/replace_all.rb +104 -0
- data/lib/git/commands/config_option_syntax/set.rb +114 -0
- data/lib/git/commands/config_option_syntax/unset.rb +89 -0
- data/lib/git/commands/config_option_syntax/unset_all.rb +89 -0
- data/lib/git/commands/config_option_syntax.rb +56 -0
- data/lib/git/commands/describe.rb +155 -0
- data/lib/git/commands/diff.rb +656 -0
- data/lib/git/commands/diff_files.rb +518 -0
- data/lib/git/commands/diff_index.rb +496 -0
- data/lib/git/commands/fetch.rb +352 -0
- data/lib/git/commands/fsck.rb +136 -0
- data/lib/git/commands/gc.rb +132 -0
- data/lib/git/commands/grep.rb +338 -0
- data/lib/git/commands/init.rb +99 -0
- data/lib/git/commands/log.rb +632 -0
- data/lib/git/commands/ls_files.rb +191 -0
- data/lib/git/commands/ls_remote.rb +155 -0
- data/lib/git/commands/ls_tree.rb +131 -0
- data/lib/git/commands/maintenance/register.rb +75 -0
- data/lib/git/commands/maintenance/run.rb +104 -0
- data/lib/git/commands/maintenance/start.rb +66 -0
- data/lib/git/commands/maintenance/stop.rb +55 -0
- data/lib/git/commands/maintenance/unregister.rb +79 -0
- data/lib/git/commands/maintenance.rb +31 -0
- data/lib/git/commands/merge/abort.rb +44 -0
- data/lib/git/commands/merge/continue.rb +44 -0
- data/lib/git/commands/merge/quit.rb +46 -0
- data/lib/git/commands/merge/start.rb +245 -0
- data/lib/git/commands/merge.rb +28 -0
- data/lib/git/commands/merge_base.rb +86 -0
- data/lib/git/commands/mv.rb +77 -0
- data/lib/git/commands/name_rev.rb +114 -0
- data/lib/git/commands/pull.rb +377 -0
- data/lib/git/commands/push.rb +246 -0
- data/lib/git/commands/read_tree.rb +149 -0
- data/lib/git/commands/remote/add.rb +91 -0
- data/lib/git/commands/remote/get_url.rb +66 -0
- data/lib/git/commands/remote/list.rb +54 -0
- data/lib/git/commands/remote/prune.rb +61 -0
- data/lib/git/commands/remote/remove.rb +52 -0
- data/lib/git/commands/remote/rename.rb +69 -0
- data/lib/git/commands/remote/set_branches.rb +63 -0
- data/lib/git/commands/remote/set_head.rb +82 -0
- data/lib/git/commands/remote/set_url.rb +71 -0
- data/lib/git/commands/remote/set_url_add.rb +61 -0
- data/lib/git/commands/remote/set_url_delete.rb +64 -0
- data/lib/git/commands/remote/show.rb +71 -0
- data/lib/git/commands/remote/update.rb +72 -0
- data/lib/git/commands/remote.rb +42 -0
- data/lib/git/commands/repack.rb +277 -0
- data/lib/git/commands/reset.rb +147 -0
- data/lib/git/commands/rev_parse.rb +297 -0
- data/lib/git/commands/revert/abort.rb +45 -0
- data/lib/git/commands/revert/continue.rb +57 -0
- data/lib/git/commands/revert/quit.rb +47 -0
- data/lib/git/commands/revert/skip.rb +44 -0
- data/lib/git/commands/revert/start.rb +153 -0
- data/lib/git/commands/revert.rb +29 -0
- data/lib/git/commands/rm.rb +114 -0
- data/lib/git/commands/show.rb +632 -0
- data/lib/git/commands/show_ref/exclude_existing.rb +120 -0
- data/lib/git/commands/show_ref/exists.rb +78 -0
- data/lib/git/commands/show_ref/list.rb +145 -0
- data/lib/git/commands/show_ref/verify.rb +120 -0
- data/lib/git/commands/show_ref.rb +42 -0
- data/lib/git/commands/stash/apply.rb +75 -0
- data/lib/git/commands/stash/branch.rb +65 -0
- data/lib/git/commands/stash/clear.rb +41 -0
- data/lib/git/commands/stash/create.rb +58 -0
- data/lib/git/commands/stash/drop.rb +67 -0
- data/lib/git/commands/stash/list.rb +39 -0
- data/lib/git/commands/stash/pop.rb +78 -0
- data/lib/git/commands/stash/push.rb +103 -0
- data/lib/git/commands/stash/show.rb +149 -0
- data/lib/git/commands/stash/store.rb +63 -0
- data/lib/git/commands/stash.rb +38 -0
- data/lib/git/commands/status.rb +169 -0
- data/lib/git/commands/symbolic_ref/delete.rb +68 -0
- data/lib/git/commands/symbolic_ref/read.rb +95 -0
- data/lib/git/commands/symbolic_ref/update.rb +76 -0
- data/lib/git/commands/symbolic_ref.rb +38 -0
- data/lib/git/commands/tag/create.rb +139 -0
- data/lib/git/commands/tag/delete.rb +55 -0
- data/lib/git/commands/tag/list.rb +143 -0
- data/lib/git/commands/tag/verify.rb +71 -0
- data/lib/git/commands/tag.rb +26 -0
- data/lib/git/commands/update_ref/batch.rb +140 -0
- data/lib/git/commands/update_ref/delete.rb +92 -0
- data/lib/git/commands/update_ref/update.rb +106 -0
- data/lib/git/commands/update_ref.rb +42 -0
- data/lib/git/commands/version.rb +52 -0
- data/lib/git/commands/worktree/add.rb +140 -0
- data/lib/git/commands/worktree/list.rb +64 -0
- data/lib/git/commands/worktree/lock.rb +58 -0
- data/lib/git/commands/worktree/management_base.rb +51 -0
- data/lib/git/commands/worktree/move.rb +66 -0
- data/lib/git/commands/worktree/prune.rb +67 -0
- data/lib/git/commands/worktree/remove.rb +63 -0
- data/lib/git/commands/worktree/repair.rb +76 -0
- data/lib/git/commands/worktree/unlock.rb +47 -0
- data/lib/git/commands/worktree.rb +43 -0
- data/lib/git/commands/write_tree.rb +68 -0
- data/lib/git/commands.rb +89 -0
- data/lib/git/detached_head_info.rb +54 -0
- data/lib/git/diff.rb +297 -7
- data/lib/git/diff_file_numstat_info.rb +29 -0
- data/lib/git/diff_file_patch_info.rb +134 -0
- data/lib/git/diff_file_raw_info.rb +127 -0
- data/lib/git/diff_info.rb +169 -0
- data/lib/git/diff_path_status.rb +78 -19
- data/lib/git/diff_result.rb +32 -0
- data/lib/git/diff_stats.rb +59 -14
- data/lib/git/dirstat_info.rb +86 -0
- data/lib/git/errors.rb +65 -2
- data/lib/git/execution_context/global.rb +56 -0
- data/lib/git/execution_context/repository.rb +147 -0
- data/lib/git/execution_context.rb +482 -0
- data/lib/git/file_ref.rb +74 -0
- data/lib/git/fsck_object.rb +9 -9
- data/lib/git/fsck_result.rb +1 -1
- data/lib/git/lib.rb +1606 -1028
- data/lib/git/log.rb +15 -2
- data/lib/git/object.rb +92 -22
- data/lib/git/parsers/branch.rb +224 -0
- data/lib/git/parsers/cat_file.rb +111 -0
- data/lib/git/parsers/diff.rb +585 -0
- data/lib/git/parsers/fsck.rb +133 -0
- data/lib/git/parsers/grep.rb +42 -0
- data/lib/git/parsers/ls_tree.rb +58 -0
- data/lib/git/parsers/stash.rb +208 -0
- data/lib/git/parsers/tag.rb +257 -0
- data/lib/git/remote.rb +133 -9
- data/lib/git/repository/branching.rb +572 -0
- data/lib/git/repository/committing.rb +191 -0
- data/lib/git/repository/configuring.rb +156 -0
- data/lib/git/repository/diffing.rb +775 -0
- data/lib/git/repository/inspecting.rb +153 -0
- data/lib/git/repository/logging.rb +247 -0
- data/lib/git/repository/merging.rb +295 -0
- data/lib/git/repository/object_operations.rb +1101 -0
- data/lib/git/repository/path_resolver.rb +207 -0
- data/lib/git/repository/remote_operations.rb +753 -0
- data/lib/git/repository/shared_private.rb +51 -0
- data/lib/git/repository/staging.rb +390 -0
- data/lib/git/repository/stashing.rb +107 -0
- data/lib/git/repository/status_operations.rb +180 -0
- data/lib/git/repository/worktree_operations.rb +159 -0
- data/lib/git/repository.rb +264 -1
- data/lib/git/stash.rb +85 -4
- data/lib/git/stash_info.rb +104 -0
- data/lib/git/stashes.rb +130 -13
- data/lib/git/status.rb +224 -18
- data/lib/git/tag_delete_failure.rb +31 -0
- data/lib/git/tag_delete_result.rb +63 -0
- data/lib/git/tag_info.rb +105 -0
- data/lib/git/version.rb +109 -2
- data/lib/git/version_constraint.rb +81 -0
- data/lib/git/worktree.rb +120 -5
- data/lib/git/worktrees.rb +107 -7
- data/lib/git.rb +114 -18
- data/redesign/1_architecture_existing.md +54 -18
- data/redesign/2_architecture_redesign.md +365 -46
- data/redesign/3_architecture_implementation.md +1451 -54
- data/tasks/gem_tasks.rake +4 -0
- data/tasks/npm_tasks.rake +7 -0
- data/tasks/rspec.rake +48 -0
- data/tasks/test.rake +13 -1
- data/tasks/yard.rake +34 -7
- metadata +349 -20
- data/lib/git/index.rb +0 -6
- data/lib/git/path.rb +0 -38
- data/lib/git/working_directory.rb +0 -6
- /data/{release-please-config.json → .release-please-config.json} +0 -0
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Implements the `git diff-index` command
|
|
8
|
+
#
|
|
9
|
+
# Compares a tree object to either the index or the working tree.
|
|
10
|
+
#
|
|
11
|
+
# When `--cached` is given (`cached: true`) it compares the tree to the index
|
|
12
|
+
# (staged changes). Without `--cached` it compares the tree to the working tree,
|
|
13
|
+
# treating any file that differs from the index as changed even if the on-disk
|
|
14
|
+
# content is identical to the tree.
|
|
15
|
+
#
|
|
16
|
+
# @example Compare HEAD tree to the working tree (raw output)
|
|
17
|
+
# # git diff-index HEAD
|
|
18
|
+
# Git::Commands::DiffIndex.new(ctx).call('HEAD')
|
|
19
|
+
#
|
|
20
|
+
# @example Compare HEAD tree to the index (staged changes, raw output)
|
|
21
|
+
# # git diff-index --cached HEAD
|
|
22
|
+
# Git::Commands::DiffIndex.new(ctx).call('HEAD', cached: true)
|
|
23
|
+
#
|
|
24
|
+
# @example Compare HEAD tree to the index, showing a patch
|
|
25
|
+
# # git diff-index --cached --patch HEAD
|
|
26
|
+
# Git::Commands::DiffIndex.new(ctx).call('HEAD', cached: true, patch: true)
|
|
27
|
+
#
|
|
28
|
+
# @example Limit comparison to a specific path
|
|
29
|
+
# # git diff-index --cached HEAD -- lib/
|
|
30
|
+
# Git::Commands::DiffIndex.new(ctx).call('HEAD', 'lib/', cached: true)
|
|
31
|
+
#
|
|
32
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-diff-index/2.53.0
|
|
33
|
+
#
|
|
34
|
+
# @see https://git-scm.com/docs/git-diff-index git-diff-index documentation
|
|
35
|
+
#
|
|
36
|
+
# @see Git::Commands
|
|
37
|
+
#
|
|
38
|
+
# @api private
|
|
39
|
+
#
|
|
40
|
+
class DiffIndex < Git::Commands::Base
|
|
41
|
+
arguments do
|
|
42
|
+
literal 'diff-index'
|
|
43
|
+
|
|
44
|
+
# diff-index-specific options
|
|
45
|
+
flag_option :m
|
|
46
|
+
flag_option :cached
|
|
47
|
+
flag_option :merge_base
|
|
48
|
+
|
|
49
|
+
# Output format selection
|
|
50
|
+
flag_option %i[patch p u]
|
|
51
|
+
flag_option %i[no_patch s]
|
|
52
|
+
flag_option :raw
|
|
53
|
+
flag_option :patch_with_raw
|
|
54
|
+
value_option %i[unified U], inline: true
|
|
55
|
+
value_option :output, inline: true
|
|
56
|
+
value_option :output_indicator_new, inline: true
|
|
57
|
+
value_option :output_indicator_old, inline: true
|
|
58
|
+
value_option :output_indicator_context, inline: true
|
|
59
|
+
|
|
60
|
+
# Diff algorithm
|
|
61
|
+
flag_option :indent_heuristic, negatable: true
|
|
62
|
+
flag_option :minimal
|
|
63
|
+
flag_option :patience
|
|
64
|
+
flag_option :histogram
|
|
65
|
+
value_option :anchored, inline: true, repeatable: true
|
|
66
|
+
value_option :diff_algorithm, inline: true
|
|
67
|
+
|
|
68
|
+
# Statistics output formats
|
|
69
|
+
flag_or_value_option :stat, inline: true
|
|
70
|
+
value_option :stat_width, inline: true
|
|
71
|
+
value_option :stat_name_width, inline: true
|
|
72
|
+
value_option :stat_graph_width, inline: true
|
|
73
|
+
value_option :stat_count, inline: true
|
|
74
|
+
flag_option :compact_summary
|
|
75
|
+
flag_option :numstat
|
|
76
|
+
flag_option :shortstat
|
|
77
|
+
flag_or_value_option %i[dirstat X], inline: true
|
|
78
|
+
flag_option :cumulative
|
|
79
|
+
flag_or_value_option :dirstat_by_file, inline: true
|
|
80
|
+
flag_option :summary
|
|
81
|
+
flag_option :patch_with_stat
|
|
82
|
+
|
|
83
|
+
# Name and path display
|
|
84
|
+
flag_option :z
|
|
85
|
+
flag_option :name_only
|
|
86
|
+
flag_option :name_status
|
|
87
|
+
flag_or_value_option :submodule, inline: true
|
|
88
|
+
|
|
89
|
+
# Color output
|
|
90
|
+
flag_or_value_option :color, inline: true, negatable: true
|
|
91
|
+
flag_or_value_option :color_moved, inline: true, negatable: true
|
|
92
|
+
value_option :color_moved_ws, inline: true
|
|
93
|
+
flag_option :no_color_moved_ws
|
|
94
|
+
|
|
95
|
+
# Word diff
|
|
96
|
+
flag_or_value_option :word_diff, inline: true
|
|
97
|
+
value_option :word_diff_regex, inline: true
|
|
98
|
+
flag_or_value_option :color_words, inline: true
|
|
99
|
+
|
|
100
|
+
# Whitespace handling
|
|
101
|
+
flag_option :ignore_cr_at_eol
|
|
102
|
+
flag_option :ignore_space_at_eol
|
|
103
|
+
flag_option %i[ignore_space_change b]
|
|
104
|
+
flag_option %i[ignore_all_space w]
|
|
105
|
+
flag_option :ignore_blank_lines
|
|
106
|
+
value_option %i[ignore_matching_lines I], inline: true, repeatable: true
|
|
107
|
+
flag_option :check
|
|
108
|
+
value_option :ws_error_highlight, inline: true
|
|
109
|
+
|
|
110
|
+
# Rename/copy detection
|
|
111
|
+
flag_option :no_renames
|
|
112
|
+
flag_option :rename_empty, negatable: true
|
|
113
|
+
flag_option :full_index
|
|
114
|
+
flag_option :binary
|
|
115
|
+
flag_or_value_option :abbrev, inline: true
|
|
116
|
+
flag_or_value_option %i[break_rewrites B], inline: true
|
|
117
|
+
flag_or_value_option %i[find_renames M], inline: true
|
|
118
|
+
flag_or_value_option %i[find_copies C], inline: true
|
|
119
|
+
flag_option :find_copies_harder
|
|
120
|
+
flag_option %i[irreversible_delete D]
|
|
121
|
+
|
|
122
|
+
# Pickaxe / filtering
|
|
123
|
+
value_option :l, inline: true
|
|
124
|
+
value_option :diff_filter, inline: true
|
|
125
|
+
value_option :S, inline: true
|
|
126
|
+
value_option :G, inline: true
|
|
127
|
+
value_option :find_object, inline: true
|
|
128
|
+
flag_option :pickaxe_all
|
|
129
|
+
flag_option :pickaxe_regex
|
|
130
|
+
value_option :O, inline: true
|
|
131
|
+
value_option :skip_to, inline: true
|
|
132
|
+
value_option :rotate_to, inline: true
|
|
133
|
+
|
|
134
|
+
# Miscellaneous diff options
|
|
135
|
+
flag_option :R
|
|
136
|
+
flag_or_value_option :relative, inline: true, negatable: true
|
|
137
|
+
flag_option %i[text a]
|
|
138
|
+
value_option :inter_hunk_context, inline: true
|
|
139
|
+
flag_option %i[function_context W]
|
|
140
|
+
flag_option :exit_code
|
|
141
|
+
flag_option :quiet
|
|
142
|
+
flag_option :ext_diff, negatable: true
|
|
143
|
+
flag_option :textconv, negatable: true
|
|
144
|
+
flag_or_value_option :ignore_submodules, inline: true
|
|
145
|
+
value_option :src_prefix, inline: true
|
|
146
|
+
value_option :dst_prefix, inline: true
|
|
147
|
+
flag_option :no_prefix
|
|
148
|
+
flag_option :default_prefix
|
|
149
|
+
value_option :line_prefix, inline: true
|
|
150
|
+
flag_option :ita_invisible_in_index
|
|
151
|
+
value_option :max_depth, inline: true
|
|
152
|
+
|
|
153
|
+
# Operands: git diff-index does not accept -- before <tree-ish>.
|
|
154
|
+
# end_of_options is placed between tree_ish and path so that -- is emitted
|
|
155
|
+
# only when path arguments are present, disambiguating paths from revisions.
|
|
156
|
+
operand :tree_ish, required: true
|
|
157
|
+
end_of_options
|
|
158
|
+
operand :path, repeatable: true
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# git diff-index exits 1 when differences are found (e.g. with --exit-code)
|
|
162
|
+
allow_exit_status 0..1
|
|
163
|
+
|
|
164
|
+
# @!method call(*, **)
|
|
165
|
+
#
|
|
166
|
+
# @overload call(tree_ish, **options)
|
|
167
|
+
# Compare a tree to the index or working tree
|
|
168
|
+
#
|
|
169
|
+
# @example Compare HEAD to the working tree
|
|
170
|
+
# # git diff-index HEAD
|
|
171
|
+
# DiffIndex.new(ctx).call('HEAD')
|
|
172
|
+
#
|
|
173
|
+
# @example Compare HEAD to the index (staged changes only)
|
|
174
|
+
# # git diff-index --cached HEAD
|
|
175
|
+
# DiffIndex.new(ctx).call('HEAD', cached: true)
|
|
176
|
+
#
|
|
177
|
+
# @param tree_ish [String] the tree object to compare
|
|
178
|
+
# against (e.g., `'HEAD'`, a commit SHA, or a tag
|
|
179
|
+
# name)
|
|
180
|
+
#
|
|
181
|
+
# @param options [Hash] command options
|
|
182
|
+
#
|
|
183
|
+
# @option options [Boolean, nil] :m (nil) treat non-checked-out files as up to date
|
|
184
|
+
#
|
|
185
|
+
# By default, files recorded in the index but not checked out are reported as
|
|
186
|
+
# deleted. This flag makes `git diff-index` report all such files as up to date.
|
|
187
|
+
#
|
|
188
|
+
# @option options [Boolean, nil] :cached (nil) compare the tree to the index only (staged
|
|
189
|
+
# changes), without considering the working tree
|
|
190
|
+
#
|
|
191
|
+
# @option options [Boolean, nil] :merge_base (nil) use the merge base between the tree-ish
|
|
192
|
+
# and `HEAD` rather than the tree-ish directly
|
|
193
|
+
#
|
|
194
|
+
# `tree_ish` must be a commit when this option is used.
|
|
195
|
+
#
|
|
196
|
+
# @option options [Boolean, nil] :patch (nil) generate unified diff patch output
|
|
197
|
+
#
|
|
198
|
+
# Alias: :p, :u
|
|
199
|
+
#
|
|
200
|
+
# @option options [Boolean, nil] :no_patch (nil) suppress all diff output
|
|
201
|
+
#
|
|
202
|
+
# Alias: :s
|
|
203
|
+
#
|
|
204
|
+
# @option options [Boolean, nil] :raw (nil) generate diff in raw format (default output)
|
|
205
|
+
#
|
|
206
|
+
# @option options [Boolean, nil] :patch_with_raw (nil) synonym for `patch: true, raw: true`
|
|
207
|
+
#
|
|
208
|
+
# @option options [Integer, String] :unified (nil) number of context lines around diff
|
|
209
|
+
# hunks (e.g., `3`)
|
|
210
|
+
#
|
|
211
|
+
# Alias: :U
|
|
212
|
+
#
|
|
213
|
+
# @option options [String] :output (nil) write diff output to a file instead of stdout
|
|
214
|
+
#
|
|
215
|
+
# @option options [String] :output_indicator_new (nil) character for new lines in patch output
|
|
216
|
+
#
|
|
217
|
+
# @option options [String] :output_indicator_old (nil) character for old lines in patch output
|
|
218
|
+
#
|
|
219
|
+
# @option options [String] :output_indicator_context (nil) character for context lines in patch output
|
|
220
|
+
#
|
|
221
|
+
# @option options [Boolean, nil] :indent_heuristic (nil) shift hunk boundaries for readability
|
|
222
|
+
# (`--indent-heuristic`)
|
|
223
|
+
#
|
|
224
|
+
# @option options [Boolean, nil] :no_indent_heuristic (nil) do not shift hunk boundaries
|
|
225
|
+
# for readability (`--no-indent-heuristic`)
|
|
226
|
+
#
|
|
227
|
+
# @option options [Boolean, nil] :minimal (nil) spend extra time to minimize diff size
|
|
228
|
+
#
|
|
229
|
+
# @option options [Boolean, nil] :patience (nil) use patience diff algorithm
|
|
230
|
+
#
|
|
231
|
+
# @option options [Boolean, nil] :histogram (nil) use histogram diff algorithm
|
|
232
|
+
#
|
|
233
|
+
# @option options [String, Array<String>] :anchored (nil) anchor lines matching the given
|
|
234
|
+
# text to prevent them from appearing as additions or deletions (repeatable)
|
|
235
|
+
#
|
|
236
|
+
# @option options [String] :diff_algorithm (nil) diff algorithm to use
|
|
237
|
+
#
|
|
238
|
+
# Accepted values: `'default'`, `'myers'`, `'minimal'`, `'patience'`, `'histogram'`.
|
|
239
|
+
#
|
|
240
|
+
# @option options [Boolean, String, nil] :stat (nil) show a diffstat
|
|
241
|
+
#
|
|
242
|
+
# Pass `true` for the default format, or a string like `'80,40,5'` for custom
|
|
243
|
+
# `width,name-width,count` limits.
|
|
244
|
+
#
|
|
245
|
+
# @option options [Integer, String] :stat_width (nil) override diffstat total width
|
|
246
|
+
#
|
|
247
|
+
# @option options [Integer, String] :stat_name_width (nil) override diffstat filename column width
|
|
248
|
+
#
|
|
249
|
+
# @option options [Integer, String] :stat_graph_width (nil) override diffstat graph column width
|
|
250
|
+
#
|
|
251
|
+
# @option options [Integer, String] :stat_count (nil) limit diffstat to this many lines
|
|
252
|
+
#
|
|
253
|
+
# @option options [Boolean, nil] :compact_summary (nil) include creation/deletion mode changes in stat
|
|
254
|
+
#
|
|
255
|
+
# @option options [Boolean, nil] :numstat (nil) show per-file insertion/deletion counts (machine-friendly)
|
|
256
|
+
#
|
|
257
|
+
# @option options [Boolean, nil] :shortstat (nil) show aggregate totals line only
|
|
258
|
+
#
|
|
259
|
+
# @option options [Boolean, String, nil] :dirstat (nil) show distribution of changes per directory
|
|
260
|
+
#
|
|
261
|
+
# Pass `true` for the default, or a string like `'lines,cumulative,10'` to pass params.
|
|
262
|
+
#
|
|
263
|
+
# Alias: :X
|
|
264
|
+
#
|
|
265
|
+
# @option options [Boolean, nil] :cumulative (nil) synonym for `dirstat: 'cumulative'`
|
|
266
|
+
#
|
|
267
|
+
# @option options [Boolean, String, nil] :dirstat_by_file (nil) synonym for `dirstat: 'files,...'`
|
|
268
|
+
#
|
|
269
|
+
# @option options [Boolean, nil] :summary (nil) show condensed extended header information
|
|
270
|
+
#
|
|
271
|
+
# @option options [Boolean, nil] :patch_with_stat (nil) synonym for `patch: true, stat: true`
|
|
272
|
+
#
|
|
273
|
+
# @option options [Boolean, nil] :z (nil) use NUL as output field terminator instead of newline
|
|
274
|
+
#
|
|
275
|
+
# @option options [Boolean, nil] :name_only (nil) show only changed file names
|
|
276
|
+
#
|
|
277
|
+
# @option options [Boolean, nil] :name_status (nil) show changed file names with status letters
|
|
278
|
+
#
|
|
279
|
+
# @option options [Boolean, String, nil] :submodule (nil) how to show submodule differences
|
|
280
|
+
#
|
|
281
|
+
# Pass `true` for the default, or a string like `'log'` or `'diff'` for a format name.
|
|
282
|
+
#
|
|
283
|
+
# @option options [Boolean, String, nil] :color (nil) control diff colorization (`--color`)
|
|
284
|
+
#
|
|
285
|
+
# Pass `true` for `--color` or a string like `'always'` or `'auto'` for a specific mode.
|
|
286
|
+
#
|
|
287
|
+
# @option options [Boolean, nil] :no_color (nil) suppress colorized output (`--no-color`)
|
|
288
|
+
#
|
|
289
|
+
# @option options [Boolean, String, nil] :color_moved (nil) color moved lines differently (`--color-moved`)
|
|
290
|
+
#
|
|
291
|
+
# Pass `true` for the default, or a mode string such as `'zebra'` or `'dimmed-zebra'`.
|
|
292
|
+
#
|
|
293
|
+
# @option options [Boolean, nil] :no_color_moved (nil) disable moved-line coloring (`--no-color-moved`)
|
|
294
|
+
#
|
|
295
|
+
# @option options [String] :color_moved_ws (nil) whitespace handling for moved-line color detection
|
|
296
|
+
#
|
|
297
|
+
# Comma-separated list of modes, e.g. `'ignore-space-at-eol,ignore-space-change'`.
|
|
298
|
+
#
|
|
299
|
+
# @option options [Boolean, nil] :no_color_moved_ws (nil) synonym for `color_moved_ws: 'no'`
|
|
300
|
+
#
|
|
301
|
+
# @option options [Boolean, String, nil] :word_diff (nil) show a word-level diff
|
|
302
|
+
#
|
|
303
|
+
# Pass `true` for the default `plain` mode, or a string like `'color'`, `'porcelain'`,
|
|
304
|
+
# or `'none'` for a specific mode.
|
|
305
|
+
#
|
|
306
|
+
# @option options [String] :word_diff_regex (nil) regular expression defining word boundaries for word diff
|
|
307
|
+
#
|
|
308
|
+
# @option options [Boolean, String, nil] :color_words (nil) equivalent to `word_diff: 'color'`
|
|
309
|
+
# plus an optional word regex
|
|
310
|
+
#
|
|
311
|
+
# @option options [Boolean, nil] :ignore_cr_at_eol (nil) ignore carriage-return at end of line
|
|
312
|
+
#
|
|
313
|
+
# @option options [Boolean, nil] :ignore_space_at_eol (nil) ignore whitespace changes at end of line
|
|
314
|
+
#
|
|
315
|
+
# @option options [Boolean, nil] :ignore_space_change (nil) ignore changes in amount of whitespace
|
|
316
|
+
#
|
|
317
|
+
# Alias: :b
|
|
318
|
+
#
|
|
319
|
+
# @option options [Boolean, nil] :ignore_all_space (nil) ignore all whitespace when comparing lines
|
|
320
|
+
#
|
|
321
|
+
# Alias: :w
|
|
322
|
+
#
|
|
323
|
+
# @option options [Boolean, nil] :ignore_blank_lines (nil) ignore changes whose lines are all blank
|
|
324
|
+
#
|
|
325
|
+
# @option options [String, Array<String>] :ignore_matching_lines (nil) ignore changes whose lines all match
|
|
326
|
+
# the given regex (repeatable)
|
|
327
|
+
#
|
|
328
|
+
# Alias: :I
|
|
329
|
+
#
|
|
330
|
+
# @option options [Boolean, nil] :check (nil) warn if changes introduce whitespace errors or
|
|
331
|
+
# conflict markers
|
|
332
|
+
#
|
|
333
|
+
# @option options [String] :ws_error_highlight (nil) highlight whitespace errors in the
|
|
334
|
+
# given diff line types (e.g. `'new'`, `'old,new'`, `'all'`)
|
|
335
|
+
#
|
|
336
|
+
# @option options [Boolean, nil] :no_renames (nil) disable rename detection
|
|
337
|
+
#
|
|
338
|
+
# @option options [Boolean, nil] :rename_empty (nil) use empty blobs as rename sources (`--rename-empty`)
|
|
339
|
+
#
|
|
340
|
+
# @option options [Boolean, nil] :no_rename_empty (nil) disallow empty blobs as rename
|
|
341
|
+
# sources (`--no-rename-empty`)
|
|
342
|
+
#
|
|
343
|
+
# @option options [Boolean, nil] :full_index (nil) show full blob SHA in index line
|
|
344
|
+
#
|
|
345
|
+
# @option options [Boolean, nil] :binary (nil) output binary diff suitable for `git apply`
|
|
346
|
+
#
|
|
347
|
+
# @option options [Boolean, String, nil] :abbrev (nil) abbreviate blob names in raw output
|
|
348
|
+
#
|
|
349
|
+
# Pass `true` for the default, or an integer string like `'10'` for a specific length.
|
|
350
|
+
#
|
|
351
|
+
# @option options [Boolean, String, nil] :break_rewrites (nil) break total rewrites into
|
|
352
|
+
# delete-and-create pairs
|
|
353
|
+
#
|
|
354
|
+
# Pass `true` for defaults, or a threshold string like `'80%'` or `'50%/70%'` for custom
|
|
355
|
+
# break and rename thresholds.
|
|
356
|
+
#
|
|
357
|
+
# Alias: :B
|
|
358
|
+
#
|
|
359
|
+
# @option options [Boolean, String, nil] :find_renames (nil) detect renames
|
|
360
|
+
#
|
|
361
|
+
# Pass `true` for the default threshold, or a string like `'90%'` for a custom
|
|
362
|
+
# similarity threshold.
|
|
363
|
+
#
|
|
364
|
+
# Alias: :M
|
|
365
|
+
#
|
|
366
|
+
# @option options [Boolean, String, nil] :find_copies (nil) detect copies as well as renames
|
|
367
|
+
#
|
|
368
|
+
# Pass `true` for the default threshold, or a string like `'75%'` for a custom
|
|
369
|
+
# similarity threshold.
|
|
370
|
+
#
|
|
371
|
+
# Alias: :C
|
|
372
|
+
#
|
|
373
|
+
# @option options [Boolean, nil] :find_copies_harder (nil) inspect all unmodified files as copy
|
|
374
|
+
# sources (very expensive for large repos)
|
|
375
|
+
#
|
|
376
|
+
# @option options [Boolean, nil] :irreversible_delete (nil) omit preimage for deleted files
|
|
377
|
+
#
|
|
378
|
+
# Alias: :D
|
|
379
|
+
#
|
|
380
|
+
# @option options [Integer, String] :l (nil) limit the number of rename/copy candidates
|
|
381
|
+
# considered during exhaustive detection
|
|
382
|
+
#
|
|
383
|
+
# @option options [String] :diff_filter (nil) select only certain kinds of changed files
|
|
384
|
+
#
|
|
385
|
+
# A string of status letters such as `'A'`, `'M'`, `'D'`, `'ACDM'`, or lowercase
|
|
386
|
+
# forms to exclude (e.g. `'ad'` excludes added and deleted).
|
|
387
|
+
#
|
|
388
|
+
# @option options [String] :S (nil) find changes that alter the occurrence count of the
|
|
389
|
+
# given string (pickaxe)
|
|
390
|
+
#
|
|
391
|
+
# @option options [String] :G (nil) find changes whose patch text contains lines matching
|
|
392
|
+
# the given regex (pickaxe)
|
|
393
|
+
#
|
|
394
|
+
# @option options [String] :find_object (nil) find changes involving the given object id
|
|
395
|
+
#
|
|
396
|
+
# @option options [Boolean, nil] :pickaxe_all (nil) show all changes in a changeset when using
|
|
397
|
+
# `-S` or `-G`
|
|
398
|
+
#
|
|
399
|
+
# @option options [Boolean, nil] :pickaxe_regex (nil) treat the `-S` string as an extended POSIX
|
|
400
|
+
# regular expression
|
|
401
|
+
#
|
|
402
|
+
# @option options [String] :O (nil) path to an orderfile controlling output file order
|
|
403
|
+
#
|
|
404
|
+
# @option options [String] :skip_to (nil) discard files before the named file in the output
|
|
405
|
+
#
|
|
406
|
+
# @option options [String] :rotate_to (nil) move files before the named file to end of output
|
|
407
|
+
#
|
|
408
|
+
# @option options [Boolean, nil] :R (nil) swap the two diff inputs
|
|
409
|
+
#
|
|
410
|
+
# @option options [Boolean, String, nil] :relative (nil) show paths relative to a directory (`--relative`)
|
|
411
|
+
#
|
|
412
|
+
# Pass `true` to use the current directory, or a path string to name the directory explicitly.
|
|
413
|
+
#
|
|
414
|
+
# @option options [Boolean, nil] :no_relative (nil) use absolute paths in output (`--no-relative`)
|
|
415
|
+
#
|
|
416
|
+
# @option options [Boolean, nil] :text (nil) treat all files as text
|
|
417
|
+
#
|
|
418
|
+
# Alias: :a
|
|
419
|
+
#
|
|
420
|
+
# @option options [Integer, String] :inter_hunk_context (nil) show context between diff hunks
|
|
421
|
+
# up to this many lines, fusing close hunks
|
|
422
|
+
#
|
|
423
|
+
# @option options [Boolean, nil] :function_context (nil) show whole function as context for each change
|
|
424
|
+
#
|
|
425
|
+
# Alias: :W
|
|
426
|
+
#
|
|
427
|
+
# @option options [Boolean, nil] :exit_code (nil) exit with status 1 if differences are found,
|
|
428
|
+
# 0 if none
|
|
429
|
+
#
|
|
430
|
+
# @option options [Boolean, nil] :quiet (nil) suppress all output
|
|
431
|
+
#
|
|
432
|
+
# Implies `--exit-code`.
|
|
433
|
+
#
|
|
434
|
+
# @option options [Boolean, nil] :ext_diff (nil) allow external diff helpers (`--ext-diff`)
|
|
435
|
+
#
|
|
436
|
+
# @option options [Boolean, nil] :no_ext_diff (nil) disallow external diff helpers (`--no-ext-diff`)
|
|
437
|
+
#
|
|
438
|
+
# @option options [Boolean, nil] :textconv (nil) allow external text-conversion filters (`--textconv`)
|
|
439
|
+
#
|
|
440
|
+
# @option options [Boolean, nil] :no_textconv (nil) disallow external text-conversion filters
|
|
441
|
+
# (`--no-textconv`)
|
|
442
|
+
#
|
|
443
|
+
# @option options [Boolean, String, nil] :ignore_submodules (nil) ignore submodule changes
|
|
444
|
+
#
|
|
445
|
+
# Pass `true` for `--ignore-submodules` (equivalent to `'all'`), or a string such as
|
|
446
|
+
# `'untracked'`, `'dirty'`, `'none'`, or `'all'`.
|
|
447
|
+
#
|
|
448
|
+
# @option options [String] :src_prefix (nil) source prefix for diff headers (e.g. `'a/'`)
|
|
449
|
+
#
|
|
450
|
+
# @option options [String] :dst_prefix (nil) destination prefix for diff headers (e.g. `'b/'`)
|
|
451
|
+
#
|
|
452
|
+
# @option options [Boolean, nil] :no_prefix (nil) omit source and destination prefixes
|
|
453
|
+
#
|
|
454
|
+
# @option options [Boolean, nil] :default_prefix (nil) use the default `a/` and `b/` prefixes
|
|
455
|
+
#
|
|
456
|
+
# @option options [String] :line_prefix (nil) prepend this prefix to every output line
|
|
457
|
+
#
|
|
458
|
+
# @option options [Boolean, nil] :ita_invisible_in_index (nil) make `git add -N` entries appear as
|
|
459
|
+
# new files in `git diff` and non-existent in `git diff --cached`
|
|
460
|
+
#
|
|
461
|
+
# @option options [Integer, String] :max_depth (nil) maximum directory depth to descend for
|
|
462
|
+
# each pathspec (tree-to-tree diffs only)
|
|
463
|
+
#
|
|
464
|
+
# @return [Git::CommandLineResult] the result of calling `git diff-index`
|
|
465
|
+
#
|
|
466
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
467
|
+
#
|
|
468
|
+
# @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
|
|
469
|
+
#
|
|
470
|
+
# @overload call(tree_ish, *paths, **options)
|
|
471
|
+
# Compare a tree to the index or working tree, limiting output to specific paths
|
|
472
|
+
#
|
|
473
|
+
# @example Compare HEAD to the index for a single directory
|
|
474
|
+
# # git diff-index --cached HEAD -- lib/
|
|
475
|
+
# DiffIndex.new(ctx).call('HEAD', 'lib/', cached: true)
|
|
476
|
+
#
|
|
477
|
+
# @example Compare HEAD to the working tree for multiple paths
|
|
478
|
+
# # git diff-index HEAD -- lib/ spec/
|
|
479
|
+
# DiffIndex.new(ctx).call('HEAD', 'lib/', 'spec/')
|
|
480
|
+
#
|
|
481
|
+
# @param tree_ish [String] the tree object to compare against
|
|
482
|
+
#
|
|
483
|
+
# @param paths [Array<String>] pathspecs limiting which files are compared
|
|
484
|
+
#
|
|
485
|
+
# @param options [Hash] command options (same as the single-argument overload)
|
|
486
|
+
#
|
|
487
|
+
# @return [Git::CommandLineResult] the result of calling `git diff-index`
|
|
488
|
+
#
|
|
489
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
490
|
+
#
|
|
491
|
+
# @raise [Git::FailedError] if git exits outside the allowed range (exit code > 1)
|
|
492
|
+
#
|
|
493
|
+
# @api public
|
|
494
|
+
end
|
|
495
|
+
end
|
|
496
|
+
end
|