t / t9801-git-p4-branch.shon commit Merge branch 'jc/broken-ref-dwim-fix' (0445ba2)
   1#!/bin/sh
   2
   3test_description='git-p4 p4 branching tests'
   4
   5. ./lib-git-p4.sh
   6
   7test_expect_success 'start p4d' '
   8        start_p4d
   9'
  10
  11#
  12# 1: //depot/main/f1
  13# 2: //depot/main/f2
  14# 3: integrate //depot/main/... -> //depot/branch1/...
  15# 4: //depot/main/f4
  16# 5: //depot/branch1/f5
  17# .: named branch branch2
  18# 6: integrate -b branch2
  19# 7: //depot/branch2/f7
  20# 8: //depot/main/f8
  21#
  22test_expect_success 'basic p4 branches' '
  23        (
  24                cd "$cli" &&
  25                mkdir -p main &&
  26
  27                echo f1 >main/f1 &&
  28                p4 add main/f1 &&
  29                p4 submit -d "main/f1" &&
  30
  31                echo f2 >main/f2 &&
  32                p4 add main/f2 &&
  33                p4 submit -d "main/f2" &&
  34
  35                p4 integrate //depot/main/... //depot/branch1/... &&
  36                p4 submit -d "integrate main to branch1" &&
  37
  38                echo f4 >main/f4 &&
  39                p4 add main/f4 &&
  40                p4 submit -d "main/f4" &&
  41
  42                echo f5 >branch1/f5 &&
  43                p4 add branch1/f5 &&
  44                p4 submit -d "branch1/f5" &&
  45
  46                p4 branch -i <<-EOF &&
  47                Branch: branch2
  48                View: //depot/main/... //depot/branch2/...
  49                EOF
  50
  51                p4 integrate -b branch2 &&
  52                p4 submit -d "integrate main to branch2" &&
  53
  54                echo f7 >branch2/f7 &&
  55                p4 add branch2/f7 &&
  56                p4 submit -d "branch2/f7" &&
  57
  58                echo f8 >main/f8 &&
  59                p4 add main/f8 &&
  60                p4 submit -d "main/f8"
  61        )
  62'
  63
  64test_expect_success 'import main, no branch detection' '
  65        test_when_finished cleanup_git &&
  66        "$GITP4" clone --dest="$git" //depot/main@all &&
  67        (
  68                cd "$git" &&
  69                git log --oneline --graph --decorate --all &&
  70                git rev-list master >wc &&
  71                test_line_count = 4 wc
  72        )
  73'
  74
  75test_expect_success 'import branch1, no branch detection' '
  76        test_when_finished cleanup_git &&
  77        "$GITP4" clone --dest="$git" //depot/branch1@all &&
  78        (
  79                cd "$git" &&
  80                git log --oneline --graph --decorate --all &&
  81                git rev-list master >wc &&
  82                test_line_count = 2 wc
  83        )
  84'
  85
  86test_expect_success 'import branch2, no branch detection' '
  87        test_when_finished cleanup_git &&
  88        "$GITP4" clone --dest="$git" //depot/branch2@all &&
  89        (
  90                cd "$git" &&
  91                git log --oneline --graph --decorate --all &&
  92                git rev-list master >wc &&
  93                test_line_count = 2 wc
  94        )
  95'
  96
  97test_expect_success 'import depot, no branch detection' '
  98        test_when_finished cleanup_git &&
  99        "$GITP4" clone --dest="$git" //depot@all &&
 100        (
 101                cd "$git" &&
 102                git log --oneline --graph --decorate --all &&
 103                git rev-list master >wc &&
 104                test_line_count = 8 wc
 105        )
 106'
 107
 108test_expect_success 'import depot, branch detection' '
 109        test_when_finished cleanup_git &&
 110        "$GITP4" clone --dest="$git" --detect-branches //depot@all &&
 111        (
 112                cd "$git" &&
 113
 114                git log --oneline --graph --decorate --all &&
 115
 116                # 4 main commits
 117                git rev-list master >wc &&
 118                test_line_count = 4 wc &&
 119
 120                # 3 main, 1 integrate, 1 on branch2
 121                git rev-list p4/depot/branch2 >wc &&
 122                test_line_count = 5 wc &&
 123
 124                # no branch1, since no p4 branch created for it
 125                test_must_fail git show-ref p4/depot/branch1
 126        )
 127'
 128
 129test_expect_success 'import depot, branch detection, branchList branch definition' '
 130        test_when_finished cleanup_git &&
 131        test_create_repo "$git" &&
 132        (
 133                cd "$git" &&
 134                git config git-p4.branchList main:branch1 &&
 135                "$GITP4" clone --dest=. --detect-branches //depot@all &&
 136
 137                git log --oneline --graph --decorate --all &&
 138
 139                # 4 main commits
 140                git rev-list master >wc &&
 141                test_line_count = 4 wc &&
 142
 143                # 3 main, 1 integrate, 1 on branch2
 144                git rev-list p4/depot/branch2 >wc &&
 145                test_line_count = 5 wc &&
 146
 147                # 2 main, 1 integrate, 1 on branch1
 148                git rev-list p4/depot/branch1 >wc &&
 149                test_line_count = 4 wc
 150        )
 151'
 152
 153test_expect_success 'restart p4d' '
 154        kill_p4d &&
 155        start_p4d
 156'
 157
 158#
 159# 1: //depot/branch1/file1
 160#    //depot/branch1/file2
 161# 2: integrate //depot/branch1/... -> //depot/branch2/...
 162# 3: //depot/branch1/file3
 163# 4: //depot/branch1/file2 (edit)
 164# 5: integrate //depot/branch1/... -> //depot/branch3/...
 165#
 166## Create a simple branch structure in P4 depot.
 167test_expect_success 'add simple p4 branches' '
 168        (
 169                cd "$cli" &&
 170                mkdir branch1 &&
 171                cd branch1 &&
 172                echo file1 >file1 &&
 173                echo file2 >file2 &&
 174                p4 add file1 file2 &&
 175                p4 submit -d "branch1" &&
 176                p4 integrate //depot/branch1/... //depot/branch2/... &&
 177                p4 submit -d "branch2" &&
 178                echo file3 >file3 &&
 179                p4 add file3 &&
 180                p4 submit -d "add file3 in branch1" &&
 181                p4 open file2 &&
 182                echo update >>file2 &&
 183                p4 submit -d "update file2 in branch1" &&
 184                p4 integrate //depot/branch1/... //depot/branch3/... &&
 185                p4 submit -d "branch3"
 186        )
 187'
 188
 189# Configure branches through git-config and clone them.
 190# All files are tested to make sure branches were cloned correctly.
 191# Finally, make an update to branch1 on P4 side to check if it is imported
 192# correctly by git-p4.
 193test_expect_success 'git-p4 clone simple branches' '
 194        test_when_finished cleanup_git &&
 195        test_create_repo "$git" &&
 196        (
 197                cd "$git" &&
 198                git config git-p4.branchList branch1:branch2 &&
 199                git config --add git-p4.branchList branch1:branch3 &&
 200                "$GITP4" clone --dest=. --detect-branches //depot@all &&
 201                git log --all --graph --decorate --stat &&
 202                git reset --hard p4/depot/branch1 &&
 203                test -f file1 &&
 204                test -f file2 &&
 205                test -f file3 &&
 206                grep -q update file2 &&
 207                git reset --hard p4/depot/branch2 &&
 208                test -f file1 &&
 209                test -f file2 &&
 210                test ! -f file3 &&
 211                test_must_fail grep -q update file2 &&
 212                git reset --hard p4/depot/branch3 &&
 213                test -f file1 &&
 214                test -f file2 &&
 215                test -f file3 &&
 216                grep -q update file2 &&
 217                cd "$cli" &&
 218                cd branch1 &&
 219                p4 edit file2 &&
 220                echo file2_ >>file2 &&
 221                p4 submit -d "update file2 in branch3" &&
 222                cd "$git" &&
 223                git reset --hard p4/depot/branch1 &&
 224                "$GITP4" rebase &&
 225                grep -q file2_ file2
 226        )
 227'
 228
 229test_expect_success 'kill p4d' '
 230        kill_p4d
 231'
 232
 233test_done