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,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Stash
|
|
8
|
+
# Create a stash commit without storing it in refs/stash
|
|
9
|
+
#
|
|
10
|
+
# This is a plumbing command used to create a stash commit object without
|
|
11
|
+
# actually storing it in the stash reflog. It's useful for scripts that
|
|
12
|
+
# need to create stash commits programmatically.
|
|
13
|
+
#
|
|
14
|
+
# The command creates a stash commit and outputs its SHA, but does not
|
|
15
|
+
# update refs/stash. Use {Store} to store the commit in the stash reflog.
|
|
16
|
+
#
|
|
17
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
|
|
18
|
+
#
|
|
19
|
+
# @see Git::Commands::Stash Git::Commands::Stash for usage examples
|
|
20
|
+
#
|
|
21
|
+
# @see https://git-scm.com/docs/git-stash git-stash documentation
|
|
22
|
+
#
|
|
23
|
+
# @api private
|
|
24
|
+
#
|
|
25
|
+
# @example Create a stash commit
|
|
26
|
+
# Git::Commands::Stash::Create.new(execution_context).call
|
|
27
|
+
#
|
|
28
|
+
# @example Create a stash commit with a message
|
|
29
|
+
# Git::Commands::Stash::Create.new(execution_context).call('WIP: my changes')
|
|
30
|
+
#
|
|
31
|
+
class Create < Git::Commands::Base
|
|
32
|
+
arguments do
|
|
33
|
+
literal 'stash'
|
|
34
|
+
literal 'create'
|
|
35
|
+
operand :message
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @!method call(*, **)
|
|
39
|
+
#
|
|
40
|
+
# Create a stash commit
|
|
41
|
+
#
|
|
42
|
+
# @overload call()
|
|
43
|
+
#
|
|
44
|
+
# Create a stash commit without a message
|
|
45
|
+
#
|
|
46
|
+
# @overload call(message)
|
|
47
|
+
#
|
|
48
|
+
# Create a stash commit with a message
|
|
49
|
+
#
|
|
50
|
+
# @param message [String] optional message for the stash commit
|
|
51
|
+
#
|
|
52
|
+
# @return [Git::CommandLineResult] the result of calling `git stash create`
|
|
53
|
+
#
|
|
54
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Stash
|
|
8
|
+
# Remove a stash entry from the stash list
|
|
9
|
+
#
|
|
10
|
+
# Removes a single stash entry from the list of stash entries.
|
|
11
|
+
# If no stash reference is given, it removes the latest one.
|
|
12
|
+
#
|
|
13
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
|
|
14
|
+
#
|
|
15
|
+
# @see Git::Commands::Stash Git::Commands::Stash for usage examples
|
|
16
|
+
#
|
|
17
|
+
# @see https://git-scm.com/docs/git-stash git-stash documentation
|
|
18
|
+
#
|
|
19
|
+
# @api private
|
|
20
|
+
#
|
|
21
|
+
# @example Drop the latest stash
|
|
22
|
+
# Git::Commands::Stash::Drop.new(execution_context).call
|
|
23
|
+
#
|
|
24
|
+
# @example Drop a specific stash
|
|
25
|
+
# Git::Commands::Stash::Drop.new(execution_context).call('stash@\\{2}')
|
|
26
|
+
#
|
|
27
|
+
class Drop < Git::Commands::Base
|
|
28
|
+
arguments do
|
|
29
|
+
literal 'stash'
|
|
30
|
+
literal 'drop'
|
|
31
|
+
flag_option %i[quiet q]
|
|
32
|
+
operand :stash
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# @!method call(*, **)
|
|
36
|
+
#
|
|
37
|
+
# Drop a stash entry
|
|
38
|
+
#
|
|
39
|
+
# @overload call(**options)
|
|
40
|
+
#
|
|
41
|
+
# Drop the latest stash
|
|
42
|
+
#
|
|
43
|
+
# @param options [Hash] command options
|
|
44
|
+
#
|
|
45
|
+
# @option options [Boolean, nil] :quiet (nil) suppress informational messages
|
|
46
|
+
#
|
|
47
|
+
# Alias: :q
|
|
48
|
+
#
|
|
49
|
+
# @overload call(stash, **options)
|
|
50
|
+
#
|
|
51
|
+
# Drop a specific stash
|
|
52
|
+
#
|
|
53
|
+
# @param stash [String] stash reference (e.g., 'stash@\\{0}', '0')
|
|
54
|
+
#
|
|
55
|
+
# @param options [Hash] command options
|
|
56
|
+
#
|
|
57
|
+
# @option options [Boolean, nil] :quiet (nil) suppress informational messages
|
|
58
|
+
#
|
|
59
|
+
# Alias: :q
|
|
60
|
+
#
|
|
61
|
+
# @return [Git::CommandLineResult] the result of calling `git stash drop`
|
|
62
|
+
#
|
|
63
|
+
# @raise [Git::FailedError] if the stash does not exist
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
require 'git/parsers/stash'
|
|
5
|
+
|
|
6
|
+
module Git
|
|
7
|
+
module Commands
|
|
8
|
+
module Stash
|
|
9
|
+
# List all stash entries
|
|
10
|
+
#
|
|
11
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
|
|
12
|
+
#
|
|
13
|
+
# @see Git::Commands::Stash Git::Commands::Stash for usage examples
|
|
14
|
+
#
|
|
15
|
+
# @see https://git-scm.com/docs/git-stash git-stash documentation
|
|
16
|
+
#
|
|
17
|
+
# @api private
|
|
18
|
+
#
|
|
19
|
+
# @example List all stashes
|
|
20
|
+
# Git::Commands::Stash::List.new(execution_context).call
|
|
21
|
+
#
|
|
22
|
+
class List < Git::Commands::Base
|
|
23
|
+
arguments do
|
|
24
|
+
literal 'stash'
|
|
25
|
+
literal 'list'
|
|
26
|
+
literal "--format=#{Git::Parsers::Stash::STASH_FORMAT}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# @!method call(*, **)
|
|
30
|
+
#
|
|
31
|
+
# List all stash entries
|
|
32
|
+
#
|
|
33
|
+
# @overload call()
|
|
34
|
+
#
|
|
35
|
+
# @return [Git::CommandLineResult] the result of calling `git stash list`
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Stash
|
|
8
|
+
# Apply stashed changes and remove from stash list
|
|
9
|
+
#
|
|
10
|
+
# Like {Apply}, but removes the stash from the stash list after
|
|
11
|
+
# applying, unless there are conflicts.
|
|
12
|
+
#
|
|
13
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
|
|
14
|
+
#
|
|
15
|
+
# @see Git::Commands::Stash Git::Commands::Stash for usage examples
|
|
16
|
+
#
|
|
17
|
+
# @see https://git-scm.com/docs/git-stash git-stash documentation
|
|
18
|
+
#
|
|
19
|
+
# @api private
|
|
20
|
+
#
|
|
21
|
+
# @example Pop the latest stash
|
|
22
|
+
# Git::Commands::Stash::Pop.new(execution_context).call
|
|
23
|
+
#
|
|
24
|
+
# @example Pop a specific stash
|
|
25
|
+
# Git::Commands::Stash::Pop.new(execution_context).call('stash@\\{2}')
|
|
26
|
+
#
|
|
27
|
+
# @example Pop and restore index state
|
|
28
|
+
# Git::Commands::Stash::Pop.new(execution_context).call(index: true)
|
|
29
|
+
#
|
|
30
|
+
# @example Pop quietly
|
|
31
|
+
# Git::Commands::Stash::Pop.new(execution_context).call(quiet: true)
|
|
32
|
+
#
|
|
33
|
+
class Pop < Git::Commands::Base
|
|
34
|
+
arguments do
|
|
35
|
+
literal 'stash'
|
|
36
|
+
literal 'pop'
|
|
37
|
+
flag_option :index
|
|
38
|
+
flag_option %i[quiet q]
|
|
39
|
+
operand :stash
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# @!method call(*, **)
|
|
43
|
+
#
|
|
44
|
+
# Pop stashed changes
|
|
45
|
+
#
|
|
46
|
+
# @overload call(**options)
|
|
47
|
+
#
|
|
48
|
+
# Pop the latest stash
|
|
49
|
+
#
|
|
50
|
+
# @param options [Hash] command options
|
|
51
|
+
#
|
|
52
|
+
# @option options [Boolean, nil] :index (nil) restore the index state as well
|
|
53
|
+
#
|
|
54
|
+
# @option options [Boolean, nil] :quiet (nil) suppress informational messages
|
|
55
|
+
#
|
|
56
|
+
# Alias: :q
|
|
57
|
+
#
|
|
58
|
+
# @overload call(stash, **options)
|
|
59
|
+
#
|
|
60
|
+
# Pop a specific stash
|
|
61
|
+
#
|
|
62
|
+
# @param stash [String] stash reference (e.g., 'stash@\\{0}', '0')
|
|
63
|
+
#
|
|
64
|
+
# @param options [Hash] command options
|
|
65
|
+
#
|
|
66
|
+
# @option options [Boolean, nil] :index (nil) restore the index state as well
|
|
67
|
+
#
|
|
68
|
+
# @option options [Boolean, nil] :quiet (nil) suppress informational messages
|
|
69
|
+
#
|
|
70
|
+
# Alias: :q
|
|
71
|
+
#
|
|
72
|
+
# @return [Git::CommandLineResult] the result of calling `git stash pop`
|
|
73
|
+
#
|
|
74
|
+
# @raise [Git::FailedError] if the stash does not exist
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Stash
|
|
8
|
+
# Stash changes in the working directory
|
|
9
|
+
#
|
|
10
|
+
# Saves local modifications to a new stash entry and rolls them back
|
|
11
|
+
# to HEAD (in the working tree and index). The command takes
|
|
12
|
+
# various options to customize what gets stashed.
|
|
13
|
+
#
|
|
14
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
|
|
15
|
+
#
|
|
16
|
+
# @see Git::Commands::Stash Git::Commands::Stash for usage examples
|
|
17
|
+
#
|
|
18
|
+
# @see https://git-scm.com/docs/git-stash git-stash documentation
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
#
|
|
22
|
+
# @example Save all changes with a message
|
|
23
|
+
# Git::Commands::Stash::Push.new(execution_context).call(message: 'WIP: feature work')
|
|
24
|
+
#
|
|
25
|
+
# @example Stash only specific files
|
|
26
|
+
# Git::Commands::Stash::Push.new(execution_context).call('src/file.rb', message: 'Partial stash')
|
|
27
|
+
#
|
|
28
|
+
# @example Keep staged changes in index
|
|
29
|
+
# Git::Commands::Stash::Push.new(execution_context).call(keep_index: true)
|
|
30
|
+
#
|
|
31
|
+
# @example Include untracked files
|
|
32
|
+
# Git::Commands::Stash::Push.new(execution_context).call(include_untracked: true)
|
|
33
|
+
#
|
|
34
|
+
class Push < Git::Commands::Base
|
|
35
|
+
arguments do
|
|
36
|
+
literal 'stash'
|
|
37
|
+
literal 'push'
|
|
38
|
+
flag_option %i[patch p]
|
|
39
|
+
flag_option %i[staged S]
|
|
40
|
+
flag_option %i[keep_index k], negatable: true
|
|
41
|
+
flag_option %i[quiet q]
|
|
42
|
+
flag_option %i[include_untracked u]
|
|
43
|
+
flag_option %i[all a]
|
|
44
|
+
value_option %i[message m]
|
|
45
|
+
value_option :pathspec_from_file, inline: true
|
|
46
|
+
flag_option :pathspec_file_nul
|
|
47
|
+
end_of_options
|
|
48
|
+
operand :pathspec, repeatable: true
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# @!method call(*, **)
|
|
52
|
+
#
|
|
53
|
+
# @overload call(*pathspec, **options)
|
|
54
|
+
#
|
|
55
|
+
# Stash changes in the working directory
|
|
56
|
+
#
|
|
57
|
+
# @param pathspec [Array<String>] optional paths to limit what gets stashed
|
|
58
|
+
#
|
|
59
|
+
# @param options [Hash] command options
|
|
60
|
+
#
|
|
61
|
+
# @option options [Boolean, nil] :patch (nil) interactively select hunks to stash
|
|
62
|
+
#
|
|
63
|
+
# Alias: :p
|
|
64
|
+
#
|
|
65
|
+
# @option options [Boolean, nil] :staged (nil) stash only staged changes
|
|
66
|
+
#
|
|
67
|
+
# Alias: :S
|
|
68
|
+
#
|
|
69
|
+
# @option options [Boolean, nil] :keep_index (nil) keep staged changes in the index (`--keep-index`)
|
|
70
|
+
#
|
|
71
|
+
# Alias: :k
|
|
72
|
+
#
|
|
73
|
+
# @option options [Boolean, nil] :no_keep_index (nil) do not preserve staged changes in the index
|
|
74
|
+
# (`--no-keep-index`)
|
|
75
|
+
#
|
|
76
|
+
# @option options [Boolean, nil] :quiet (nil) suppress informational messages
|
|
77
|
+
#
|
|
78
|
+
# Alias: :q
|
|
79
|
+
#
|
|
80
|
+
# @option options [Boolean, nil] :include_untracked (nil) include untracked files in the stash
|
|
81
|
+
#
|
|
82
|
+
# Alias: :u
|
|
83
|
+
#
|
|
84
|
+
# @option options [Boolean, nil] :all (nil) include untracked and ignored files in the stash
|
|
85
|
+
#
|
|
86
|
+
# Alias: :a
|
|
87
|
+
#
|
|
88
|
+
# @option options [String] :message (nil) descriptive message for the stash
|
|
89
|
+
#
|
|
90
|
+
# Alias: :m
|
|
91
|
+
#
|
|
92
|
+
# @option options [String] :pathspec_from_file (nil) read pathspecs from the given file
|
|
93
|
+
#
|
|
94
|
+
# @option options [Boolean, nil] :pathspec_file_nul (nil) pathspecs in the file are NUL-separated
|
|
95
|
+
#
|
|
96
|
+
# @return [Git::CommandLineResult] the result of calling `git stash push`
|
|
97
|
+
#
|
|
98
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
99
|
+
#
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Stash
|
|
8
|
+
# Show the changes recorded in a stash entry as a diff
|
|
9
|
+
#
|
|
10
|
+
# Shows the changes recorded in the stash entry as a diff between the
|
|
11
|
+
# stashed contents and the commit back when the stash entry was first
|
|
12
|
+
# created.
|
|
13
|
+
#
|
|
14
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
|
|
15
|
+
#
|
|
16
|
+
# @see Git::Commands::Stash Git::Commands::Stash for usage examples
|
|
17
|
+
#
|
|
18
|
+
# @see https://git-scm.com/docs/git-stash git-stash documentation
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
#
|
|
22
|
+
# @example Show numstat for the latest stash
|
|
23
|
+
# Git::Commands::Stash::Show.new(ctx).call(numstat: true, shortstat: true)
|
|
24
|
+
#
|
|
25
|
+
# @example Show patch for a specific stash
|
|
26
|
+
# Git::Commands::Stash::Show.new(ctx).call('stash@{2}', patch: true, numstat: true, shortstat: true)
|
|
27
|
+
#
|
|
28
|
+
# @example Show with directory statistics
|
|
29
|
+
# Git::Commands::Stash::Show.new(ctx).call(numstat: true, shortstat: true, dirstat: true)
|
|
30
|
+
# Git::Commands::Stash::Show.new(ctx).call(numstat: true, shortstat: true, dirstat: 'lines,cumulative')
|
|
31
|
+
#
|
|
32
|
+
class Show < Git::Commands::Base
|
|
33
|
+
arguments do
|
|
34
|
+
literal 'stash'
|
|
35
|
+
literal 'show'
|
|
36
|
+
|
|
37
|
+
flag_option :patch
|
|
38
|
+
flag_option :numstat
|
|
39
|
+
flag_option :raw
|
|
40
|
+
flag_option :shortstat
|
|
41
|
+
value_option %i[unified U], inline: true
|
|
42
|
+
|
|
43
|
+
flag_option %i[include_untracked u], negatable: true
|
|
44
|
+
flag_option :only_untracked
|
|
45
|
+
flag_or_value_option %i[find_renames M], inline: true
|
|
46
|
+
flag_or_value_option %i[find_copies C], inline: true
|
|
47
|
+
flag_option :find_copies_harder
|
|
48
|
+
value_option :inter_hunk_context, inline: true
|
|
49
|
+
flag_or_value_option :dirstat, inline: true
|
|
50
|
+
operand :stash
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# @!method call(*, **)
|
|
54
|
+
#
|
|
55
|
+
# Show stash diff
|
|
56
|
+
#
|
|
57
|
+
# @overload call(**options)
|
|
58
|
+
#
|
|
59
|
+
# Show diff for the latest stash
|
|
60
|
+
#
|
|
61
|
+
# @param options [Hash] command options
|
|
62
|
+
#
|
|
63
|
+
# @option options [Boolean, nil] :patch (nil) include unified diff patches per file
|
|
64
|
+
#
|
|
65
|
+
# @option options [Boolean, nil] :numstat (nil) include per-file insertion/deletion counts
|
|
66
|
+
#
|
|
67
|
+
# @option options [Boolean, nil] :raw (nil) include per-file mode/SHA/status metadata
|
|
68
|
+
#
|
|
69
|
+
# @option options [Boolean, nil] :shortstat (nil) include aggregate totals line
|
|
70
|
+
#
|
|
71
|
+
# @option options [Integer, String] :unified (nil) generate diff with <n> lines of context
|
|
72
|
+
#
|
|
73
|
+
# Alias: :U
|
|
74
|
+
#
|
|
75
|
+
# @option options [Boolean, nil] :include_untracked (nil) include untracked files (`--include-untracked`)
|
|
76
|
+
#
|
|
77
|
+
# Alias: :u
|
|
78
|
+
#
|
|
79
|
+
# @option options [Boolean, nil] :no_include_untracked (nil) exclude untracked files
|
|
80
|
+
# (`--no-include-untracked`)
|
|
81
|
+
#
|
|
82
|
+
# @option options [Boolean, nil] :only_untracked (nil) show only untracked files
|
|
83
|
+
#
|
|
84
|
+
# @option options [Boolean, Integer, nil] :find_renames (nil) detect renames; optionally pass a
|
|
85
|
+
# similarity threshold (e.g., 50 for 50%). Alias: :M
|
|
86
|
+
#
|
|
87
|
+
# @option options [Boolean, Integer, nil] :find_copies (nil) detect copies as well as renames;
|
|
88
|
+
# optionally pass a threshold. Alias: :C
|
|
89
|
+
#
|
|
90
|
+
# @option options [Boolean, nil] :find_copies_harder (nil) inspect all files as copy sources; expensive
|
|
91
|
+
#
|
|
92
|
+
# @option options [Integer, String] :inter_hunk_context (nil) show context between diff hunks, up to
|
|
93
|
+
# <n> lines, fusing hunks that are close to each other
|
|
94
|
+
#
|
|
95
|
+
# @option options [Boolean, String, nil] :dirstat (nil) include directory statistics
|
|
96
|
+
#
|
|
97
|
+
# Pass `true` for default, or a string like `'lines,cumulative'` for options.
|
|
98
|
+
#
|
|
99
|
+
# @overload call(stash, **options)
|
|
100
|
+
#
|
|
101
|
+
# Show diff for a specific stash
|
|
102
|
+
#
|
|
103
|
+
# @param stash [String] stash reference (e.g., 'stash@\\{0}', '0')
|
|
104
|
+
#
|
|
105
|
+
# @param options [Hash] command options
|
|
106
|
+
#
|
|
107
|
+
# @option options [Boolean, nil] :patch (nil) include unified diff patches per file
|
|
108
|
+
#
|
|
109
|
+
# @option options [Boolean, nil] :numstat (nil) include per-file insertion/deletion counts
|
|
110
|
+
#
|
|
111
|
+
# @option options [Boolean, nil] :raw (nil) include per-file mode/SHA/status metadata
|
|
112
|
+
#
|
|
113
|
+
# @option options [Boolean, nil] :shortstat (nil) include aggregate totals line
|
|
114
|
+
#
|
|
115
|
+
# @option options [Integer, String] :unified (nil) generate diff with <n> lines of context
|
|
116
|
+
#
|
|
117
|
+
# Alias: :U
|
|
118
|
+
#
|
|
119
|
+
# @option options [Boolean, nil] :include_untracked (nil) include untracked files (`--include-untracked`)
|
|
120
|
+
#
|
|
121
|
+
# Alias: :u
|
|
122
|
+
#
|
|
123
|
+
# @option options [Boolean, nil] :no_include_untracked (nil) exclude untracked files
|
|
124
|
+
# (`--no-include-untracked`)
|
|
125
|
+
#
|
|
126
|
+
# @option options [Boolean, nil] :only_untracked (nil) show only untracked files
|
|
127
|
+
#
|
|
128
|
+
# @option options [Boolean, Integer, nil] :find_renames (nil) detect renames; optionally pass a
|
|
129
|
+
# similarity threshold (e.g., 50 for 50%). Alias: :M
|
|
130
|
+
#
|
|
131
|
+
# @option options [Boolean, Integer, nil] :find_copies (nil) detect copies as well as renames;
|
|
132
|
+
# optionally pass a threshold. Alias: :C
|
|
133
|
+
#
|
|
134
|
+
# @option options [Boolean, nil] :find_copies_harder (nil) inspect all files as copy sources; expensive
|
|
135
|
+
#
|
|
136
|
+
# @option options [Integer, String] :inter_hunk_context (nil) show context between diff hunks, up to
|
|
137
|
+
# <n> lines, fusing hunks that are close to each other
|
|
138
|
+
#
|
|
139
|
+
# @option options [Boolean, String, nil] :dirstat (nil) include directory statistics
|
|
140
|
+
#
|
|
141
|
+
# Pass `true` for default, or a string like `'lines,cumulative'` for options.
|
|
142
|
+
#
|
|
143
|
+
# @return [Git::CommandLineResult] the result of calling `git stash show`
|
|
144
|
+
#
|
|
145
|
+
# @raise [Git::FailedError] if git returns a non-zero exit status
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Stash
|
|
8
|
+
# Store a commit in the stash reflog
|
|
9
|
+
#
|
|
10
|
+
# This is a plumbing command used to store a given stash commit (created
|
|
11
|
+
# by `git stash create`) in the stash reflog, updating refs/stash.
|
|
12
|
+
#
|
|
13
|
+
# This command is typically used after {Create} to actually record
|
|
14
|
+
# the stash in the reflog.
|
|
15
|
+
#
|
|
16
|
+
# @note `arguments` block audited against https://git-scm.com/docs/git-stash/2.53.0
|
|
17
|
+
#
|
|
18
|
+
# @see Git::Commands::Stash Git::Commands::Stash for usage examples
|
|
19
|
+
#
|
|
20
|
+
# @see https://git-scm.com/docs/git-stash git-stash documentation
|
|
21
|
+
#
|
|
22
|
+
# @api private
|
|
23
|
+
#
|
|
24
|
+
# @example Store a stash commit
|
|
25
|
+
# Git::Commands::Stash::Store.new(execution_context).call('abc123def456')
|
|
26
|
+
#
|
|
27
|
+
# @example Store with a custom message
|
|
28
|
+
# Git::Commands::Stash::Store.new(execution_context).call('abc123def456', message: 'WIP: feature')
|
|
29
|
+
#
|
|
30
|
+
class Store < Git::Commands::Base
|
|
31
|
+
arguments do
|
|
32
|
+
literal 'stash'
|
|
33
|
+
literal 'store'
|
|
34
|
+
value_option %i[message m]
|
|
35
|
+
flag_option %i[quiet q]
|
|
36
|
+
operand :commit, required: true
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# @!method call(*, **)
|
|
40
|
+
#
|
|
41
|
+
# Store a commit in the stash reflog
|
|
42
|
+
#
|
|
43
|
+
# @overload call(commit, **options)
|
|
44
|
+
#
|
|
45
|
+
# @param commit [String] the commit SHA to store in the stash (required)
|
|
46
|
+
#
|
|
47
|
+
# @param options [Hash] command options
|
|
48
|
+
#
|
|
49
|
+
# @option options [String] :message (nil) description for the reflog entry
|
|
50
|
+
#
|
|
51
|
+
# Alias: :m
|
|
52
|
+
#
|
|
53
|
+
# @option options [Boolean, nil] :quiet (nil) suppress output
|
|
54
|
+
#
|
|
55
|
+
# Alias: :q
|
|
56
|
+
#
|
|
57
|
+
# @return [Git::CommandLineResult] the result of calling `git stash store`
|
|
58
|
+
#
|
|
59
|
+
# @raise [Git::FailedError] if the commit is not a valid stash commit
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'stash/apply'
|
|
4
|
+
require_relative 'stash/branch'
|
|
5
|
+
require_relative 'stash/clear'
|
|
6
|
+
require_relative 'stash/create'
|
|
7
|
+
require_relative 'stash/drop'
|
|
8
|
+
require_relative 'stash/list'
|
|
9
|
+
require_relative 'stash/pop'
|
|
10
|
+
require_relative 'stash/push'
|
|
11
|
+
require_relative 'stash/show'
|
|
12
|
+
require_relative 'stash/store'
|
|
13
|
+
|
|
14
|
+
module Git
|
|
15
|
+
module Commands
|
|
16
|
+
# Commands for stashing working directory changes via `git stash`
|
|
17
|
+
#
|
|
18
|
+
# This module contains command classes split by stash operation:
|
|
19
|
+
#
|
|
20
|
+
# - {Stash::Push} — save changes to a new stash entry
|
|
21
|
+
# - {Stash::Pop} — apply the top stash and remove it from the stash list
|
|
22
|
+
# - {Stash::Apply} — apply a stash without removing it
|
|
23
|
+
# - {Stash::Drop} — remove a single stash entry
|
|
24
|
+
# - {Stash::Clear} — remove all stash entries
|
|
25
|
+
# - {Stash::List} — list stash entries
|
|
26
|
+
# - {Stash::Show} — show changes recorded in a stash entry
|
|
27
|
+
# - {Stash::Branch} — create a new branch from a stash entry
|
|
28
|
+
# - {Stash::Create} — create a stash object without storing it
|
|
29
|
+
# - {Stash::Store} — store a stash object created with `create`
|
|
30
|
+
#
|
|
31
|
+
# @api private
|
|
32
|
+
#
|
|
33
|
+
# @see https://git-scm.com/docs/git-stash git-stash documentation
|
|
34
|
+
#
|
|
35
|
+
module Stash
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|