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,277 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Wrapper for the `git repack` command
|
|
8
|
+
#
|
|
9
|
+
# Packs unpacked objects in a repository into pack files, and can reorganize
|
|
10
|
+
# existing packs into a single, more efficient pack. Running `git repack -a -d`
|
|
11
|
+
# is the most common usage: pack all objects and delete redundant packs.
|
|
12
|
+
#
|
|
13
|
+
# @example Pack all objects and delete redundant packs
|
|
14
|
+
# repack = Git::Commands::Repack.new(execution_context)
|
|
15
|
+
# repack.call(a: true, d: true)
|
|
16
|
+
#
|
|
17
|
+
# @example Pack all objects with bitmap index
|
|
18
|
+
# repack = Git::Commands::Repack.new(execution_context)
|
|
19
|
+
# repack.call(a: true, d: true, write_bitmap_index: true)
|
|
20
|
+
#
|
|
21
|
+
# @example Control delta compression performance
|
|
22
|
+
# repack = Git::Commands::Repack.new(execution_context)
|
|
23
|
+
# repack.call(a: true, d: true, window: 250, depth: 50)
|
|
24
|
+
#
|
|
25
|
+
# @note `arguments` block audited against
|
|
26
|
+
# https://git-scm.com/docs/git-repack/2.53.0
|
|
27
|
+
#
|
|
28
|
+
# @see https://git-scm.com/docs/git-repack git-repack
|
|
29
|
+
#
|
|
30
|
+
# @see Git::Commands
|
|
31
|
+
#
|
|
32
|
+
# @api private
|
|
33
|
+
#
|
|
34
|
+
class Repack < Git::Commands::Base
|
|
35
|
+
arguments do
|
|
36
|
+
literal 'repack'
|
|
37
|
+
|
|
38
|
+
# Pack selection
|
|
39
|
+
flag_option :a
|
|
40
|
+
flag_option :A
|
|
41
|
+
flag_option :d
|
|
42
|
+
flag_option :cruft
|
|
43
|
+
value_option :cruft_expiration, inline: true
|
|
44
|
+
value_option :max_cruft_size, inline: true
|
|
45
|
+
value_option :combine_cruft_below_size, inline: true
|
|
46
|
+
value_option :expire_to, inline: true
|
|
47
|
+
|
|
48
|
+
# Object transfer
|
|
49
|
+
flag_option :l
|
|
50
|
+
flag_option :f
|
|
51
|
+
flag_option :F
|
|
52
|
+
|
|
53
|
+
# Output control
|
|
54
|
+
flag_option %i[quiet q]
|
|
55
|
+
flag_option :n
|
|
56
|
+
|
|
57
|
+
# Delta compression
|
|
58
|
+
value_option :window, inline: true
|
|
59
|
+
value_option :depth, inline: true
|
|
60
|
+
value_option :threads, inline: true
|
|
61
|
+
value_option :window_memory, inline: true
|
|
62
|
+
value_option :max_pack_size, inline: true
|
|
63
|
+
|
|
64
|
+
# Object filtering
|
|
65
|
+
value_option :filter, inline: true
|
|
66
|
+
value_option :filter_to, inline: true
|
|
67
|
+
|
|
68
|
+
# Bitmaps and multi-pack index
|
|
69
|
+
flag_option %i[write_bitmap_index b]
|
|
70
|
+
flag_option :pack_kept_objects
|
|
71
|
+
value_option :keep_pack, inline: true, repeatable: true
|
|
72
|
+
flag_option %i[write_midx m]
|
|
73
|
+
|
|
74
|
+
# Unreachable objects
|
|
75
|
+
value_option :unpack_unreachable, inline: true
|
|
76
|
+
flag_option %i[keep_unreachable k]
|
|
77
|
+
|
|
78
|
+
# Delta and geometry
|
|
79
|
+
flag_option %i[delta_islands i]
|
|
80
|
+
value_option %i[geometric g], inline: true
|
|
81
|
+
|
|
82
|
+
# Pack-objects pass-through
|
|
83
|
+
value_option :name_hash_version, inline: true
|
|
84
|
+
flag_option :path_walk
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# @!method call(*, **)
|
|
88
|
+
#
|
|
89
|
+
# @overload call(**options)
|
|
90
|
+
#
|
|
91
|
+
# Execute the `git repack` command
|
|
92
|
+
#
|
|
93
|
+
# @param options [Hash] command options
|
|
94
|
+
#
|
|
95
|
+
# @option options [Boolean, nil] :a (nil) pack all objects into a single pack
|
|
96
|
+
#
|
|
97
|
+
# When `true`, passes `-a`. Especially useful when packing a repository
|
|
98
|
+
# used for private development. Use with `:d` to clean up objects.
|
|
99
|
+
#
|
|
100
|
+
# @option options [Boolean, nil] :A (nil) pack all objects, loosening unreachable
|
|
101
|
+
# objects when combined with `:d`
|
|
102
|
+
#
|
|
103
|
+
# When `true`, passes `-A`. Like `:a`, but any unreachable objects in a
|
|
104
|
+
# previous pack become loose unpacked objects instead of being removed. The
|
|
105
|
+
# loose unreachable objects are pruned by the next `git gc` invocation.
|
|
106
|
+
#
|
|
107
|
+
# @option options [Boolean, nil] :d (nil) delete redundant packs after repacking
|
|
108
|
+
#
|
|
109
|
+
# When `true`, passes `-d`. After packing, removes any existing packs that
|
|
110
|
+
# are made redundant by the newly created pack. Also runs `git prune-packed`.
|
|
111
|
+
#
|
|
112
|
+
# @option options [Boolean, nil] :cruft (nil) pack unreachable objects into a
|
|
113
|
+
# separate cruft pack when combined with `:d`
|
|
114
|
+
#
|
|
115
|
+
# When `true`, passes `--cruft`. Like `:a`, but any unreachable objects are
|
|
116
|
+
# packed into a separate cruft pack instead of being removed. Incompatible
|
|
117
|
+
# with `:keep_unreachable`.
|
|
118
|
+
#
|
|
119
|
+
# @option options [String] :cruft_expiration (nil) expire cruft objects older
|
|
120
|
+
# than the given date immediately
|
|
121
|
+
#
|
|
122
|
+
# Passed as `--cruft-expiration=<approxidate>`. Only useful with
|
|
123
|
+
# `--cruft -d`.
|
|
124
|
+
#
|
|
125
|
+
# @option options [Integer, String] :max_cruft_size (nil) override
|
|
126
|
+
# `--max-pack-size` for cruft packs
|
|
127
|
+
#
|
|
128
|
+
# Passed as `--max-cruft-size=<n>`. Accepts size suffixes (`k`, `m`, `g`).
|
|
129
|
+
# Inherits the value of `:max_pack_size` by default.
|
|
130
|
+
#
|
|
131
|
+
# @option options [Integer, String] :combine_cruft_below_size (nil) only
|
|
132
|
+
# repack cruft packs strictly smaller than this size
|
|
133
|
+
#
|
|
134
|
+
# Passed as `--combine-cruft-below-size=<n>`. Accepts size suffixes
|
|
135
|
+
# (`k`, `m`, `g`). Useful to avoid repacking large cruft packs.
|
|
136
|
+
#
|
|
137
|
+
# @option options [String] :expire_to (nil) write pruned cruft objects to
|
|
138
|
+
# a directory
|
|
139
|
+
#
|
|
140
|
+
# Passed as `--expire-to=<dir>`. Only useful with `--cruft -d`.
|
|
141
|
+
#
|
|
142
|
+
# @option options [Boolean, nil] :l (nil) pass `--local` to `git pack-objects`
|
|
143
|
+
#
|
|
144
|
+
# When `true`, passes `-l`. Ignores objects that come from an alternates
|
|
145
|
+
# object store.
|
|
146
|
+
#
|
|
147
|
+
# @option options [Boolean, nil] :f (nil) pass `--no-reuse-delta` to
|
|
148
|
+
# `git pack-objects`
|
|
149
|
+
#
|
|
150
|
+
# When `true`, passes `-f`. Forces reconstruction of all pack deltas.
|
|
151
|
+
#
|
|
152
|
+
# @option options [Boolean, nil] :F (nil) pass `--no-reuse-object` to
|
|
153
|
+
# `git pack-objects`
|
|
154
|
+
#
|
|
155
|
+
# When `true`, passes `-F`. Forces reconstruction of all object data, not
|
|
156
|
+
# just deltas.
|
|
157
|
+
#
|
|
158
|
+
# @option options [Boolean, nil] :quiet (nil) suppress progress reporting
|
|
159
|
+
#
|
|
160
|
+
# When `true`, passes `--quiet`.
|
|
161
|
+
#
|
|
162
|
+
# Alias: `:q`
|
|
163
|
+
#
|
|
164
|
+
# @option options [Boolean, nil] :n (nil) do not update server information
|
|
165
|
+
#
|
|
166
|
+
# When `true`, passes `-n`. Skips running `git update-server-info`, which
|
|
167
|
+
# updates local catalog files needed to publish the repository
|
|
168
|
+
# over HTTP or FTP.
|
|
169
|
+
#
|
|
170
|
+
# @option options [Integer, String] :window (nil) number of previous objects
|
|
171
|
+
# used to generate delta compressions
|
|
172
|
+
#
|
|
173
|
+
# Passed as `--window=<n>` to `git pack-objects`.
|
|
174
|
+
#
|
|
175
|
+
# @option options [Integer, String] :depth (nil) maximum delta depth
|
|
176
|
+
#
|
|
177
|
+
# Passed as `--depth=<n>` to `git pack-objects`.
|
|
178
|
+
#
|
|
179
|
+
# @option options [Integer, String] :threads (nil) number of threads for
|
|
180
|
+
# delta search
|
|
181
|
+
#
|
|
182
|
+
# Passed as `--threads=<n>` to `git pack-objects`.
|
|
183
|
+
#
|
|
184
|
+
# @option options [Integer, String] :window_memory (nil) maximum memory usage
|
|
185
|
+
# for delta window
|
|
186
|
+
#
|
|
187
|
+
# Passed as `--window-memory=<n>` to `git pack-objects`. Accepts size
|
|
188
|
+
# suffixes (`k`, `m`, `g`).
|
|
189
|
+
#
|
|
190
|
+
# @option options [Integer, String] :max_pack_size (nil) maximum size of each
|
|
191
|
+
# output pack file
|
|
192
|
+
#
|
|
193
|
+
# Passed as `--max-pack-size=<n>`. Accepts size suffixes (`k`, `m`, `g`).
|
|
194
|
+
#
|
|
195
|
+
# @option options [String] :filter (nil) remove objects matching the filter
|
|
196
|
+
# specification from the resulting packfile
|
|
197
|
+
#
|
|
198
|
+
# Passed as `--filter=<filter-spec>`. Filtered objects are placed in a
|
|
199
|
+
# separate packfile. Best used with `-a -d` and in a bare repository.
|
|
200
|
+
#
|
|
201
|
+
# @option options [String] :filter_to (nil) write the pack containing filtered
|
|
202
|
+
# objects to a directory
|
|
203
|
+
#
|
|
204
|
+
# Passed as `--filter-to=<dir>`. Only useful with `:filter`.
|
|
205
|
+
#
|
|
206
|
+
# @option options [Boolean, nil] :write_bitmap_index (nil) write a reachability
|
|
207
|
+
# bitmap index as part of the repack
|
|
208
|
+
#
|
|
209
|
+
# When `true`, passes `--write-bitmap-index`. Only meaningful when used with
|
|
210
|
+
# `:a`, `:A`, or `:write_midx`. Overrides `repack.writeBitmaps`.
|
|
211
|
+
#
|
|
212
|
+
# Alias: `:b`
|
|
213
|
+
#
|
|
214
|
+
# @option options [Boolean, nil] :pack_kept_objects (nil) include objects in
|
|
215
|
+
# `.keep` files when repacking
|
|
216
|
+
#
|
|
217
|
+
# When `true`, passes `--pack-kept-objects`. Generally only useful when
|
|
218
|
+
# writing bitmaps with `:write_bitmap_index`.
|
|
219
|
+
#
|
|
220
|
+
# @option options [String, Array<String>] :keep_pack (nil) exclude named
|
|
221
|
+
# pack(s) from repacking
|
|
222
|
+
#
|
|
223
|
+
# Pass a pack file name (without leading directory, e.g. `'pack-abc123.pack'`)
|
|
224
|
+
# or an array of pack file names. Each value is passed as a separate
|
|
225
|
+
# `--keep-pack=<name>` argument.
|
|
226
|
+
#
|
|
227
|
+
# @option options [Boolean, nil] :write_midx (nil) write a multi-pack index
|
|
228
|
+
# containing the non-redundant packs
|
|
229
|
+
#
|
|
230
|
+
# When `true`, passes `--write-midx`.
|
|
231
|
+
#
|
|
232
|
+
# Alias: `:m`
|
|
233
|
+
#
|
|
234
|
+
# @option options [String] :unpack_unreachable (nil) do not loosen unreachable
|
|
235
|
+
# objects older than the given date
|
|
236
|
+
#
|
|
237
|
+
# Passed as `--unpack-unreachable=<when>`. Objects older than the given date
|
|
238
|
+
# are not loosened, since they would be immediately pruned by a follow-up
|
|
239
|
+
# `git prune`.
|
|
240
|
+
#
|
|
241
|
+
# @option options [Boolean, nil] :keep_unreachable (nil) keep unreachable objects
|
|
242
|
+
# in the new packfile rather than removing them
|
|
243
|
+
#
|
|
244
|
+
# When `true`, passes `--keep-unreachable`. Appends unreachable objects from
|
|
245
|
+
# existing packs to the end of the new packfile. For use with `-ad`.
|
|
246
|
+
#
|
|
247
|
+
# Alias: `:k`
|
|
248
|
+
#
|
|
249
|
+
# @option options [Boolean, nil] :delta_islands (nil) pass `--delta-islands` to
|
|
250
|
+
# `git pack-objects`
|
|
251
|
+
#
|
|
252
|
+
# When `true`, passes `--delta-islands`.
|
|
253
|
+
#
|
|
254
|
+
# Alias: `:i`
|
|
255
|
+
#
|
|
256
|
+
# @option options [Integer, String] :geometric (nil) arrange pack structure so
|
|
257
|
+
# each successive pack contains at least this many times the objects of the
|
|
258
|
+
# next-largest pack
|
|
259
|
+
#
|
|
260
|
+
# Passed as `--geometric=<factor>`.
|
|
261
|
+
#
|
|
262
|
+
# Alias: `:g`
|
|
263
|
+
#
|
|
264
|
+
# @option options [Integer, String] :name_hash_version (nil) pass
|
|
265
|
+
# `--name-hash-version=<n>` to `git pack-objects`
|
|
266
|
+
#
|
|
267
|
+
# @option options [Boolean, nil] :path_walk (nil) pass `--path-walk` to
|
|
268
|
+
# `git pack-objects`
|
|
269
|
+
#
|
|
270
|
+
# @return [Git::CommandLineResult] the result of calling `git repack`
|
|
271
|
+
#
|
|
272
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
273
|
+
#
|
|
274
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
end
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
# Implements the `git reset` command
|
|
8
|
+
#
|
|
9
|
+
# Resets the current HEAD to a specified state, or updates the staged
|
|
10
|
+
# version of specified files to match the state from a given commit or tree.
|
|
11
|
+
#
|
|
12
|
+
# @example Reset to HEAD (unstage all changes)
|
|
13
|
+
# reset = Git::Commands::Reset.new(execution_context)
|
|
14
|
+
# reset.call
|
|
15
|
+
#
|
|
16
|
+
# @example Hard reset to a specific commit
|
|
17
|
+
# reset = Git::Commands::Reset.new(execution_context)
|
|
18
|
+
# reset.call('HEAD~1', hard: true)
|
|
19
|
+
#
|
|
20
|
+
# @example Soft reset (preserve staged changes)
|
|
21
|
+
# reset = Git::Commands::Reset.new(execution_context)
|
|
22
|
+
# reset.call('HEAD~1', soft: true)
|
|
23
|
+
#
|
|
24
|
+
# @example Reset specific files to HEAD (unstage)
|
|
25
|
+
# reset = Git::Commands::Reset.new(execution_context)
|
|
26
|
+
# reset.call(pathspec: ['file.rb'])
|
|
27
|
+
#
|
|
28
|
+
# @example Reset specific files to a commit's version
|
|
29
|
+
# reset = Git::Commands::Reset.new(execution_context)
|
|
30
|
+
# reset.call('HEAD~1', pathspec: ['file.rb'])
|
|
31
|
+
#
|
|
32
|
+
# @note `arguments` block audited against
|
|
33
|
+
# https://git-scm.com/docs/git-reset/2.53.0
|
|
34
|
+
#
|
|
35
|
+
# @see https://git-scm.com/docs/git-reset git-reset
|
|
36
|
+
#
|
|
37
|
+
# @see Git::Commands
|
|
38
|
+
#
|
|
39
|
+
# @api private
|
|
40
|
+
#
|
|
41
|
+
class Reset < Git::Commands::Base
|
|
42
|
+
arguments do
|
|
43
|
+
literal 'reset'
|
|
44
|
+
|
|
45
|
+
# Reset mode
|
|
46
|
+
flag_option :soft
|
|
47
|
+
flag_option :mixed
|
|
48
|
+
flag_option :N
|
|
49
|
+
flag_option :hard
|
|
50
|
+
flag_option :merge
|
|
51
|
+
flag_option :keep
|
|
52
|
+
|
|
53
|
+
# Output
|
|
54
|
+
flag_option %i[quiet q], negatable: true
|
|
55
|
+
|
|
56
|
+
# Index refresh
|
|
57
|
+
flag_option :refresh, negatable: true
|
|
58
|
+
|
|
59
|
+
# Diff context
|
|
60
|
+
value_option %i[unified U], inline: true
|
|
61
|
+
value_option :inter_hunk_context, inline: true
|
|
62
|
+
|
|
63
|
+
# Pathspec from file
|
|
64
|
+
value_option :pathspec_from_file, inline: true
|
|
65
|
+
flag_option :pathspec_file_nul
|
|
66
|
+
|
|
67
|
+
# Submodule handling
|
|
68
|
+
flag_option :recurse_submodules, negatable: true
|
|
69
|
+
|
|
70
|
+
operand :commit, required: false
|
|
71
|
+
end_of_options
|
|
72
|
+
value_option :pathspec, as_operand: true, repeatable: true
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# @!method call(*, **)
|
|
76
|
+
#
|
|
77
|
+
# Execute the git reset command.
|
|
78
|
+
#
|
|
79
|
+
# @overload call(commit = nil, **options)
|
|
80
|
+
#
|
|
81
|
+
# @param commit [String, nil] (nil) commit or tree-ish to reset to;
|
|
82
|
+
# defaults to HEAD when not given
|
|
83
|
+
#
|
|
84
|
+
# @param options [Hash] command options
|
|
85
|
+
#
|
|
86
|
+
# @option options [Boolean, nil] :soft (nil) leave working tree and index unchanged;
|
|
87
|
+
# reset HEAD to the specified commit
|
|
88
|
+
#
|
|
89
|
+
# @option options [Boolean, nil] :mixed (nil) reset the index but not the working tree;
|
|
90
|
+
# default mode when no mode flag is given
|
|
91
|
+
#
|
|
92
|
+
# @option options [Boolean, nil] :N (nil) mark removed paths as intent-to-add;
|
|
93
|
+
# only meaningful alongside `:mixed`
|
|
94
|
+
#
|
|
95
|
+
# @option options [Boolean, nil] :hard (nil) reset the index and working tree to the
|
|
96
|
+
# specified commit; discards all tracked changes since that commit
|
|
97
|
+
#
|
|
98
|
+
# @option options [Boolean, nil] :merge (nil) reset the index and update files that
|
|
99
|
+
# differ between the commit and HEAD, while preserving uncommitted changes
|
|
100
|
+
#
|
|
101
|
+
# @option options [Boolean, nil] :keep (nil) reset index entries and update files that
|
|
102
|
+
# differ between the commit and HEAD; aborts if any such file has local changes
|
|
103
|
+
#
|
|
104
|
+
# @option options [Boolean, nil] :quiet (nil) suppress all output; report errors only
|
|
105
|
+
# (`--quiet`)
|
|
106
|
+
#
|
|
107
|
+
# Alias: :q
|
|
108
|
+
#
|
|
109
|
+
# @option options [Boolean, nil] :no_quiet (nil) do not suppress output (`--no-quiet`)
|
|
110
|
+
#
|
|
111
|
+
# @option options [Boolean, nil] :refresh (nil) refresh the index after a mixed reset;
|
|
112
|
+
# enabled by default when omitted (`--refresh`)
|
|
113
|
+
#
|
|
114
|
+
# @option options [Boolean, nil] :no_refresh (nil) do not refresh the index after a mixed
|
|
115
|
+
# reset (`--no-refresh`)
|
|
116
|
+
#
|
|
117
|
+
# @option options [Integer, String] :unified (nil) number of context lines around each diff hunk
|
|
118
|
+
#
|
|
119
|
+
# Alias: :U
|
|
120
|
+
#
|
|
121
|
+
# @option options [Integer, String] :inter_hunk_context (nil) number of context lines to show
|
|
122
|
+
# between diff hunks
|
|
123
|
+
#
|
|
124
|
+
# @option options [String] :pathspec_from_file (nil) read pathspec from the given file;
|
|
125
|
+
# pass `"-"` to read from standard input
|
|
126
|
+
#
|
|
127
|
+
# @option options [Boolean, nil] :pathspec_file_nul (nil) delimit pathspec elements with NUL
|
|
128
|
+
# when reading from `:pathspec_from_file`; only meaningful alongside `:pathspec_from_file`
|
|
129
|
+
#
|
|
130
|
+
# @option options [Boolean, nil] :recurse_submodules (nil) also reset the working tree of
|
|
131
|
+
# all active submodules to the commit recorded in the superproject
|
|
132
|
+
# (`--recurse-submodules`)
|
|
133
|
+
#
|
|
134
|
+
# @option options [Boolean, nil] :no_recurse_submodules (nil) do not reset submodule
|
|
135
|
+
# working trees (`--no-recurse-submodules`)
|
|
136
|
+
#
|
|
137
|
+
# @option options [Array<String>] :pathspec (nil) path(s) to reset in the index;
|
|
138
|
+
# when given, only the index entries for the matching paths are updated
|
|
139
|
+
#
|
|
140
|
+
# @return [Git::CommandLineResult] the result of calling `git reset`
|
|
141
|
+
#
|
|
142
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
143
|
+
#
|
|
144
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|