git-p4: test cloning with two dirs, clarify doc
authorPete Wyckoff <pw@padd.com>
Sun, 25 Dec 2011 02:07:33 +0000 (21:07 -0500)
committerJunio C Hamano <gitster@pobox.com>
Tue, 27 Dec 2011 18:19:30 +0000 (10:19 -0800)
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 <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-p4.txt
t/t9800-git-p4-basic.sh
index 201a0a03c475e06fd7c01f6c213113c9d4b38ab9..befb21704a8f49fda0a8d8794b542d4325c32e8d 100644 (file)
@@ -276,8 +276,15 @@ p4 revision specifier on the end:
 "//depot/my/project@1,6"::
     Import only changes 1 through 6.
 
 "//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.
 
 
 See 'p4 help revisions' for the full syntax of p4 revision specifiers.
 
index 272de3fea37e15b0f29e4a505fcd85b4d4fd1052..04ee20e642387e75e031f4c68ff126c06220c620 100755 (executable)
@@ -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" &&
 test_expect_success 'exit when p4 fails to produce marshaled output' '
        badp4dir="$TRASH_DIRECTORY/badp4dir" &&
        mkdir "$badp4dir" &&