From da191d15bfd690e679a9626cba527465e0aafabb Mon Sep 17 00:00:00 2001 From: Pete Wyckoff Date: Sat, 24 Dec 2011 21:07:33 -0500 Subject: [PATCH] git-p4: test cloning with two dirs, clarify doc Document how git-p4 currently works when specifying multiple depot paths: 1. No branches or directories are named. 2. Conflicting files are silently ignored---the last change wins. 2. Option --destination is required, else the last path is construed to be a directory. 3. Revision specifiers must be the same on all paths for them to take effect. Test this behavior. Signed-off-by: Pete Wyckoff Signed-off-by: Junio C Hamano --- Documentation/git-p4.txt | 11 ++++++-- t/t9800-git-p4-basic.sh | 60 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt index 201a0a03c..befb21704 100644 --- a/Documentation/git-p4.txt +++ b/Documentation/git-p4.txt @@ -276,8 +276,15 @@ p4 revision specifier on the end: "//depot/my/project@1,6":: Import only changes 1 through 6. -"//depot/proj1 //depot/proj2@all":: - Import all changes from both named depot paths. +"//depot/proj1@all //depot/proj2@all":: + Import all changes from both named depot paths into a single + repository. Only files below these directories are included. + There is not a subdirectory in git for each "proj1" and "proj2". + You must use the '--destination' option when specifying more + than one depot path. The revision specifier must be specified + identically on each depot path. If there are files in the + depot paths with the same name, the path with the most recently + updated version of the file is the one that appears in git. See 'p4 help revisions' for the full syntax of p4 revision specifiers. diff --git a/t/t9800-git-p4-basic.sh b/t/t9800-git-p4-basic.sh index 272de3fea..04ee20e64 100755 --- a/t/t9800-git-p4-basic.sh +++ b/t/t9800-git-p4-basic.sh @@ -65,6 +65,66 @@ test_expect_success 'git-p4 sync new branch' ' ) ' +test_expect_success 'clone two dirs' ' + ( + cd "$cli" && + mkdir sub1 sub2 && + echo sub1/f1 >sub1/f1 && + echo sub2/f2 >sub2/f2 && + p4 add sub1/f1 && + p4 submit -d "sub1/f1" && + p4 add sub2/f2 && + p4 submit -d "sub2/f2" + ) && + "$GITP4" clone --dest="$git" //depot/sub1 //depot/sub2 && + test_when_finished cleanup_git && + ( + cd "$git" && + git ls-files >lines && + test_line_count = 2 lines && + git log --oneline p4/master >lines && + test_line_count = 1 lines + ) +' + +test_expect_success 'clone two dirs, @all' ' + ( + cd "$cli" && + echo sub1/f3 >sub1/f3 && + p4 add sub1/f3 && + p4 submit -d "sub1/f3" + ) && + "$GITP4" clone --dest="$git" //depot/sub1@all //depot/sub2@all && + test_when_finished cleanup_git && + ( + cd "$git" && + git ls-files >lines && + test_line_count = 3 lines && + git log --oneline p4/master >lines && + test_line_count = 3 lines + ) +' + +test_expect_success 'clone two dirs, @all, conflicting files' ' + ( + cd "$cli" && + echo sub2/f3 >sub2/f3 && + p4 add sub2/f3 && + p4 submit -d "sub2/f3" + ) && + "$GITP4" clone --dest="$git" //depot/sub1@all //depot/sub2@all && + test_when_finished cleanup_git && + ( + cd "$git" && + git ls-files >lines && + test_line_count = 3 lines && + git log --oneline p4/master >lines && + test_line_count = 4 lines && + echo sub2/f3 >expected && + test_cmp expected f3 + ) +' + test_expect_success 'exit when p4 fails to produce marshaled output' ' badp4dir="$TRASH_DIRECTORY/badp4dir" && mkdir "$badp4dir" && -- 2.30.2