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,140 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/worktree/management_base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Worktree
|
|
8
|
+
# Creates a new linked worktree
|
|
9
|
+
#
|
|
10
|
+
# @example Add a worktree at a path (auto-creates a branch)
|
|
11
|
+
# Git::Commands::Worktree::Add.new(execution_context).call('/tmp/feature')
|
|
12
|
+
#
|
|
13
|
+
# @example Add a worktree and check out an existing branch
|
|
14
|
+
# Git::Commands::Worktree::Add.new(execution_context).call('/tmp/hotfix', 'main')
|
|
15
|
+
#
|
|
16
|
+
# @example Add a worktree with a new branch
|
|
17
|
+
# Git::Commands::Worktree::Add.new(execution_context).call('/tmp/feat', b: 'feature/new')
|
|
18
|
+
#
|
|
19
|
+
# @example Add a detached-HEAD worktree locked at creation
|
|
20
|
+
# Git::Commands::Worktree::Add.new(execution_context).call('/tmp/exp', detach: true, lock: true)
|
|
21
|
+
#
|
|
22
|
+
# @note `arguments` block audited against
|
|
23
|
+
# https://git-scm.com/docs/git-worktree/2.54.0
|
|
24
|
+
#
|
|
25
|
+
# @see Git::Commands::Worktree Git::Commands::Worktree for the full sub-command list
|
|
26
|
+
#
|
|
27
|
+
# @see https://git-scm.com/docs/git-worktree git-worktree documentation
|
|
28
|
+
#
|
|
29
|
+
# @api private
|
|
30
|
+
#
|
|
31
|
+
class Add < ManagementBase
|
|
32
|
+
arguments do
|
|
33
|
+
literal 'worktree'
|
|
34
|
+
literal 'add'
|
|
35
|
+
flag_option %i[force f], max_times: 2
|
|
36
|
+
value_option :b
|
|
37
|
+
value_option :B
|
|
38
|
+
flag_option %i[detach d]
|
|
39
|
+
flag_option :checkout, negatable: true
|
|
40
|
+
flag_option :guess_remote, negatable: true
|
|
41
|
+
flag_option :relative_paths, negatable: true
|
|
42
|
+
flag_option :track, negatable: true
|
|
43
|
+
flag_option :lock
|
|
44
|
+
flag_option :orphan
|
|
45
|
+
flag_option %i[quiet q]
|
|
46
|
+
value_option :reason
|
|
47
|
+
end_of_options
|
|
48
|
+
operand :path, required: true
|
|
49
|
+
operand :commit_ish
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# @!method call(*, **)
|
|
53
|
+
#
|
|
54
|
+
# @overload call(path, commit_ish = nil, **options)
|
|
55
|
+
#
|
|
56
|
+
# Create a new linked worktree and check out `commit_ish` into it
|
|
57
|
+
#
|
|
58
|
+
# @param path [String] filesystem path for the new worktree
|
|
59
|
+
#
|
|
60
|
+
# @param commit_ish [String, nil] (nil) branch, tag, or commit to check out
|
|
61
|
+
#
|
|
62
|
+
# When omitted, git creates a new branch named after the final path
|
|
63
|
+
# component and checks it out.
|
|
64
|
+
#
|
|
65
|
+
# @param options [Hash] command options
|
|
66
|
+
#
|
|
67
|
+
# @option options [Boolean, Integer, nil] :force (nil) override safety guards
|
|
68
|
+
#
|
|
69
|
+
# Pass `true` or `1` to emit `--force` once. Pass `2` to emit
|
|
70
|
+
# `--force --force`, which also allows adding worktrees for locked branches.
|
|
71
|
+
#
|
|
72
|
+
# Alias: :f
|
|
73
|
+
#
|
|
74
|
+
# @option options [String] :b (nil) create a new branch with this name
|
|
75
|
+
# and check it out
|
|
76
|
+
#
|
|
77
|
+
# @option options [String] :B (nil) create or reset a branch with this
|
|
78
|
+
# name and check it out
|
|
79
|
+
#
|
|
80
|
+
# @option options [Boolean, nil] :detach (nil) check out in
|
|
81
|
+
# detached-HEAD state
|
|
82
|
+
#
|
|
83
|
+
# Alias: :d
|
|
84
|
+
#
|
|
85
|
+
# @option options [Boolean, nil] :checkout (nil) control whether the working
|
|
86
|
+
# tree is checked out after creation (`--checkout`)
|
|
87
|
+
#
|
|
88
|
+
# @option options [Boolean, nil] :no_checkout (nil) suppress the initial
|
|
89
|
+
# checkout after worktree creation (`--no-checkout`)
|
|
90
|
+
#
|
|
91
|
+
# @option options [Boolean, nil] :guess_remote (nil) base new branch on a
|
|
92
|
+
# matching remote-tracking branch (`--guess-remote`)
|
|
93
|
+
#
|
|
94
|
+
# Applied when no `commit_ish` argument is provided.
|
|
95
|
+
#
|
|
96
|
+
# @option options [Boolean, nil] :no_guess_remote (nil) disable guess-remote
|
|
97
|
+
# behavior (`--no-guess-remote`)
|
|
98
|
+
#
|
|
99
|
+
# @option options [Boolean, nil] :relative_paths (nil) link worktrees using
|
|
100
|
+
# relative paths (`--relative-paths`)
|
|
101
|
+
#
|
|
102
|
+
# Overrides the `worktree.useRelativePaths` config option.
|
|
103
|
+
#
|
|
104
|
+
# @option options [Boolean, nil] :no_relative_paths (nil) use absolute paths
|
|
105
|
+
# for worktree links (`--no-relative-paths`)
|
|
106
|
+
#
|
|
107
|
+
# Overrides the `worktree.useRelativePaths` config option.
|
|
108
|
+
#
|
|
109
|
+
# @option options [Boolean, nil] :track (nil) mark the upstream branch for
|
|
110
|
+
# tracking (`--track`)
|
|
111
|
+
#
|
|
112
|
+
# @option options [Boolean, nil] :no_track (nil) do not mark the upstream
|
|
113
|
+
# branch for tracking (`--no-track`)
|
|
114
|
+
#
|
|
115
|
+
# @option options [Boolean, nil] :lock (nil) lock the worktree immediately
|
|
116
|
+
# after creation
|
|
117
|
+
#
|
|
118
|
+
# @option options [Boolean, nil] :orphan (nil) create an empty worktree
|
|
119
|
+
# associated with a new unborn branch
|
|
120
|
+
#
|
|
121
|
+
# @option options [Boolean, nil] :quiet (nil) suppress informational messages
|
|
122
|
+
#
|
|
123
|
+
# Alias: :q
|
|
124
|
+
#
|
|
125
|
+
# @option options [String] :reason (nil) explanation for why the worktree
|
|
126
|
+
# is locked
|
|
127
|
+
#
|
|
128
|
+
# Only meaningful when used with `:lock`.
|
|
129
|
+
#
|
|
130
|
+
# @return [Git::CommandLineResult] the result of calling `git worktree add`
|
|
131
|
+
#
|
|
132
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
133
|
+
#
|
|
134
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
135
|
+
#
|
|
136
|
+
# @api public
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Worktree
|
|
8
|
+
# Lists all worktrees attached to the repository
|
|
9
|
+
#
|
|
10
|
+
# @example List all worktrees in porcelain format
|
|
11
|
+
# Git::Commands::Worktree::List.new(execution_context).call(porcelain: true)
|
|
12
|
+
#
|
|
13
|
+
# @note `arguments` block audited against
|
|
14
|
+
# https://git-scm.com/docs/git-worktree/2.54.0
|
|
15
|
+
#
|
|
16
|
+
# @see Git::Commands::Worktree Git::Commands::Worktree for the full sub-command list
|
|
17
|
+
#
|
|
18
|
+
# @see https://git-scm.com/docs/git-worktree git-worktree documentation
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
#
|
|
22
|
+
class List < Git::Commands::Base
|
|
23
|
+
arguments do
|
|
24
|
+
literal 'worktree'
|
|
25
|
+
literal 'list'
|
|
26
|
+
flag_option :porcelain
|
|
27
|
+
flag_option :z
|
|
28
|
+
flag_option %i[verbose v]
|
|
29
|
+
value_option :expire
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# @!method call(*, **)
|
|
33
|
+
#
|
|
34
|
+
# @overload call(**options)
|
|
35
|
+
#
|
|
36
|
+
# List all worktrees attached to the repository
|
|
37
|
+
#
|
|
38
|
+
# @param options [Hash] command options
|
|
39
|
+
#
|
|
40
|
+
# @option options [Boolean, nil] :porcelain (nil) produce machine-readable
|
|
41
|
+
# output
|
|
42
|
+
#
|
|
43
|
+
# @option options [Boolean, nil] :z (nil) terminate output lines with NUL
|
|
44
|
+
# bytes (use with `:porcelain`)
|
|
45
|
+
#
|
|
46
|
+
# @option options [Boolean, nil] :verbose (nil) output additional information
|
|
47
|
+
# about worktrees
|
|
48
|
+
#
|
|
49
|
+
# Alias: :v
|
|
50
|
+
#
|
|
51
|
+
# @option options [String] :expire (nil) annotate missing worktrees as
|
|
52
|
+
# prunable if older than this time expression
|
|
53
|
+
#
|
|
54
|
+
# @return [Git::CommandLineResult] the result of calling `git worktree list`
|
|
55
|
+
#
|
|
56
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
57
|
+
#
|
|
58
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
59
|
+
#
|
|
60
|
+
# @api public
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/worktree/management_base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Worktree
|
|
8
|
+
# Locks a worktree to prevent it from being pruned
|
|
9
|
+
#
|
|
10
|
+
# @example Lock a worktree
|
|
11
|
+
# Git::Commands::Worktree::Lock.new(execution_context).call('/tmp/feature')
|
|
12
|
+
#
|
|
13
|
+
# @example Lock with a reason message
|
|
14
|
+
# Git::Commands::Worktree::Lock.new(execution_context).call('/tmp/feature', reason: 'on NFS share')
|
|
15
|
+
#
|
|
16
|
+
# @note `arguments` block audited against
|
|
17
|
+
# https://git-scm.com/docs/git-worktree/2.54.0
|
|
18
|
+
#
|
|
19
|
+
# @see Git::Commands::Worktree Git::Commands::Worktree for the full sub-command list
|
|
20
|
+
#
|
|
21
|
+
# @see https://git-scm.com/docs/git-worktree git-worktree documentation
|
|
22
|
+
#
|
|
23
|
+
# @api private
|
|
24
|
+
#
|
|
25
|
+
class Lock < ManagementBase
|
|
26
|
+
arguments do
|
|
27
|
+
literal 'worktree'
|
|
28
|
+
literal 'lock'
|
|
29
|
+
value_option :reason
|
|
30
|
+
end_of_options
|
|
31
|
+
operand :worktree, required: true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @!method call(*, **)
|
|
35
|
+
#
|
|
36
|
+
# @overload call(worktree, **options)
|
|
37
|
+
#
|
|
38
|
+
# Lock a worktree to prevent it from being pruned
|
|
39
|
+
#
|
|
40
|
+
# @param worktree [String] path or unique suffix identifying the
|
|
41
|
+
# worktree to lock
|
|
42
|
+
#
|
|
43
|
+
# @param options [Hash] command options
|
|
44
|
+
#
|
|
45
|
+
# @option options [String] :reason (nil) human-readable explanation stored
|
|
46
|
+
# alongside the lock
|
|
47
|
+
#
|
|
48
|
+
# @return [Git::CommandLineResult] the result of calling `git worktree lock`
|
|
49
|
+
#
|
|
50
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
51
|
+
#
|
|
52
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
53
|
+
#
|
|
54
|
+
# @api public
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Worktree
|
|
8
|
+
# Shared base class for worktree management subcommands
|
|
9
|
+
#
|
|
10
|
+
# Overrides the `env` method from {Git::Commands::Base} to unconditionally
|
|
11
|
+
# unset `GIT_INDEX_FILE` in the subprocess environment. Git worktrees
|
|
12
|
+
# maintain their own index files; passing a `GIT_INDEX_FILE` override when
|
|
13
|
+
# running management commands causes silent corruption of both the main
|
|
14
|
+
# worktree and linked worktree indexes.
|
|
15
|
+
#
|
|
16
|
+
# All worktree management subcommands ({Add}, {Lock}, {Move}, {Prune},
|
|
17
|
+
# {Remove}, {Repair}, {Unlock}) inherit from this class. The read-only
|
|
18
|
+
# {List} subcommand uses {Git::Commands::Base} directly.
|
|
19
|
+
#
|
|
20
|
+
# @example Defining a new worktree management subcommand
|
|
21
|
+
# class Archive < Git::Commands::Worktree::ManagementBase
|
|
22
|
+
# arguments do
|
|
23
|
+
# literal 'worktree'
|
|
24
|
+
# literal 'archive'
|
|
25
|
+
# operand :path, required: true
|
|
26
|
+
# end
|
|
27
|
+
# end
|
|
28
|
+
#
|
|
29
|
+
# @see Git::Commands::Base
|
|
30
|
+
#
|
|
31
|
+
# @see Git::Commands::Worktree
|
|
32
|
+
#
|
|
33
|
+
# @api private
|
|
34
|
+
#
|
|
35
|
+
class ManagementBase < Git::Commands::Base
|
|
36
|
+
private
|
|
37
|
+
|
|
38
|
+
# Returns environment variable overrides that unset `GIT_INDEX_FILE`
|
|
39
|
+
#
|
|
40
|
+
# @return [Hash] the environment variable overrides, always
|
|
41
|
+
# `{ 'GIT_INDEX_FILE' => nil }`
|
|
42
|
+
#
|
|
43
|
+
# @api private
|
|
44
|
+
#
|
|
45
|
+
def env
|
|
46
|
+
{ 'GIT_INDEX_FILE' => nil }
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/worktree/management_base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Worktree
|
|
8
|
+
# Moves a linked worktree to a new filesystem location
|
|
9
|
+
#
|
|
10
|
+
# @example Move a worktree to a new path
|
|
11
|
+
# Git::Commands::Worktree::Move.new(execution_context).call('/tmp/old', '/tmp/new')
|
|
12
|
+
#
|
|
13
|
+
# @example Force-move a locked worktree
|
|
14
|
+
# Git::Commands::Worktree::Move.new(execution_context).call('/tmp/feat', '/tmp/feat2', force: true)
|
|
15
|
+
#
|
|
16
|
+
# @note `arguments` block audited against
|
|
17
|
+
# https://git-scm.com/docs/git-worktree/2.54.0
|
|
18
|
+
#
|
|
19
|
+
# @see Git::Commands::Worktree Git::Commands::Worktree for the full sub-command list
|
|
20
|
+
#
|
|
21
|
+
# @see https://git-scm.com/docs/git-worktree git-worktree documentation
|
|
22
|
+
#
|
|
23
|
+
# @api private
|
|
24
|
+
#
|
|
25
|
+
class Move < ManagementBase
|
|
26
|
+
arguments do
|
|
27
|
+
literal 'worktree'
|
|
28
|
+
literal 'move'
|
|
29
|
+
flag_option %i[force f], max_times: 2
|
|
30
|
+
end_of_options
|
|
31
|
+
operand :worktree, required: true
|
|
32
|
+
operand :new_path, required: true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# @!method call(*, **)
|
|
36
|
+
#
|
|
37
|
+
# @overload call(worktree, new_path, **options)
|
|
38
|
+
#
|
|
39
|
+
# Move a linked worktree to a new filesystem location
|
|
40
|
+
#
|
|
41
|
+
# @param worktree [String] path or unique suffix identifying the
|
|
42
|
+
# worktree to move
|
|
43
|
+
#
|
|
44
|
+
# @param new_path [String] destination path for the worktree
|
|
45
|
+
#
|
|
46
|
+
# @param options [Hash] command options
|
|
47
|
+
#
|
|
48
|
+
# @option options [Boolean, Integer, nil] :force (nil) allow moving a
|
|
49
|
+
# locked worktree
|
|
50
|
+
#
|
|
51
|
+
# Pass `true` or `1` to emit `--force` once. Pass `2` to emit
|
|
52
|
+
# `--force --force`, which also handles locked or missing destinations.
|
|
53
|
+
#
|
|
54
|
+
# Alias: :f
|
|
55
|
+
#
|
|
56
|
+
# @return [Git::CommandLineResult] the result of calling `git worktree move`
|
|
57
|
+
#
|
|
58
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
59
|
+
#
|
|
60
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
61
|
+
#
|
|
62
|
+
# @api public
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/worktree/management_base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Worktree
|
|
8
|
+
# Prunes stale worktree administrative files
|
|
9
|
+
#
|
|
10
|
+
# @example Prune stale worktree info
|
|
11
|
+
# Git::Commands::Worktree::Prune.new(execution_context).call
|
|
12
|
+
#
|
|
13
|
+
# @example Dry-run to see what would be pruned
|
|
14
|
+
# Git::Commands::Worktree::Prune.new(execution_context).call(dry_run: true)
|
|
15
|
+
#
|
|
16
|
+
# @example Prune entries older than 2 weeks
|
|
17
|
+
# Git::Commands::Worktree::Prune.new(execution_context).call(expire: '2.weeks.ago')
|
|
18
|
+
#
|
|
19
|
+
# @note `arguments` block audited against
|
|
20
|
+
# https://git-scm.com/docs/git-worktree/2.54.0
|
|
21
|
+
#
|
|
22
|
+
# @see Git::Commands::Worktree Git::Commands::Worktree for the full sub-command list
|
|
23
|
+
#
|
|
24
|
+
# @see https://git-scm.com/docs/git-worktree git-worktree documentation
|
|
25
|
+
#
|
|
26
|
+
# @api private
|
|
27
|
+
#
|
|
28
|
+
class Prune < ManagementBase
|
|
29
|
+
arguments do
|
|
30
|
+
literal 'worktree'
|
|
31
|
+
literal 'prune'
|
|
32
|
+
flag_option %i[dry_run n]
|
|
33
|
+
flag_option %i[verbose v]
|
|
34
|
+
value_option :expire
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @!method call(*, **)
|
|
38
|
+
#
|
|
39
|
+
# @overload call(**options)
|
|
40
|
+
#
|
|
41
|
+
# Prune stale worktree administrative files
|
|
42
|
+
#
|
|
43
|
+
# @param options [Hash] command options
|
|
44
|
+
#
|
|
45
|
+
# @option options [Boolean, nil] :dry_run (nil) report what would be removed
|
|
46
|
+
# without removing anything
|
|
47
|
+
#
|
|
48
|
+
# Alias: :n
|
|
49
|
+
#
|
|
50
|
+
# @option options [Boolean, nil] :verbose (nil) report all removals
|
|
51
|
+
#
|
|
52
|
+
# Alias: :v
|
|
53
|
+
#
|
|
54
|
+
# @option options [String] :expire (nil) only prune entries older than
|
|
55
|
+
# this time expression
|
|
56
|
+
#
|
|
57
|
+
# @return [Git::CommandLineResult] the result of calling `git worktree prune`
|
|
58
|
+
#
|
|
59
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
60
|
+
#
|
|
61
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
62
|
+
#
|
|
63
|
+
# @api public
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/worktree/management_base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Worktree
|
|
8
|
+
# Removes a linked worktree
|
|
9
|
+
#
|
|
10
|
+
# @example Remove a clean worktree
|
|
11
|
+
# Git::Commands::Worktree::Remove.new(execution_context).call('/tmp/feature')
|
|
12
|
+
#
|
|
13
|
+
# @example Force-remove an unclean worktree
|
|
14
|
+
# Git::Commands::Worktree::Remove.new(execution_context).call('/tmp/feature', force: true)
|
|
15
|
+
#
|
|
16
|
+
# @note `arguments` block audited against
|
|
17
|
+
# https://git-scm.com/docs/git-worktree/2.54.0
|
|
18
|
+
#
|
|
19
|
+
# @see Git::Commands::Worktree Git::Commands::Worktree for the full sub-command list
|
|
20
|
+
#
|
|
21
|
+
# @see https://git-scm.com/docs/git-worktree git-worktree documentation
|
|
22
|
+
#
|
|
23
|
+
# @api private
|
|
24
|
+
#
|
|
25
|
+
class Remove < ManagementBase
|
|
26
|
+
arguments do
|
|
27
|
+
literal 'worktree'
|
|
28
|
+
literal 'remove'
|
|
29
|
+
flag_option %i[force f], max_times: 2
|
|
30
|
+
end_of_options
|
|
31
|
+
operand :worktree, required: true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# @!method call(*, **)
|
|
35
|
+
#
|
|
36
|
+
# @overload call(worktree, **options)
|
|
37
|
+
#
|
|
38
|
+
# Remove a linked worktree
|
|
39
|
+
#
|
|
40
|
+
# @param worktree [String] path or unique suffix identifying the
|
|
41
|
+
# worktree to remove
|
|
42
|
+
#
|
|
43
|
+
# @param options [Hash] command options
|
|
44
|
+
#
|
|
45
|
+
# @option options [Boolean, Integer, nil] :force (nil) remove even if the
|
|
46
|
+
# worktree has uncommitted changes
|
|
47
|
+
#
|
|
48
|
+
# Pass `true` or `1` to emit `--force` once. Pass `2` to emit
|
|
49
|
+
# `--force --force`, which also removes locked worktrees.
|
|
50
|
+
#
|
|
51
|
+
# Alias: :f
|
|
52
|
+
#
|
|
53
|
+
# @return [Git::CommandLineResult] the result of calling `git worktree remove`
|
|
54
|
+
#
|
|
55
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
56
|
+
#
|
|
57
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
58
|
+
#
|
|
59
|
+
# @api public
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/worktree/management_base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Worktree
|
|
8
|
+
# Repairs worktree administrative files
|
|
9
|
+
#
|
|
10
|
+
# Resolves broken links between the repository and one or more linked
|
|
11
|
+
# worktrees. Useful after a worktree directory is moved manually.
|
|
12
|
+
#
|
|
13
|
+
# @example Repair all registered worktrees
|
|
14
|
+
# Git::Commands::Worktree::Repair.new(execution_context).call
|
|
15
|
+
#
|
|
16
|
+
# @example Repair specific moved worktrees
|
|
17
|
+
# Git::Commands::Worktree::Repair.new(execution_context).call('/tmp/moved1', '/tmp/moved2')
|
|
18
|
+
#
|
|
19
|
+
# @note `arguments` block audited against
|
|
20
|
+
# https://git-scm.com/docs/git-worktree/2.54.0
|
|
21
|
+
#
|
|
22
|
+
# @see Git::Commands::Worktree Git::Commands::Worktree for the full sub-command list
|
|
23
|
+
#
|
|
24
|
+
# @see https://git-scm.com/docs/git-worktree git-worktree documentation
|
|
25
|
+
#
|
|
26
|
+
# @api private
|
|
27
|
+
#
|
|
28
|
+
class Repair < ManagementBase
|
|
29
|
+
arguments do
|
|
30
|
+
literal 'worktree'
|
|
31
|
+
literal 'repair'
|
|
32
|
+
flag_option :relative_paths, negatable: true
|
|
33
|
+
end_of_options
|
|
34
|
+
operand :path, repeatable: true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# git worktree repair was introduced in git 2.29.0
|
|
38
|
+
requires_git_version '2.29.0'
|
|
39
|
+
|
|
40
|
+
# @!method call(*, **)
|
|
41
|
+
#
|
|
42
|
+
# @overload call(*path, **options)
|
|
43
|
+
#
|
|
44
|
+
# Repair worktree administrative files
|
|
45
|
+
#
|
|
46
|
+
# @param path [Array<String>] paths to specific worktrees to repair
|
|
47
|
+
#
|
|
48
|
+
# When omitted, all registered worktrees are repaired.
|
|
49
|
+
#
|
|
50
|
+
# @param options [Hash] command options
|
|
51
|
+
#
|
|
52
|
+
# @option options [Boolean, nil] :relative_paths (nil) link worktrees using
|
|
53
|
+
# relative paths (`--relative-paths`)
|
|
54
|
+
#
|
|
55
|
+
# Overrides the `worktree.useRelativePaths` config option.
|
|
56
|
+
#
|
|
57
|
+
# @option options [Boolean, nil] :no_relative_paths (nil) use absolute paths
|
|
58
|
+
# for worktree links (`--no-relative-paths`)
|
|
59
|
+
#
|
|
60
|
+
# Overrides the `worktree.useRelativePaths` config option. Also causes
|
|
61
|
+
# repair to update linking files if there is an absolute/relative
|
|
62
|
+
# mismatch, even if the links are already correct.
|
|
63
|
+
#
|
|
64
|
+
# @return [Git::CommandLineResult] the result of calling `git worktree repair`
|
|
65
|
+
#
|
|
66
|
+
# @raise [ArgumentError] if unsupported options are provided
|
|
67
|
+
#
|
|
68
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
69
|
+
#
|
|
70
|
+
# @raise [Git::VersionError] if git version is below 2.29.0
|
|
71
|
+
#
|
|
72
|
+
# @api public
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'git/commands/worktree/management_base'
|
|
4
|
+
|
|
5
|
+
module Git
|
|
6
|
+
module Commands
|
|
7
|
+
module Worktree
|
|
8
|
+
# Unlocks a worktree, allowing it to be pruned, moved, or deleted
|
|
9
|
+
#
|
|
10
|
+
# @example Unlock a worktree
|
|
11
|
+
# Git::Commands::Worktree::Unlock.new(execution_context).call('/tmp/feature')
|
|
12
|
+
#
|
|
13
|
+
# @note `arguments` block audited against
|
|
14
|
+
# https://git-scm.com/docs/git-worktree/2.54.0
|
|
15
|
+
#
|
|
16
|
+
# @see Git::Commands::Worktree Git::Commands::Worktree for the full sub-command list
|
|
17
|
+
#
|
|
18
|
+
# @see https://git-scm.com/docs/git-worktree git-worktree documentation
|
|
19
|
+
#
|
|
20
|
+
# @api private
|
|
21
|
+
#
|
|
22
|
+
class Unlock < ManagementBase
|
|
23
|
+
arguments do
|
|
24
|
+
literal 'worktree'
|
|
25
|
+
literal 'unlock'
|
|
26
|
+
end_of_options
|
|
27
|
+
operand :worktree, required: true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# @!method call(*, **)
|
|
31
|
+
#
|
|
32
|
+
# @overload call(worktree)
|
|
33
|
+
#
|
|
34
|
+
# Unlock a worktree, allowing it to be pruned, moved, or deleted
|
|
35
|
+
#
|
|
36
|
+
# @param worktree [String] path or unique suffix identifying the worktree
|
|
37
|
+
# to unlock
|
|
38
|
+
#
|
|
39
|
+
# @return [Git::CommandLineResult] the result of calling `git worktree unlock`
|
|
40
|
+
#
|
|
41
|
+
# @raise [Git::FailedError] if git exits with a non-zero exit status
|
|
42
|
+
#
|
|
43
|
+
# @api public
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'worktree/add'
|
|
4
|
+
require_relative 'worktree/list'
|
|
5
|
+
require_relative 'worktree/lock'
|
|
6
|
+
require_relative 'worktree/management_base'
|
|
7
|
+
require_relative 'worktree/move'
|
|
8
|
+
require_relative 'worktree/prune'
|
|
9
|
+
require_relative 'worktree/remove'
|
|
10
|
+
require_relative 'worktree/repair'
|
|
11
|
+
require_relative 'worktree/unlock'
|
|
12
|
+
|
|
13
|
+
module Git
|
|
14
|
+
module Commands
|
|
15
|
+
# Implements `git worktree` subcommands for managing multiple working trees
|
|
16
|
+
#
|
|
17
|
+
# Split into subclasses because each subcommand has a distinct call shape
|
|
18
|
+
# and option set:
|
|
19
|
+
#
|
|
20
|
+
# - {Worktree::Add} — create a new linked worktree
|
|
21
|
+
# - {Worktree::List} — list all worktrees
|
|
22
|
+
# - {Worktree::Lock} — prevent a worktree from being pruned
|
|
23
|
+
# - {Worktree::Move} — move a worktree to a new location
|
|
24
|
+
# - {Worktree::Prune} — prune stale worktree administrative files
|
|
25
|
+
# - {Worktree::Remove} — remove a worktree
|
|
26
|
+
# - {Worktree::Repair} — repair worktree administrative files
|
|
27
|
+
# - {Worktree::Unlock} — allow a worktree to be pruned
|
|
28
|
+
#
|
|
29
|
+
# Management subcommands ({Add}, {Lock}, {Move}, {Prune}, {Remove},
|
|
30
|
+
# {Repair}, {Unlock}) inherit from {Worktree::ManagementBase}, which
|
|
31
|
+
# unconditionally unsets `GIT_INDEX_FILE` in the subprocess environment.
|
|
32
|
+
# Git worktrees maintain their own index files; leaving `GIT_INDEX_FILE`
|
|
33
|
+
# set causes silent corruption of both the main and the linked worktree
|
|
34
|
+
# indexes.
|
|
35
|
+
#
|
|
36
|
+
# @see https://git-scm.com/docs/git-worktree git-worktree documentation
|
|
37
|
+
#
|
|
38
|
+
# @api private
|
|
39
|
+
#
|
|
40
|
+
module Worktree
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|