Code

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/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.
 
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" &&