aboutsummaryrefslogtreecommitdiffstats
path: root/t/108-works-with-git-worktrees.t
diff options
context:
space:
mode:
authorTeddy Wing2020-03-13 00:33:27 +0100
committerTeddy Wing2020-03-13 00:33:27 +0100
commit8061c43bb08b253f81283bce1bd83d2be6a77263 (patch)
tree23042b1f6a72b9b685637e311a96f946045fe44e /t/108-works-with-git-worktrees.t
parent73b82527df51dc093455ae4149799c278c1dcffc (diff)
downloadgit-branch-list-8061c43bb08b253f81283bce1bd83d2be6a77263.tar.bz2
git-branch-list: Allow commands to work in Git worktrees
Previously, `git-branch-list` didn't work inside worktree directories. It expected the current directory to be a descendant of the main Git repository directory, which isn't the case for worktrees. Given a Git repository `test-repo`: $ git rev-parse --show-toplevel /tmp/test-repo $ git rev-parse --git-common-dir .git $ mkdir subdir && cd subdir $ git rev-parse --git-common-dir ../.git $ cd - $ git worktree add ../test-repo-worktree $ cd ../test-repo-worktree $ git rev-parse --show-toplevel /tmp/test-repo-worktree $ git rev-parse --git-common-dir /tmp/test-repo/.git The `git rev-parse --show-toplevel` command outputs the top-level path of the worktree, not the main repository directory. Using `git rev-parse --git-common-dir`, we can get the correct path whether we're in a subdirectory or a worktree.
Diffstat (limited to 't/108-works-with-git-worktrees.t')
-rw-r--r--t/108-works-with-git-worktrees.t36
1 files changed, 36 insertions, 0 deletions
diff --git a/t/108-works-with-git-worktrees.t b/t/108-works-with-git-worktrees.t
new file mode 100644
index 0000000..b2901c0
--- /dev/null
+++ b/t/108-works-with-git-worktrees.t
@@ -0,0 +1,36 @@
+#!/usr/bin/env perl -w
+
+use strict;
+
+use Test::More;
+use File::Path qw(remove_tree);
+
+use Bin qw($BIN);
+
+chdir 't-git-repo' or die $!;
+
+system('git branch a-branch');
+ok !$?;
+
+system("$BIN save a-branch");
+ok !$?;
+
+system('git worktree add ../t-git-repo-worktree');
+ok !$?;
+
+chdir '../t-git-repo-worktree' or die $!;
+
+my $branch_list = qx($BIN);
+is $branch_list, ' 1 a-branch
+';
+
+
+# Teardown
+system("$BIN clear");
+chdir '../t-git-repo' or die $!;
+remove_tree('../t-git-repo-worktree') or die $!;
+system('git checkout master');
+system('git branch -d a-branch');
+
+
+done_testing;