git 1.19.1 → 5.5.0
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/.yardopts +5 -1
- data/AI_POLICY.md +24 -0
- data/CHANGELOG.md +689 -0
- data/CODE_OF_CONDUCT.md +25 -0
- data/CONTRIBUTING.md +1175 -97
- data/GOVERNANCE.md +106 -0
- data/LICENSE +1 -1
- data/MAINTAINERS.md +17 -4
- data/README.md +476 -320
- data/UPGRADING.md +1138 -0
- data/git.gemspec +124 -36
- data/lib/git/author.rb +39 -7
- data/lib/git/author_info.rb +66 -0
- data/lib/git/branch.rb +615 -65
- data/lib/git/branch_delete_failure.rb +34 -0
- data/lib/git/branch_delete_result.rb +66 -0
- data/lib/git/branch_info.rb +237 -0
- data/lib/git/branches.rb +167 -44
- data/lib/git/command_line/base.rb +247 -0
- data/lib/git/command_line/capturing.rb +308 -0
- data/lib/git/command_line/result.rb +88 -0
- data/lib/git/command_line/streaming.rb +236 -0
- data/lib/git/command_line.rb +52 -0
- data/lib/git/commands/add.rb +139 -0
- data/lib/git/commands/am/abort.rb +43 -0
- data/lib/git/commands/am/apply.rb +263 -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 +49 -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 +242 -0
- data/lib/git/commands/archive/list_formats.rb +46 -0
- data/lib/git/commands/archive.rb +145 -0
- data/lib/git/commands/arguments.rb +4521 -0
- data/lib/git/commands/base.rb +502 -0
- data/lib/git/commands/branch/copy.rb +102 -0
- data/lib/git/commands/branch/create.rb +177 -0
- data/lib/git/commands/branch/delete.rb +88 -0
- data/lib/git/commands/branch/list.rb +178 -0
- data/lib/git/commands/branch/move.rb +102 -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 +53 -0
- data/lib/git/commands/branch.rb +34 -0
- data/lib/git/commands/cat_file/batch.rb +385 -0
- data/lib/git/commands/cat_file/filtered.rb +105 -0
- data/lib/git/commands/cat_file/raw.rb +271 -0
- data/lib/git/commands/cat_file.rb +49 -0
- data/lib/git/commands/checkout/branch.rb +153 -0
- data/lib/git/commands/checkout/files.rb +116 -0
- data/lib/git/commands/checkout.rb +38 -0
- data/lib/git/commands/checkout_index.rb +106 -0
- data/lib/git/commands/clean.rb +102 -0
- data/lib/git/commands/clone.rb +241 -0
- data/lib/git/commands/commit.rb +273 -0
- data/lib/git/commands/commit_tree.rb +101 -0
- data/lib/git/commands/config_option_syntax/add.rb +86 -0
- data/lib/git/commands/config_option_syntax/get.rb +121 -0
- data/lib/git/commands/config_option_syntax/get_all.rb +118 -0
- data/lib/git/commands/config_option_syntax/get_color.rb +95 -0
- data/lib/git/commands/config_option_syntax/get_color_bool.rb +96 -0
- data/lib/git/commands/config_option_syntax/get_regexp.rb +119 -0
- data/lib/git/commands/config_option_syntax/get_urlmatch.rb +111 -0
- data/lib/git/commands/config_option_syntax/list.rb +111 -0
- data/lib/git/commands/config_option_syntax/remove_section.rb +79 -0
- data/lib/git/commands/config_option_syntax/rename_section.rb +83 -0
- data/lib/git/commands/config_option_syntax/replace_all.rb +109 -0
- data/lib/git/commands/config_option_syntax/set.rb +119 -0
- data/lib/git/commands/config_option_syntax/unset.rb +92 -0
- data/lib/git/commands/config_option_syntax/unset_all.rb +94 -0
- data/lib/git/commands/config_option_syntax.rb +56 -0
- data/lib/git/commands/describe.rb +156 -0
- data/lib/git/commands/diff.rb +657 -0
- data/lib/git/commands/diff_files.rb +519 -0
- data/lib/git/commands/diff_index.rb +499 -0
- data/lib/git/commands/fetch.rb +354 -0
- data/lib/git/commands/fsck.rb +138 -0
- data/lib/git/commands/gc.rb +134 -0
- data/lib/git/commands/grep.rb +339 -0
- data/lib/git/commands/init.rb +101 -0
- data/lib/git/commands/log.rb +634 -0
- data/lib/git/commands/ls_files.rb +195 -0
- data/lib/git/commands/ls_remote.rb +161 -0
- data/lib/git/commands/ls_tree.rb +135 -0
- data/lib/git/commands/maintenance/register.rb +77 -0
- data/lib/git/commands/maintenance/run.rb +109 -0
- data/lib/git/commands/maintenance/start.rb +71 -0
- data/lib/git/commands/maintenance/stop.rb +60 -0
- data/lib/git/commands/maintenance/unregister.rb +84 -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 +250 -0
- data/lib/git/commands/merge.rb +28 -0
- data/lib/git/commands/merge_base.rb +91 -0
- data/lib/git/commands/mv.rb +82 -0
- data/lib/git/commands/name_rev.rb +119 -0
- data/lib/git/commands/pull.rb +382 -0
- data/lib/git/commands/push.rb +251 -0
- data/lib/git/commands/read_tree.rb +154 -0
- data/lib/git/commands/remote/add.rb +96 -0
- data/lib/git/commands/remote/get_url.rb +68 -0
- data/lib/git/commands/remote/list.rb +56 -0
- data/lib/git/commands/remote/prune.rb +63 -0
- data/lib/git/commands/remote/remove.rb +52 -0
- data/lib/git/commands/remote/rename.rb +76 -0
- data/lib/git/commands/remote/set_branches.rb +70 -0
- data/lib/git/commands/remote/set_head.rb +89 -0
- data/lib/git/commands/remote/set_url.rb +78 -0
- data/lib/git/commands/remote/set_url_add.rb +70 -0
- data/lib/git/commands/remote/set_url_delete.rb +71 -0
- data/lib/git/commands/remote/show.rb +77 -0
- data/lib/git/commands/remote/update.rb +79 -0
- data/lib/git/commands/remote.rb +42 -0
- data/lib/git/commands/repack.rb +281 -0
- data/lib/git/commands/reset.rb +154 -0
- data/lib/git/commands/rev_parse.rb +304 -0
- data/lib/git/commands/revert/abort.rb +45 -0
- data/lib/git/commands/revert/continue.rb +62 -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 +158 -0
- data/lib/git/commands/revert.rb +29 -0
- data/lib/git/commands/rm.rb +113 -0
- data/lib/git/commands/show.rb +632 -0
- data/lib/git/commands/show_ref/exclude_existing.rb +119 -0
- data/lib/git/commands/show_ref/exists.rb +80 -0
- data/lib/git/commands/show_ref/list.rb +149 -0
- data/lib/git/commands/show_ref/verify.rb +122 -0
- data/lib/git/commands/show_ref.rb +42 -0
- data/lib/git/commands/stash/apply.rb +81 -0
- data/lib/git/commands/stash/branch.rb +67 -0
- data/lib/git/commands/stash/clear.rb +43 -0
- data/lib/git/commands/stash/create.rb +60 -0
- data/lib/git/commands/stash/drop.rb +73 -0
- data/lib/git/commands/stash/list.rb +43 -0
- data/lib/git/commands/stash/pop.rb +87 -0
- data/lib/git/commands/stash/push.rb +112 -0
- data/lib/git/commands/stash/show.rb +158 -0
- data/lib/git/commands/stash/store.rb +72 -0
- data/lib/git/commands/stash.rb +38 -0
- data/lib/git/commands/status.rb +174 -0
- data/lib/git/commands/symbolic_ref/delete.rb +72 -0
- data/lib/git/commands/symbolic_ref/read.rb +99 -0
- data/lib/git/commands/symbolic_ref/update.rb +79 -0
- data/lib/git/commands/symbolic_ref.rb +38 -0
- data/lib/git/commands/tag/create.rb +142 -0
- data/lib/git/commands/tag/delete.rb +57 -0
- data/lib/git/commands/tag/list.rb +146 -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 +145 -0
- data/lib/git/commands/update_ref/delete.rb +90 -0
- data/lib/git/commands/update_ref/update.rb +103 -0
- data/lib/git/commands/update_ref.rb +42 -0
- data/lib/git/commands/version.rb +60 -0
- data/lib/git/commands/worktree/add.rb +139 -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 +88 -0
- data/lib/git/config.rb +72 -5
- data/lib/git/config_entry_info.rb +106 -0
- data/lib/git/configuring.rb +795 -0
- data/lib/git/detached_head_info.rb +57 -0
- data/lib/git/diff.rb +437 -86
- data/lib/git/diff_file_numstat_info.rb +31 -0
- data/lib/git/diff_file_patch_info.rb +136 -0
- data/lib/git/diff_file_raw_info.rb +129 -0
- data/lib/git/diff_info.rb +162 -0
- data/lib/git/diff_path_status.rb +107 -0
- data/lib/git/diff_result.rb +34 -0
- data/lib/git/diff_stats.rb +111 -0
- data/lib/git/dirstat_info.rb +102 -0
- data/lib/git/encoding_utils.rb +32 -1
- data/lib/git/errors.rb +285 -0
- data/lib/git/escaped_path.rb +57 -5
- data/lib/git/execution_context/global.rb +31 -0
- data/lib/git/execution_context/repository.rb +151 -0
- data/lib/git/execution_context.rb +559 -0
- data/lib/git/factories.rb +813 -0
- data/lib/git/file_ref.rb +77 -0
- data/lib/git/fsck_object.rb +56 -0
- data/lib/git/fsck_result.rb +132 -0
- data/lib/git/log.rb +306 -90
- data/lib/git/object.rb +563 -141
- data/lib/git/parsers/branch.rb +240 -0
- data/lib/git/parsers/cat_file.rb +111 -0
- data/lib/git/parsers/config_entry.rb +110 -0
- data/lib/git/parsers/diff.rb +792 -0
- data/lib/git/parsers/fsck.rb +144 -0
- data/lib/git/parsers/grep.rb +42 -0
- data/lib/git/parsers/ls_remote.rb +79 -0
- data/lib/git/parsers/ls_tree.rb +58 -0
- data/lib/git/parsers/remote.rb +162 -0
- data/lib/git/parsers/stash.rb +292 -0
- data/lib/git/parsers/status.rb +251 -0
- data/lib/git/parsers/tag.rb +341 -0
- data/lib/git/parsers/worktree.rb +185 -0
- data/lib/git/path_resolver.rb +206 -0
- data/lib/git/remote.rb +165 -12
- data/lib/git/remote_info.rb +203 -0
- data/lib/git/repository/branching.rb +964 -0
- data/lib/git/repository/committing.rb +246 -0
- data/lib/git/repository/context_helpers.rb +293 -0
- data/lib/git/repository/diffing.rb +785 -0
- data/lib/git/repository/inspecting.rb +252 -0
- data/lib/git/repository/logging.rb +410 -0
- data/lib/git/repository/maintenance.rb +65 -0
- data/lib/git/repository/merging.rb +451 -0
- data/lib/git/repository/object_operations.rb +1551 -0
- data/lib/git/repository/remote_operations.rb +984 -0
- data/lib/git/repository/shared_private.rb +120 -0
- data/lib/git/repository/staging.rb +587 -0
- data/lib/git/repository/stashing.rb +623 -0
- data/lib/git/repository/status_operations.rb +249 -0
- data/lib/git/repository/worktree_operations.rb +339 -0
- data/lib/git/repository.rb +484 -2
- data/lib/git/stash.rb +109 -12
- data/lib/git/stash_info.rb +102 -0
- data/lib/git/stashes.rb +169 -26
- data/lib/git/status.rb +308 -122
- data/lib/git/status_file_info.rb +258 -0
- data/lib/git/status_info.rb +189 -0
- data/lib/git/tag_delete_failure.rb +34 -0
- data/lib/git/tag_delete_result.rb +66 -0
- data/lib/git/tag_info.rb +99 -0
- data/lib/git/url.rb +15 -8
- data/lib/git/version.rb +113 -2
- data/lib/git/version_constraint.rb +85 -0
- data/lib/git/worktree.rb +150 -8
- data/lib/git/worktree_info.rb +128 -0
- data/lib/git/worktrees.rb +118 -13
- data/lib/git.rb +632 -234
- metadata +369 -54
- data/.github/stale.yml +0 -25
- data/.github/workflows/continuous_integration.yml +0 -49
- data/.gitignore +0 -10
- data/Dockerfile.changelog-rs +0 -12
- data/Gemfile +0 -5
- data/ISSUE_TEMPLATE.md +0 -15
- data/PULL_REQUEST_TEMPLATE.md +0 -9
- data/RELEASING.md +0 -70
- data/Rakefile +0 -60
- data/lib/git/base/factory.rb +0 -99
- data/lib/git/base.rb +0 -711
- data/lib/git/command_line_result.rb +0 -86
- data/lib/git/failed_error.rb +0 -53
- data/lib/git/git_execute_error.rb +0 -7
- data/lib/git/index.rb +0 -5
- data/lib/git/lib.rb +0 -1328
- data/lib/git/path.rb +0 -31
- data/lib/git/signaled_error.rb +0 -50
- data/lib/git/working_directory.rb +0 -4
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'time'
|
|
4
|
+
|
|
5
|
+
require 'git/author_info'
|
|
6
|
+
|
|
7
|
+
module Git
|
|
8
|
+
# Immutable value object representing stash entry information
|
|
9
|
+
#
|
|
10
|
+
# StashInfo encapsulates the parsed data from `git stash list` output.
|
|
11
|
+
# Each entry contains comprehensive information about the stash including
|
|
12
|
+
# its index, reference name, commit SHA, branch, message, and the author and
|
|
13
|
+
# committer identities.
|
|
14
|
+
#
|
|
15
|
+
# The author and committer are nested {Git::AuthorInfo} values. Their `date`
|
|
16
|
+
# is a `Time` parsed from git's ISO 8601 output, not an ISO 8601 string.
|
|
17
|
+
#
|
|
18
|
+
# @example Create a StashInfo from parsed stash list output
|
|
19
|
+
# info = Git::StashInfo.new(
|
|
20
|
+
# index: 0,
|
|
21
|
+
# name: 'stash@{0}',
|
|
22
|
+
# oid: 'abc123def456789...',
|
|
23
|
+
# short_oid: 'abc123d',
|
|
24
|
+
# branch: 'main',
|
|
25
|
+
# message: 'WIP on main: abc123 Initial commit',
|
|
26
|
+
# author: Git::AuthorInfo.new(
|
|
27
|
+
# name: 'Jane Doe',
|
|
28
|
+
# email: 'jane@example.com',
|
|
29
|
+
# date: Time.iso8601('2026-01-24T10:30:00-08:00')
|
|
30
|
+
# ),
|
|
31
|
+
# committer: Git::AuthorInfo.new(
|
|
32
|
+
# name: 'Jane Doe',
|
|
33
|
+
# email: 'jane@example.com',
|
|
34
|
+
# date: Time.iso8601('2026-01-24T10:30:00-08:00')
|
|
35
|
+
# )
|
|
36
|
+
# )
|
|
37
|
+
#
|
|
38
|
+
# info.index # => 0
|
|
39
|
+
# info.name # => 'stash@{0}'
|
|
40
|
+
# info.oid # => 'abc123def456789...'
|
|
41
|
+
# info.short_oid # => 'abc123d'
|
|
42
|
+
# info.branch # => 'main'
|
|
43
|
+
# info.message # => 'WIP on main: abc123 Initial commit'
|
|
44
|
+
# info.author.name # => 'Jane Doe'
|
|
45
|
+
# info.author.email # => 'jane@example.com'
|
|
46
|
+
# info.author.date # => 2026-01-24 10:30:00 -0800
|
|
47
|
+
# info.committer.name # => 'Jane Doe'
|
|
48
|
+
#
|
|
49
|
+
# @see Git::AuthorInfo for the nested author and committer identities
|
|
50
|
+
#
|
|
51
|
+
# @api public
|
|
52
|
+
#
|
|
53
|
+
# @!attribute [r] index
|
|
54
|
+
# @return [Integer] the stash index (0, 1, 2, ...)
|
|
55
|
+
#
|
|
56
|
+
# @!attribute [r] name
|
|
57
|
+
# @return [String] the stash reference name (e.g., 'stash@\\{0\\}')
|
|
58
|
+
#
|
|
59
|
+
# @!attribute [r] oid
|
|
60
|
+
# @return [String] the full 40-character object identifier of the stash
|
|
61
|
+
#
|
|
62
|
+
# @!attribute [r] short_oid
|
|
63
|
+
# @return [String] the abbreviated object identifier (typically 7 characters)
|
|
64
|
+
#
|
|
65
|
+
# @!attribute [r] branch
|
|
66
|
+
# @return [String, nil] the branch name where the stash was created,
|
|
67
|
+
# or nil for custom stash messages
|
|
68
|
+
#
|
|
69
|
+
# @!attribute [r] message
|
|
70
|
+
# @return [String] the stash message (e.g., 'WIP on main: abc123 commit msg')
|
|
71
|
+
#
|
|
72
|
+
# @!attribute [r] author
|
|
73
|
+
# The identity of the stash author; the nested `date` is a `Time`.
|
|
74
|
+
#
|
|
75
|
+
# @return [Git::AuthorInfo] the author of the stash commit
|
|
76
|
+
#
|
|
77
|
+
# @!attribute [r] committer
|
|
78
|
+
# The identity of the stash committer; the nested `date` is a `Time`.
|
|
79
|
+
#
|
|
80
|
+
# @return [Git::AuthorInfo] the committer of the stash commit
|
|
81
|
+
#
|
|
82
|
+
StashInfo = Data.define(
|
|
83
|
+
:index,
|
|
84
|
+
:name,
|
|
85
|
+
:oid,
|
|
86
|
+
:short_oid,
|
|
87
|
+
:branch,
|
|
88
|
+
:message,
|
|
89
|
+
:author,
|
|
90
|
+
:committer
|
|
91
|
+
) do
|
|
92
|
+
# Returns the stash reference name
|
|
93
|
+
#
|
|
94
|
+
# @example Convert to string
|
|
95
|
+
# info.to_s # => 'stash@{0}'
|
|
96
|
+
#
|
|
97
|
+
# @return [String] the stash name (e.g., 'stash@\\{0}')
|
|
98
|
+
def to_s
|
|
99
|
+
name
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
data/lib/git/stashes.rb
CHANGED
|
@@ -1,55 +1,198 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Git
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
+
# Collection of stash entries for a Git repository
|
|
5
|
+
#
|
|
6
|
+
# This class is deprecated and will be removed in v6.0.0. Use the
|
|
7
|
+
# {Git::Repository} stash methods and {Git::StashInfo} instead:
|
|
8
|
+
# {Git::Repository#stash_infos} replaces the collection, and
|
|
9
|
+
# {Git::Repository#stash_push}, {Git::Repository#stash_apply}, and
|
|
10
|
+
# {Git::Repository#stash_clear} replace {#save}, {#apply}, and {#clear}.
|
|
11
|
+
#
|
|
12
|
+
# @example Iterate over stash entries (deprecated)
|
|
13
|
+
# git.stashes.each { |s| puts s.message }
|
|
14
|
+
#
|
|
15
|
+
# @example The replacement
|
|
16
|
+
# repo.stash_infos.each { |info| puts info.message }
|
|
17
|
+
# repo.stash_infos.size #=> 2
|
|
18
|
+
# repo.stash_apply
|
|
19
|
+
#
|
|
20
|
+
# @deprecated Use {Git::Repository#stash_infos} and {Git::StashInfo} instead
|
|
21
|
+
#
|
|
22
|
+
# @see Git::Repository#stash_infos
|
|
23
|
+
#
|
|
24
|
+
# @api public
|
|
25
|
+
#
|
|
4
26
|
class Stashes
|
|
5
27
|
include Enumerable
|
|
6
|
-
|
|
28
|
+
|
|
29
|
+
# Initialize the stashes collection
|
|
30
|
+
#
|
|
31
|
+
# Loads all existing stash entries from the repository at construction time.
|
|
32
|
+
# Emits one deprecation warning per object.
|
|
33
|
+
#
|
|
34
|
+
# @example Load stashes for a repository
|
|
35
|
+
# stashes = Git::Stashes.new(repo)
|
|
36
|
+
# stashes.size #=> 2
|
|
37
|
+
#
|
|
38
|
+
# @param base [Git::Repository] the git repository
|
|
39
|
+
#
|
|
40
|
+
# @return [void]
|
|
41
|
+
#
|
|
42
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
43
|
+
#
|
|
44
|
+
# @deprecated Use {Git::Repository#stash_infos} and {Git::StashInfo} instead
|
|
45
|
+
#
|
|
7
46
|
def initialize(base)
|
|
47
|
+
Git::Deprecation.warn(
|
|
48
|
+
'Git::Stashes is deprecated and will be removed in v6.0.0. ' \
|
|
49
|
+
'Use the Git::Repository stash methods (stash_infos, stash_push, stash_apply, stash_clear) ' \
|
|
50
|
+
'and Git::StashInfo instead.'
|
|
51
|
+
)
|
|
8
52
|
@stashes = []
|
|
9
|
-
|
|
10
53
|
@base = base
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
end
|
|
54
|
+
# stashes_all and Git::Stash are deprecated too; silence them so one
|
|
55
|
+
# Git::Stashes.new emits one warning
|
|
56
|
+
Git::Deprecation.silence { load_stashes }
|
|
15
57
|
end
|
|
16
58
|
|
|
59
|
+
# Returns all stash entries as an array of index and message pairs
|
|
60
|
+
#
|
|
61
|
+
# Entries are listed in oldest-first order matching {Git::Repository#stashes_all}.
|
|
62
|
+
#
|
|
63
|
+
# @example List all stash entries
|
|
64
|
+
# git.stashes.all #=> [[0, "testing-stash-all"], [1, "another-stash"]]
|
|
17
65
|
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
66
|
+
# @return [Array<Array(Integer, String)>] array of `[index, message]` pairs where
|
|
67
|
+
# index 0 is the oldest stash
|
|
68
|
+
#
|
|
69
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
20
70
|
#
|
|
21
|
-
# @example Returns Array of items that have been stashed
|
|
22
|
-
# .all - [0, "testing-stash-all"]]
|
|
23
|
-
# @return [Array]
|
|
24
71
|
def all
|
|
25
|
-
|
|
72
|
+
# stashes_all is deprecated too; silence it so this call emits no second warning
|
|
73
|
+
Git::Deprecation.silence { stash_repository.stashes_all }
|
|
26
74
|
end
|
|
27
|
-
|
|
75
|
+
|
|
76
|
+
# Saves the current working-directory state to a new stash entry
|
|
77
|
+
#
|
|
78
|
+
# @example Save current changes to the stash
|
|
79
|
+
# git.stashes.save('WIP: feature work')
|
|
80
|
+
# git.stashes.size #=> 1
|
|
81
|
+
#
|
|
82
|
+
# @param message [String] the stash message
|
|
83
|
+
#
|
|
84
|
+
# @return [void]
|
|
85
|
+
#
|
|
86
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
87
|
+
#
|
|
28
88
|
def save(message)
|
|
29
|
-
|
|
89
|
+
# Git::Stash is deprecated too; silence it so this call emits no second warning
|
|
90
|
+
s = Git::Deprecation.silence { Git::Stash.new(@base, message) }
|
|
30
91
|
@stashes.unshift(s) if s.saved?
|
|
31
92
|
end
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
93
|
+
|
|
94
|
+
# Applies a stash entry to the working directory
|
|
95
|
+
#
|
|
96
|
+
# @example Apply the most recent stash
|
|
97
|
+
# git.stashes.apply
|
|
98
|
+
#
|
|
99
|
+
# @example Apply a specific stash by index
|
|
100
|
+
# git.stashes.apply(1)
|
|
101
|
+
#
|
|
102
|
+
# @param index [Integer, nil] the stash index to apply (default: latest)
|
|
103
|
+
#
|
|
104
|
+
# @return [String] the output from the git stash apply command
|
|
105
|
+
#
|
|
106
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
107
|
+
#
|
|
108
|
+
def apply(index = nil)
|
|
109
|
+
stash_repository.stash_apply(index)
|
|
35
110
|
end
|
|
36
|
-
|
|
111
|
+
|
|
112
|
+
# Removes all stash entries
|
|
113
|
+
#
|
|
114
|
+
# @example Clear all stashes
|
|
115
|
+
# git.stashes.clear
|
|
116
|
+
# git.stashes.size #=> 0
|
|
117
|
+
#
|
|
118
|
+
# @return [void]
|
|
119
|
+
#
|
|
120
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
121
|
+
#
|
|
37
122
|
def clear
|
|
38
|
-
|
|
123
|
+
stash_repository.stash_clear
|
|
39
124
|
@stashes = []
|
|
125
|
+
nil
|
|
40
126
|
end
|
|
41
127
|
|
|
128
|
+
# Returns the number of stash entries
|
|
129
|
+
#
|
|
130
|
+
# @example Check how many stashes exist
|
|
131
|
+
# git.stashes.size #=> 2
|
|
132
|
+
#
|
|
133
|
+
# @return [Integer] the number of stashes
|
|
134
|
+
#
|
|
42
135
|
def size
|
|
43
136
|
@stashes.size
|
|
44
137
|
end
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
138
|
+
|
|
139
|
+
# Iterates over each stash entry in newest-first order
|
|
140
|
+
#
|
|
141
|
+
# @example Iterate over stashes
|
|
142
|
+
# git.stashes.each { |s| puts s.message }
|
|
143
|
+
#
|
|
144
|
+
# @overload each
|
|
145
|
+
#
|
|
146
|
+
# @return [Enumerator<Git::Stash>] an enumerator over stash entries
|
|
147
|
+
#
|
|
148
|
+
# @overload each(&block)
|
|
149
|
+
#
|
|
150
|
+
# @yield [stash] each stash entry
|
|
151
|
+
#
|
|
152
|
+
# @yieldparam stash [Git::Stash] the current stash entry
|
|
153
|
+
#
|
|
154
|
+
# @yieldreturn [void]
|
|
155
|
+
#
|
|
156
|
+
# @return [Array<Git::Stash>] the stash entries
|
|
157
|
+
#
|
|
158
|
+
def each(&)
|
|
159
|
+
@stashes.each(&)
|
|
48
160
|
end
|
|
49
|
-
|
|
161
|
+
|
|
162
|
+
# Returns the stash entry at the given index
|
|
163
|
+
#
|
|
164
|
+
# Stashes are stored in newest-first order; index 0 is the most recent stash.
|
|
165
|
+
#
|
|
166
|
+
# @example Access the most recent stash
|
|
167
|
+
# git.stashes[0].message #=> "WIP: feature work"
|
|
168
|
+
#
|
|
169
|
+
# @param index [Integer, #to_i] the stash index (0 = most recent)
|
|
170
|
+
#
|
|
171
|
+
# @return [Git::Stash, nil] the stash entry, or `nil` if the index is out of bounds
|
|
172
|
+
#
|
|
50
173
|
def [](index)
|
|
51
174
|
@stashes[index.to_i]
|
|
52
175
|
end
|
|
53
|
-
|
|
176
|
+
|
|
177
|
+
private
|
|
178
|
+
|
|
179
|
+
# Wraps every entry from the repository in a Git::Stash, newest first
|
|
180
|
+
#
|
|
181
|
+
# @return [void]
|
|
182
|
+
#
|
|
183
|
+
def load_stashes
|
|
184
|
+
stash_repository.stashes_all.each do |stash|
|
|
185
|
+
message = stash[1]
|
|
186
|
+
@stashes.unshift(Git::Stash.new(@base, message, existing: true))
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Returns the facade interface for stash operations
|
|
191
|
+
#
|
|
192
|
+
# @return [Git::Repository]
|
|
193
|
+
#
|
|
194
|
+
def stash_repository
|
|
195
|
+
@base
|
|
196
|
+
end
|
|
54
197
|
end
|
|
55
198
|
end
|