-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This makes 'git rev-parse' behave as if it were invoked from the specified subdirectory of a repository, with the difference that any file paths which it prints are prefixed with the full path from the top of the working tree. This is useful for shell scripts where we may want to cd to the top of the working tree but need to handle relative paths given by the user on the command line. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
- Loading branch information
John Keeping
authored and
Junio C Hamano
committed
Jun 17, 2013
1 parent
1ae2e19
commit 12b9d32
Showing
3 changed files
with
131 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
#!/bin/sh | ||
|
||
test_description='Tests for rev-parse --prefix' | ||
|
||
. ./test-lib.sh | ||
|
||
test_expect_success 'setup' ' | ||
mkdir -p sub1/sub2 && | ||
echo top >top && | ||
echo file1 >sub1/file1 && | ||
echo file2 >sub1/sub2/file2 && | ||
git add top sub1/file1 sub1/sub2/file2 && | ||
git commit -m commit | ||
' | ||
|
||
test_expect_success 'empty prefix -- file' ' | ||
git rev-parse --prefix "" -- top sub1/file1 >actual && | ||
cat <<-\EOF >expected && | ||
-- | ||
top | ||
sub1/file1 | ||
EOF | ||
test_cmp expected actual | ||
' | ||
|
||
test_expect_success 'valid prefix -- file' ' | ||
git rev-parse --prefix sub1/ -- file1 sub2/file2 >actual && | ||
cat <<-\EOF >expected && | ||
-- | ||
sub1/file1 | ||
sub1/sub2/file2 | ||
EOF | ||
test_cmp expected actual | ||
' | ||
|
||
test_expect_success 'valid prefix -- ../file' ' | ||
git rev-parse --prefix sub1/ -- ../top sub2/file2 >actual && | ||
cat <<-\EOF >expected && | ||
-- | ||
sub1/../top | ||
sub1/sub2/file2 | ||
EOF | ||
test_cmp expected actual | ||
' | ||
|
||
test_expect_success 'empty prefix HEAD:./path' ' | ||
git rev-parse --prefix "" HEAD:./top >actual && | ||
git rev-parse HEAD:top >expected && | ||
test_cmp expected actual | ||
' | ||
|
||
test_expect_success 'valid prefix HEAD:./path' ' | ||
git rev-parse --prefix sub1/ HEAD:./file1 >actual && | ||
git rev-parse HEAD:sub1/file1 >expected && | ||
test_cmp expected actual | ||
' | ||
|
||
test_expect_success 'valid prefix HEAD:../path' ' | ||
git rev-parse --prefix sub1/ HEAD:../top >actual && | ||
git rev-parse HEAD:top >expected && | ||
test_cmp expected actual | ||
' | ||
|
||
test_expect_success 'prefix ignored with HEAD:top' ' | ||
git rev-parse --prefix sub1/ HEAD:top >actual && | ||
git rev-parse HEAD:top >expected && | ||
test_cmp expected actual | ||
' | ||
|
||
test_expect_success 'disambiguate path with valid prefix' ' | ||
git rev-parse --prefix sub1/ file1 >actual && | ||
cat <<-\EOF >expected && | ||
sub1/file1 | ||
EOF | ||
test_cmp expected actual | ||
' | ||
|
||
test_expect_success 'file and refs with prefix' ' | ||
git rev-parse --prefix sub1/ master file1 >actual && | ||
cat <<-EOF >expected && | ||
$(git rev-parse master) | ||
sub1/file1 | ||
EOF | ||
test_cmp expected actual | ||
' | ||
|
||
test_expect_success 'two-levels deep' ' | ||
git rev-parse --prefix sub1/sub2/ -- file2 >actual && | ||
cat <<-\EOF >expected && | ||
-- | ||
sub1/sub2/file2 | ||
EOF | ||
test_cmp expected actual | ||
' | ||
|
||
test_done |