Luke Diamand | 06804c7 | 2012-04-11 17:21:24 +0200 | [diff] [blame] | 1 | #!/bin/sh |
| 2 | |
| 3 | test_description='git p4 label tests' |
| 4 | |
| 5 | . ./lib-git-p4.sh |
| 6 | |
| 7 | test_expect_success 'start p4d' ' |
| 8 | start_p4d |
| 9 | ' |
| 10 | |
| 11 | # Basic p4 label import tests. |
| 12 | # |
| 13 | test_expect_success 'basic p4 labels' ' |
| 14 | test_when_finished cleanup_git && |
| 15 | ( |
| 16 | cd "$cli" && |
| 17 | mkdir -p main && |
| 18 | |
| 19 | echo f1 >main/f1 && |
| 20 | p4 add main/f1 && |
| 21 | p4 submit -d "main/f1" && |
| 22 | |
| 23 | echo f2 >main/f2 && |
| 24 | p4 add main/f2 && |
| 25 | p4 submit -d "main/f2" && |
| 26 | |
| 27 | echo f3 >main/file_with_\$metachar && |
| 28 | p4 add main/file_with_\$metachar && |
| 29 | p4 submit -d "file with metachar" && |
| 30 | |
| 31 | p4 tag -l TAG_F1_ONLY main/f1 && |
| 32 | p4 tag -l TAG_WITH\$_SHELL_CHAR main/... && |
Luke Diamand | c8942a2 | 2012-04-11 17:21:24 +0200 | [diff] [blame] | 33 | p4 tag -l this_tag_will_be\ skipped main/... && |
Luke Diamand | 06804c7 | 2012-04-11 17:21:24 +0200 | [diff] [blame] | 34 | |
| 35 | echo f4 >main/f4 && |
| 36 | p4 add main/f4 && |
| 37 | p4 submit -d "main/f4" && |
| 38 | |
| 39 | p4 label -i <<-EOF && |
| 40 | Label: TAG_LONG_LABEL |
| 41 | Description: |
| 42 | A Label first line |
| 43 | A Label second line |
| 44 | View: //depot/... |
| 45 | EOF |
| 46 | |
| 47 | p4 tag -l TAG_LONG_LABEL ... && |
| 48 | |
| 49 | p4 labels ... && |
| 50 | |
| 51 | git p4 clone --dest="$git" //depot@all && |
| 52 | cd "$git" && |
Luke Diamand | c8942a2 | 2012-04-11 17:21:24 +0200 | [diff] [blame] | 53 | git config git-p4.labelImportRegexp ".*TAG.*" && |
Luke Diamand | 06804c7 | 2012-04-11 17:21:24 +0200 | [diff] [blame] | 54 | git p4 sync --import-labels --verbose && |
| 55 | |
| 56 | git tag && |
| 57 | git tag >taglist && |
| 58 | test_line_count = 3 taglist && |
| 59 | |
| 60 | cd main && |
| 61 | git checkout TAG_F1_ONLY && |
| 62 | ! test -f f2 && |
| 63 | git checkout TAG_WITH\$_SHELL_CHAR && |
| 64 | test -f f1 && test -f f2 && test -f file_with_\$metachar && |
| 65 | |
| 66 | git show TAG_LONG_LABEL | grep -q "A Label second line" |
| 67 | ) |
| 68 | ' |
| 69 | # Test some label corner cases: |
| 70 | # |
| 71 | # - two tags on the same file; both should be available |
| 72 | # - a tag that is only on one file; this kind of tag |
| 73 | # cannot be imported (at least not easily). |
| 74 | |
| 75 | test_expect_success 'two labels on the same changelist' ' |
| 76 | test_when_finished cleanup_git && |
| 77 | ( |
| 78 | cd "$cli" && |
| 79 | mkdir -p main && |
| 80 | |
| 81 | p4 edit main/f1 main/f2 && |
| 82 | echo "hello world" >main/f1 && |
| 83 | echo "not in the tag" >main/f2 && |
| 84 | p4 submit -d "main/f[12]: testing two labels" && |
| 85 | |
| 86 | p4 tag -l TAG_F1_1 main/... && |
| 87 | p4 tag -l TAG_F1_2 main/... && |
| 88 | |
| 89 | p4 labels ... && |
| 90 | |
| 91 | git p4 clone --dest="$git" //depot@all && |
| 92 | cd "$git" && |
| 93 | git p4 sync --import-labels && |
| 94 | |
| 95 | git tag | grep TAG_F1 && |
| 96 | git tag | grep -q TAG_F1_1 && |
| 97 | git tag | grep -q TAG_F1_2 && |
| 98 | |
| 99 | cd main && |
| 100 | |
| 101 | git checkout TAG_F1_1 && |
| 102 | ls && |
| 103 | test -f f1 && |
| 104 | |
| 105 | git checkout TAG_F1_2 && |
| 106 | ls && |
| 107 | test -f f1 |
| 108 | ) |
| 109 | ' |
| 110 | |
| 111 | # Export some git tags to p4 |
| 112 | test_expect_success 'export git tags to p4' ' |
| 113 | test_when_finished cleanup_git && |
| 114 | git p4 clone --dest="$git" //depot@all && |
| 115 | ( |
| 116 | cd "$git" && |
| 117 | git tag -m "A tag created in git:xyzzy" GIT_TAG_1 && |
| 118 | echo "hello world" >main/f10 && |
| 119 | git add main/f10 && |
| 120 | git commit -m "Adding file for export test" && |
| 121 | git config git-p4.skipSubmitEdit true && |
| 122 | git p4 submit && |
| 123 | git tag -m "Another git tag" GIT_TAG_2 && |
| 124 | git tag LIGHTWEIGHT_TAG && |
| 125 | git p4 rebase --import-labels --verbose && |
| 126 | git p4 submit --export-labels --verbose |
| 127 | ) && |
| 128 | ( |
| 129 | cd "$cli" && |
| 130 | p4 sync ... && |
| 131 | p4 labels ... | grep GIT_TAG_1 && |
| 132 | p4 labels ... | grep GIT_TAG_2 && |
| 133 | p4 labels ... | grep LIGHTWEIGHT_TAG && |
| 134 | p4 label -o GIT_TAG_1 | grep "tag created in git:xyzzy" && |
| 135 | p4 sync ...@GIT_TAG_1 && |
| 136 | ! test -f main/f10 |
| 137 | p4 sync ...@GIT_TAG_2 && |
| 138 | test -f main/f10 |
| 139 | ) |
| 140 | ' |
| 141 | |
| 142 | # Export a tag from git where an affected file is deleted later on |
| 143 | # Need to create git tags after rebase, since only then can the |
| 144 | # git commits be mapped to p4 changelists. |
| 145 | test_expect_success 'export git tags to p4 with deletion' ' |
| 146 | test_when_finished cleanup_git && |
| 147 | git p4 clone --dest="$git" //depot@all && |
| 148 | ( |
| 149 | cd "$git" && |
| 150 | git p4 sync --import-labels && |
| 151 | echo "deleted file" >main/deleted_file && |
| 152 | git add main/deleted_file && |
| 153 | git commit -m "create deleted file" && |
| 154 | git rm main/deleted_file && |
| 155 | echo "new file" >main/f11 && |
| 156 | git add main/f11 && |
| 157 | git commit -m "delete the deleted file" && |
| 158 | git config git-p4.skipSubmitEdit true && |
| 159 | git p4 submit && |
| 160 | git p4 rebase --import-labels --verbose && |
| 161 | git tag -m "tag on deleted file" GIT_TAG_ON_DELETED HEAD~1 && |
| 162 | git tag -m "tag after deletion" GIT_TAG_AFTER_DELETION HEAD && |
| 163 | git p4 submit --export-labels --verbose |
| 164 | ) && |
| 165 | ( |
| 166 | cd "$cli" && |
| 167 | p4 sync ... && |
| 168 | p4 sync ...@GIT_TAG_ON_DELETED && |
| 169 | test -f main/deleted_file && |
| 170 | p4 sync ...@GIT_TAG_AFTER_DELETION && |
| 171 | ! test -f main/deleted_file && |
| 172 | echo "checking label contents" && |
| 173 | p4 label -o GIT_TAG_ON_DELETED | grep "tag on deleted file" |
| 174 | ) |
| 175 | ' |
| 176 | |
| 177 | # Create a tag in git that cannot be exported to p4 |
| 178 | test_expect_success 'tag that cannot be exported' ' |
| 179 | test_when_finished cleanup_git && |
| 180 | git p4 clone --dest="$git" //depot@all && |
| 181 | ( |
| 182 | cd "$git" && |
| 183 | git checkout -b a_branch && |
| 184 | echo "hello" >main/f12 && |
| 185 | git add main/f12 && |
| 186 | git commit -m "adding f12" && |
| 187 | git tag -m "tag on a_branch" GIT_TAG_ON_A_BRANCH && |
| 188 | git checkout master && |
| 189 | git p4 submit --export-labels |
| 190 | ) && |
| 191 | ( |
| 192 | cd "$cli" && |
| 193 | p4 sync ... && |
| 194 | !(p4 labels | grep GIT_TAG_ON_A_BRANCH) |
| 195 | ) |
| 196 | ' |
| 197 | |
Luke Diamand | e71f6a5 | 2012-05-11 07:25:16 +0100 | [diff] [blame] | 198 | test_expect_success 'use git config to enable import/export of tags' ' |
| 199 | git p4 clone --verbose --dest="$git" //depot@all && |
| 200 | ( |
| 201 | cd "$git" && |
| 202 | git config git-p4.exportLabels true && |
| 203 | git config git-p4.importLabels true && |
| 204 | git tag CFG_A_GIT_TAG && |
| 205 | git p4 rebase --verbose && |
| 206 | git p4 submit --verbose && |
| 207 | git tag && |
| 208 | git tag | grep TAG_F1_1 |
| 209 | ) && |
| 210 | ( |
| 211 | cd "$cli" && |
| 212 | p4 labels && |
| 213 | p4 labels | grep CFG_A_GIT_TAG |
| 214 | ) |
| 215 | ' |
| 216 | |
| 217 | |
Luke Diamand | 06804c7 | 2012-04-11 17:21:24 +0200 | [diff] [blame] | 218 | test_expect_success 'kill p4d' ' |
| 219 | kill_p4d |
| 220 | ' |
| 221 | |
| 222 | test_done |