t/t9826-git-p4-keep-empty-commits.sh

Summary

Maintainability
Test Coverage
#!/bin/sh

test_description='Clone repositories and keep empty commits'

. ./lib-git-p4.sh

test_expect_success 'start p4d' '
    start_p4d
'

test_expect_success 'Create a repo' '
    client_view "//depot/... //client/..." &&
    (
        cd "$cli" &&

        mkdir -p subdir &&

        >subdir/file1.txt &&
        p4 add subdir/file1.txt &&
        p4 submit -d "Add file 1" &&

        >file2.txt &&
        p4 add file2.txt &&
        p4 submit -d "Add file 2" &&

        >subdir/file3.txt &&
        p4 add subdir/file3.txt &&
        p4 submit -d "Add file 3" &&

        >file4.txt &&
        p4 add file4.txt &&
        p4 submit -d "Add file 4" &&

        p4 delete subdir/file3.txt &&
        p4 submit -d "Remove file 3" &&

        p4 delete file4.txt &&
        p4 submit -d "Remove file 4"
    )
'

test_expect_success 'Clone repo root path with all history' '
    client_view "//depot/... //client/..." &&
    test_when_finished cleanup_git &&
    (
        cd "$git" &&
        git init . &&
        git p4 clone --use-client-spec --destination="$git" //depot@all &&
        cat >expect <<-\EOF &&
        Remove file 4
        [git-p4: depot-paths = "//depot/": change = 6]

        Remove file 3
        [git-p4: depot-paths = "//depot/": change = 5]

        Add file 4
        [git-p4: depot-paths = "//depot/": change = 4]

        Add file 3
        [git-p4: depot-paths = "//depot/": change = 3]

        Add file 2
        [git-p4: depot-paths = "//depot/": change = 2]

        Add file 1
        [git-p4: depot-paths = "//depot/": change = 1]

        EOF
        git log --format=%B >actual &&
        test_cmp expect actual
    )
'

test_expect_success 'Clone repo subdir with all history but keep empty commits' '
    client_view "//depot/subdir/... //client/subdir/..." &&
    test_when_finished cleanup_git &&
    (
        cd "$git" &&
        git init . &&
        git config git-p4.keepEmptyCommits true &&
        git p4 clone --use-client-spec --destination="$git" //depot@all &&
        cat >expect <<-\EOF &&
        Remove file 4
        [git-p4: depot-paths = "//depot/": change = 6]

        Remove file 3
        [git-p4: depot-paths = "//depot/": change = 5]

        Add file 4
        [git-p4: depot-paths = "//depot/": change = 4]

        Add file 3
        [git-p4: depot-paths = "//depot/": change = 3]

        Add file 2
        [git-p4: depot-paths = "//depot/": change = 2]

        Add file 1
        [git-p4: depot-paths = "//depot/": change = 1]

        EOF
        git log --format=%B >actual &&
        test_cmp expect actual
    )
'

test_expect_success 'Clone repo subdir with all history' '
    client_view "//depot/subdir/... //client/subdir/..." &&
    test_when_finished cleanup_git &&
    (
        cd "$git" &&
        git init . &&
        git p4 clone --use-client-spec --destination="$git" --verbose //depot@all &&
        cat >expect <<-\EOF &&
        Remove file 3
        [git-p4: depot-paths = "//depot/": change = 5]

        Add file 3
        [git-p4: depot-paths = "//depot/": change = 3]

        Add file 1
        [git-p4: depot-paths = "//depot/": change = 1]

        EOF
        git log --format=%B >actual &&
        test_cmp expect actual
    )
'

test_done