Staging
v0.8.1
Revision 68d06c5200775ffda91881254ca7a92f27db68ef authored by Jeff King on 19 February 2008, 16:25:22 UTC, committed by Junio C Hamano on 20 February 2008, 04:46:10 UTC
The previous text was correct, but it was easy to miss the
fact that we are talking about "matching" refs. That is, the
text can be parsed as "we push the union of the sets
of remote and local heads" and not "we push the intersection
of the sets of remote and local heads". (The former actually
doesn't make sense if you think about it, since we don't
even _have_ some of those heads). A careful reading would
reveal the correct meaning, but it makes sense to be as
explicit as possible in documentation.

We also explicitly use and introduce the term "matching";
this is a term discussed on the list, and it seems useful
to for users to be able to refer to this behavior by name.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 2b8130c
Raw File
t2001-checkout-cache-clash.sh
#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano
#

test_description='git checkout-index test.

This test registers the following filesystem structure in the cache:

    path0/file0	- a file in a directory
    path1/file1 - a file in a directory

and attempts to check it out when the work tree has:

    path0/file0 - a file in a directory
    path1       - a symlink pointing at "path0"

Checkout cache should fail to extract path1/file1 because the leading
path path1 is occupied by a non-directory.  With "-f" it should remove
the symlink path1 and create directory path1 and file path1/file1.
'
. ./test-lib.sh

show_files() {
	# show filesystem files, just [-dl] for type and name
	find path? -ls |
	sed -e 's/^[0-9]* * [0-9]* * \([-bcdl]\)[^ ]* *[0-9]* *[^ ]* *[^ ]* *[0-9]* [A-Z][a-z][a-z] [0-9][0-9] [^ ]* /fs: \1 /'
	# what's in the cache, just mode and name
	git ls-files --stage |
	sed -e 's/^\([0-9]*\) [0-9a-f]* [0-3] /ca: \1 /'
	# what's in the tree, just mode and name.
	git ls-tree -r "$1" |
	sed -e 's/^\([0-9]*\)	[^ ]*	[0-9a-f]*	/tr: \1 /'
}

mkdir path0
date >path0/file0
test_expect_success \
    'git update-index --add path0/file0' \
    'git update-index --add path0/file0'
test_expect_success \
    'writing tree out with git write-tree' \
    'tree1=$(git write-tree)'
test_debug 'show_files $tree1'

mkdir path1
date >path1/file1
test_expect_success \
    'git update-index --add path1/file1' \
    'git update-index --add path1/file1'
test_expect_success \
    'writing tree out with git write-tree' \
    'tree2=$(git write-tree)'
test_debug 'show_files $tree2'

rm -fr path1
test_expect_success \
    'read previously written tree and checkout.' \
    'git read-tree -m $tree1 && git checkout-index -f -a'
test_debug 'show_files $tree1'

ln -s path0 path1
test_expect_success \
    'git update-index --add a symlink.' \
    'git update-index --add path1'
test_expect_success \
    'writing tree out with git write-tree' \
    'tree3=$(git write-tree)'
test_debug 'show_files $tree3'

# Morten says "Got that?" here.
# Test begins.

test_expect_success \
    'read previously written tree and checkout.' \
    'git read-tree $tree2 && git checkout-index -f -a'
test_debug 'show_files $tree2'

test_expect_success \
    'checking out conflicting path with -f' \
    'test ! -h path0 && test -d path0 &&
     test ! -h path1 && test -d path1 &&
     test ! -h path0/file0 && test -f path0/file0 &&
     test ! -h path1/file1 && test -f path1/file1'

test_done
back to top