Merge branch 'pw/p4-view-updates'

* pw/p4-view-updates:
  git-p4: add tests demonstrating spec overlay ambiguities
  git-p4: adjust test to adhere to stricter useClientSpec
  git-p4: clarify comment
  git-p4: fix verbose comment typo
  git-p4: only a single ... wildcard is supported
This commit is contained in:
Junio C Hamano
2012-01-29 13:18:52 -08:00
4 changed files with 406 additions and 7 deletions

View File

@@ -146,7 +146,7 @@ test_expect_success 'clone --use-client-spec' '
(
cd "$git" &&
test_path_is_file bus/dir/f4 &&
test_path_is_file file1
test_path_is_missing file1
) &&
cleanup_git &&
@@ -159,7 +159,7 @@ test_expect_success 'clone --use-client-spec' '
"$GITP4" sync //depot/... &&
git checkout -b master p4/master &&
test_path_is_file bus/dir/f4 &&
test_path_is_file file1
test_path_is_missing file1
)
'

View File

@@ -101,12 +101,18 @@ test_expect_success 'unsupported view wildcard *' '
test_must_fail "$GITP4" clone --use-client-spec --dest="$git" //depot
'
test_expect_success 'wildcard ... only supported at end of spec' '
test_expect_success 'wildcard ... only supported at end of spec 1' '
client_view "//depot/.../file11 //client/.../file11" &&
test_when_finished cleanup_git &&
test_must_fail "$GITP4" clone --use-client-spec --dest="$git" //depot
'
test_expect_success 'wildcard ... only supported at end of spec 2' '
client_view "//depot/.../a/... //client/.../a/..." &&
test_when_finished cleanup_git &&
test_must_fail "$GITP4" clone --use-client-spec --dest="$git" //depot
'
test_expect_success 'basic map' '
client_view "//depot/dir1/... //client/cli1/..." &&
files="cli1/file11 cli1/file12" &&
@@ -240,6 +246,393 @@ test_expect_success 'quotes on rhs only' '
git_verify "cdir 1/file11" "cdir 1/file12"
'
#
# What happens when two files of the same name are overlayed together?
# The last-listed file should take preference.
#
# //depot
# - dir1
# - file11
# - file12
# - filecollide
# - dir2
# - file21
# - file22
# - filecollide
#
test_expect_success 'overlay collision setup' '
client_view "//depot/... //client/..." &&
(
cd "$cli" &&
p4 sync &&
echo dir1/filecollide >dir1/filecollide &&
p4 add dir1/filecollide &&
p4 submit -d dir1/filecollide &&
echo dir2/filecollide >dir2/filecollide &&
p4 add dir2/filecollide &&
p4 submit -d dir2/filecollide
)
'
test_expect_success 'overlay collision 1 to 2' '
client_view "//depot/dir1/... //client/..." \
"+//depot/dir2/... //client/..." &&
files="file11 file12 file21 file22 filecollide" &&
echo dir2/filecollide >actual &&
client_verify $files &&
test_cmp actual "$cli"/filecollide &&
test_when_finished cleanup_git &&
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
git_verify $files &&
test_cmp actual "$git"/filecollide
'
test_expect_failure 'overlay collision 2 to 1' '
client_view "//depot/dir2/... //client/..." \
"+//depot/dir1/... //client/..." &&
files="file11 file12 file21 file22 filecollide" &&
echo dir1/filecollide >actual &&
client_verify $files &&
test_cmp actual "$cli"/filecollide &&
test_when_finished cleanup_git &&
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
git_verify $files &&
test_cmp actual "$git"/filecollide
'
test_expect_success 'overlay collision delete 2' '
client_view "//depot/... //client/..." &&
(
cd "$cli" &&
p4 sync &&
p4 delete dir2/filecollide &&
p4 submit -d "remove dir2/filecollide"
)
'
# no filecollide, got deleted with dir2
test_expect_failure 'overlay collision 1 to 2, but 2 deleted' '
client_view "//depot/dir1/... //client/..." \
"+//depot/dir2/... //client/..." &&
files="file11 file12 file21 file22" &&
client_verify $files &&
test_when_finished cleanup_git &&
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
git_verify $files
'
test_expect_success 'overlay collision update 1' '
client_view "//depot/dir1/... //client/dir1/..." &&
(
cd "$cli" &&
p4 sync &&
p4 open dir1/filecollide &&
echo dir1/filecollide update >dir1/filecollide &&
p4 submit -d "update dir1/filecollide"
)
'
# still no filecollide, dir2 still wins with the deletion even though the
# change to dir1 is more recent
test_expect_failure 'overlay collision 1 to 2, but 2 deleted, then 1 updated' '
client_view "//depot/dir1/... //client/..." \
"+//depot/dir2/... //client/..." &&
files="file11 file12 file21 file22" &&
client_verify $files &&
test_when_finished cleanup_git &&
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
git_verify $files
'
test_expect_success 'overlay collision delete filecollides' '
client_view "//depot/... //client/..." &&
(
cd "$cli" &&
p4 sync &&
p4 delete dir1/filecollide dir2/filecollide &&
p4 submit -d "remove filecollides"
)
'
#
# Overlays as part of sync, rather than initial checkout:
# 1. add a file in dir1
# 2. sync to include it
# 3. add same file in dir2
# 4. sync, make sure content switches as dir2 has priority
# 5. add another file in dir1
# 6. sync
# 7. add/delete same file in dir2
# 8. sync, make sure it disappears, again dir2 wins
# 9. cleanup
#
# //depot
# - dir1
# - file11
# - file12
# - colA
# - colB
# - dir2
# - file21
# - file22
# - colA
# - colB
#
test_expect_success 'overlay sync: add colA in dir1' '
client_view "//depot/dir1/... //client/dir1/..." &&
(
cd "$cli" &&
p4 sync &&
echo dir1/colA >dir1/colA &&
p4 add dir1/colA &&
p4 submit -d dir1/colA
)
'
test_expect_success 'overlay sync: initial git checkout' '
client_view "//depot/dir1/... //client/..." \
"+//depot/dir2/... //client/..." &&
files="file11 file12 file21 file22 colA" &&
echo dir1/colA >actual &&
client_verify $files &&
test_cmp actual "$cli"/colA &&
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
git_verify $files &&
test_cmp actual "$git"/colA
'
test_expect_success 'overlay sync: add colA in dir2' '
client_view "//depot/dir2/... //client/dir2/..." &&
(
cd "$cli" &&
p4 sync &&
echo dir2/colA >dir2/colA &&
p4 add dir2/colA &&
p4 submit -d dir2/colA
)
'
test_expect_success 'overlay sync: colA content switch' '
client_view "//depot/dir1/... //client/..." \
"+//depot/dir2/... //client/..." &&
files="file11 file12 file21 file22 colA" &&
echo dir2/colA >actual &&
client_verify $files &&
test_cmp actual "$cli"/colA &&
(
cd "$git" &&
"$GITP4" sync --use-client-spec &&
git merge --ff-only p4/master
) &&
git_verify $files &&
test_cmp actual "$git"/colA
'
test_expect_success 'overlay sync: add colB in dir1' '
client_view "//depot/dir1/... //client/dir1/..." &&
(
cd "$cli" &&
p4 sync &&
echo dir1/colB >dir1/colB &&
p4 add dir1/colB &&
p4 submit -d dir1/colB
)
'
test_expect_success 'overlay sync: colB appears' '
client_view "//depot/dir1/... //client/..." \
"+//depot/dir2/... //client/..." &&
files="file11 file12 file21 file22 colA colB" &&
echo dir1/colB >actual &&
client_verify $files &&
test_cmp actual "$cli"/colB &&
(
cd "$git" &&
"$GITP4" sync --use-client-spec &&
git merge --ff-only p4/master
) &&
git_verify $files &&
test_cmp actual "$git"/colB
'
test_expect_success 'overlay sync: add/delete colB in dir2' '
client_view "//depot/dir2/... //client/dir2/..." &&
(
cd "$cli" &&
p4 sync &&
echo dir2/colB >dir2/colB &&
p4 add dir2/colB &&
p4 submit -d dir2/colB &&
p4 delete dir2/colB &&
p4 submit -d "delete dir2/colB"
)
'
test_expect_success 'overlay sync: colB disappears' '
client_view "//depot/dir1/... //client/..." \
"+//depot/dir2/... //client/..." &&
files="file11 file12 file21 file22 colA" &&
client_verify $files &&
test_when_finished cleanup_git &&
(
cd "$git" &&
"$GITP4" sync --use-client-spec &&
git merge --ff-only p4/master
) &&
git_verify $files
'
test_expect_success 'overlay sync: cleanup' '
client_view "//depot/... //client/..." &&
(
cd "$cli" &&
p4 sync &&
p4 delete dir1/colA dir2/colA dir1/colB &&
p4 submit -d "remove overlay sync files"
)
'
#
# Overlay tests again, but swapped so dir1 has priority.
# 1. add a file in dir1
# 2. sync to include it
# 3. add same file in dir2
# 4. sync, make sure content does not switch
# 5. add another file in dir1
# 6. sync
# 7. add/delete same file in dir2
# 8. sync, make sure it is still there
# 9. cleanup
#
# //depot
# - dir1
# - file11
# - file12
# - colA
# - colB
# - dir2
# - file21
# - file22
# - colA
# - colB
#
test_expect_success 'overlay sync swap: add colA in dir1' '
client_view "//depot/dir1/... //client/dir1/..." &&
(
cd "$cli" &&
p4 sync &&
echo dir1/colA >dir1/colA &&
p4 add dir1/colA &&
p4 submit -d dir1/colA
)
'
test_expect_success 'overlay sync swap: initial git checkout' '
client_view "//depot/dir2/... //client/..." \
"+//depot/dir1/... //client/..." &&
files="file11 file12 file21 file22 colA" &&
echo dir1/colA >actual &&
client_verify $files &&
test_cmp actual "$cli"/colA &&
"$GITP4" clone --use-client-spec --dest="$git" //depot &&
git_verify $files &&
test_cmp actual "$git"/colA
'
test_expect_success 'overlay sync swap: add colA in dir2' '
client_view "//depot/dir2/... //client/dir2/..." &&
(
cd "$cli" &&
p4 sync &&
echo dir2/colA >dir2/colA &&
p4 add dir2/colA &&
p4 submit -d dir2/colA
)
'
test_expect_failure 'overlay sync swap: colA no content switch' '
client_view "//depot/dir2/... //client/..." \
"+//depot/dir1/... //client/..." &&
files="file11 file12 file21 file22 colA" &&
echo dir1/colA >actual &&
client_verify $files &&
test_cmp actual "$cli"/colA &&
(
cd "$git" &&
"$GITP4" sync --use-client-spec &&
git merge --ff-only p4/master
) &&
git_verify $files &&
test_cmp actual "$git"/colA
'
test_expect_success 'overlay sync swap: add colB in dir1' '
client_view "//depot/dir1/... //client/dir1/..." &&
(
cd "$cli" &&
p4 sync &&
echo dir1/colB >dir1/colB &&
p4 add dir1/colB &&
p4 submit -d dir1/colB
)
'
test_expect_success 'overlay sync swap: colB appears' '
client_view "//depot/dir2/... //client/..." \
"+//depot/dir1/... //client/..." &&
files="file11 file12 file21 file22 colA colB" &&
echo dir1/colB >actual &&
client_verify $files &&
test_cmp actual "$cli"/colB &&
(
cd "$git" &&
"$GITP4" sync --use-client-spec &&
git merge --ff-only p4/master
) &&
git_verify $files &&
test_cmp actual "$git"/colB
'
test_expect_success 'overlay sync swap: add/delete colB in dir2' '
client_view "//depot/dir2/... //client/dir2/..." &&
(
cd "$cli" &&
p4 sync &&
echo dir2/colB >dir2/colB &&
p4 add dir2/colB &&
p4 submit -d dir2/colB &&
p4 delete dir2/colB &&
p4 submit -d "delete dir2/colB"
)
'
test_expect_failure 'overlay sync swap: colB no change' '
client_view "//depot/dir2/... //client/..." \
"+//depot/dir1/... //client/..." &&
files="file11 file12 file21 file22 colA colB" &&
echo dir1/colB >actual &&
client_verify $files &&
test_cmp actual "$cli"/colB &&
test_when_finished cleanup_git &&
(
cd "$git" &&
"$GITP4" sync --use-client-spec &&
git merge --ff-only p4/master
) &&
git_verify $files &&
test_cmp actual "$cli"/colB
'
test_expect_success 'overlay sync swap: cleanup' '
client_view "//depot/... //client/..." &&
(
cd "$cli" &&
p4 sync &&
p4 delete dir1/colA dir2/colA dir1/colB &&
p4 submit -d "remove overlay sync files"
)
'
#
# Rename directories to test quoting in depot-side mappings
# //depot