t / t6018-rev-list-glob.shon commit Merge branch 'sh/mingw-safer-compat-poll' (1961efe)
   1#!/bin/sh
   2
   3test_description='rev-list/rev-parse --glob'
   4
   5. ./test-lib.sh
   6
   7commit () {
   8        test_tick &&
   9        echo $1 > foo &&
  10        git add foo &&
  11        git commit -m "$1"
  12}
  13
  14compare () {
  15        # Split arguments on whitespace.
  16        git $1 $2 >expected &&
  17        git $1 $3 >actual &&
  18        test_cmp expected actual
  19}
  20
  21test_expect_success 'setup' '
  22
  23        commit master &&
  24        git checkout -b subspace/one master &&
  25        commit one &&
  26        git checkout -b subspace/two master &&
  27        commit two &&
  28        git checkout -b subspace-x master &&
  29        commit subspace-x &&
  30        git checkout -b other/three master &&
  31        commit three &&
  32        git checkout -b someref master &&
  33        commit some &&
  34        git checkout master &&
  35        commit master2 &&
  36        git tag foo/bar master &&
  37        commit master3 &&
  38        git update-ref refs/remotes/foo/baz master &&
  39        commit master4
  40'
  41
  42test_expect_success 'rev-parse --glob=refs/heads/subspace/*' '
  43
  44        compare rev-parse "subspace/one subspace/two" "--glob=refs/heads/subspace/*"
  45
  46'
  47
  48test_expect_success 'rev-parse --glob=heads/subspace/*' '
  49
  50        compare rev-parse "subspace/one subspace/two" "--glob=heads/subspace/*"
  51
  52'
  53
  54test_expect_success 'rev-parse --glob=refs/heads/subspace/' '
  55
  56        compare rev-parse "subspace/one subspace/two" "--glob=refs/heads/subspace/"
  57
  58'
  59
  60test_expect_success 'rev-parse --glob=heads/subspace/' '
  61
  62        compare rev-parse "subspace/one subspace/two" "--glob=heads/subspace/"
  63
  64'
  65
  66test_expect_success 'rev-parse --glob=heads/subspace' '
  67
  68        compare rev-parse "subspace/one subspace/two" "--glob=heads/subspace"
  69
  70'
  71
  72test_expect_failure 'rev-parse accepts --glob as detached option' '
  73
  74        compare rev-parse "subspace/one subspace/two" "--glob heads/subspace"
  75
  76'
  77
  78test_expect_failure 'rev-parse is not confused by option-like glob' '
  79
  80        compare rev-parse "master" "--glob --symbolic master"
  81
  82'
  83
  84test_expect_success 'rev-parse --branches=subspace/*' '
  85
  86        compare rev-parse "subspace/one subspace/two" "--branches=subspace/*"
  87
  88'
  89
  90test_expect_success 'rev-parse --branches=subspace/' '
  91
  92        compare rev-parse "subspace/one subspace/two" "--branches=subspace/"
  93
  94'
  95
  96test_expect_success 'rev-parse --branches=subspace' '
  97
  98        compare rev-parse "subspace/one subspace/two" "--branches=subspace"
  99
 100'
 101
 102test_expect_success 'rev-parse --glob=heads/subspace/* --glob=heads/other/*' '
 103
 104        compare rev-parse "subspace/one subspace/two other/three" "--glob=heads/subspace/* --glob=heads/other/*"
 105
 106'
 107
 108test_expect_success 'rev-parse --glob=heads/someref/* master' '
 109
 110        compare rev-parse "master" "--glob=heads/someref/* master"
 111
 112'
 113
 114test_expect_success 'rev-parse --glob=heads/*' '
 115
 116        compare rev-parse "master other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"
 117
 118'
 119
 120test_expect_success 'rev-parse --tags=foo' '
 121
 122        compare rev-parse "foo/bar" "--tags=foo"
 123
 124'
 125
 126test_expect_success 'rev-parse --remotes=foo' '
 127
 128        compare rev-parse "foo/baz" "--remotes=foo"
 129
 130'
 131
 132test_expect_success 'rev-parse --exclude with --branches' '
 133        compare rev-parse "--exclude=*/* --branches" "master someref subspace-x"
 134'
 135
 136test_expect_success 'rev-parse --exclude with --all' '
 137        compare rev-parse "--exclude=refs/remotes/* --all" "--branches --tags"
 138'
 139
 140test_expect_success 'rev-parse accumulates multiple --exclude' '
 141        compare rev-parse "--exclude=refs/remotes/* --exclude=refs/tags/* --all" --branches
 142'
 143
 144test_expect_success 'rev-parse --branches clears --exclude' '
 145        compare rev-parse "--exclude=* --branches --branches" "--branches"
 146'
 147
 148test_expect_success 'rev-parse --tags clears --exclude' '
 149        compare rev-parse "--exclude=* --tags --tags" "--tags"
 150'
 151
 152test_expect_success 'rev-parse --all clears --exclude' '
 153        compare rev-parse "--exclude=* --all --all" "--all"
 154'
 155
 156test_expect_success 'rev-list --glob=refs/heads/subspace/*' '
 157
 158        compare rev-list "subspace/one subspace/two" "--glob=refs/heads/subspace/*"
 159
 160'
 161
 162test_expect_success 'rev-list --glob refs/heads/subspace/*' '
 163
 164        compare rev-list "subspace/one subspace/two" "--glob refs/heads/subspace/*"
 165
 166'
 167
 168test_expect_success 'rev-list not confused by option-like --glob arg' '
 169
 170        compare rev-list "master" "--glob -0 master"
 171
 172'
 173
 174test_expect_success 'rev-list --glob=heads/subspace/*' '
 175
 176        compare rev-list "subspace/one subspace/two" "--glob=heads/subspace/*"
 177
 178'
 179
 180test_expect_success 'rev-list --glob=refs/heads/subspace/' '
 181
 182        compare rev-list "subspace/one subspace/two" "--glob=refs/heads/subspace/"
 183
 184'
 185
 186test_expect_success 'rev-list --glob=heads/subspace/' '
 187
 188        compare rev-list "subspace/one subspace/two" "--glob=heads/subspace/"
 189
 190'
 191
 192test_expect_success 'rev-list --glob=heads/subspace' '
 193
 194        compare rev-list "subspace/one subspace/two" "--glob=heads/subspace"
 195
 196'
 197
 198test_expect_success 'rev-list --branches=subspace/*' '
 199
 200        compare rev-list "subspace/one subspace/two" "--branches=subspace/*"
 201
 202'
 203
 204test_expect_success 'rev-list --branches=subspace/' '
 205
 206        compare rev-list "subspace/one subspace/two" "--branches=subspace/"
 207
 208'
 209
 210test_expect_success 'rev-list --branches=subspace' '
 211
 212        compare rev-list "subspace/one subspace/two" "--branches=subspace"
 213
 214'
 215
 216test_expect_success 'rev-list --branches' '
 217
 218        compare rev-list "master subspace-x someref other/three subspace/one subspace/two" "--branches"
 219
 220'
 221
 222test_expect_success 'rev-list --glob=heads/someref/* master' '
 223
 224        compare rev-list "master" "--glob=heads/someref/* master"
 225
 226'
 227
 228test_expect_success 'rev-list --glob=heads/subspace/* --glob=heads/other/*' '
 229
 230        compare rev-list "subspace/one subspace/two other/three" "--glob=heads/subspace/* --glob=heads/other/*"
 231
 232'
 233
 234test_expect_success 'rev-list --glob=heads/*' '
 235
 236        compare rev-list "master other/three someref subspace-x subspace/one subspace/two" "--glob=heads/*"
 237
 238'
 239
 240test_expect_success 'rev-list --tags=foo' '
 241
 242        compare rev-list "foo/bar" "--tags=foo"
 243
 244'
 245
 246test_expect_success 'rev-list --tags' '
 247
 248        compare rev-list "foo/bar" "--tags"
 249
 250'
 251
 252test_expect_success 'rev-list --remotes=foo' '
 253
 254        compare rev-list "foo/baz" "--remotes=foo"
 255
 256'
 257
 258test_expect_success 'rev-list --exclude with --branches' '
 259        compare rev-list "--exclude=*/* --branches" "master someref subspace-x"
 260'
 261
 262test_expect_success 'rev-list --exclude with --all' '
 263        compare rev-list "--exclude=refs/remotes/* --all" "--branches --tags"
 264'
 265
 266test_expect_success 'rev-list accumulates multiple --exclude' '
 267        compare rev-list "--exclude=refs/remotes/* --exclude=refs/tags/* --all" --branches
 268'
 269
 270test_expect_success 'rev-list should succeed with empty output on empty stdin' '
 271        git rev-list --stdin </dev/null >actual &&
 272        test_must_be_empty actual
 273'
 274
 275test_expect_success 'rev-list should succeed with empty output with all refs excluded' '
 276        git rev-list --exclude=* --all >actual &&
 277        test_must_be_empty actual
 278'
 279
 280test_expect_success 'rev-list should succeed with empty output with empty --all' '
 281        (
 282                test_create_repo empty &&
 283                cd empty &&
 284                git rev-list --all >actual &&
 285                test_must_be_empty actual
 286        )
 287'
 288
 289test_expect_success 'rev-list should succeed with empty output with empty glob' '
 290        git rev-list --glob=does-not-match-anything >actual &&
 291        test_must_be_empty actual
 292'
 293
 294test_expect_success 'shortlog accepts --glob/--tags/--remotes' '
 295
 296        compare shortlog "subspace/one subspace/two" --branches=subspace &&
 297        compare shortlog \
 298          "master subspace-x someref other/three subspace/one subspace/two" \
 299          --branches &&
 300        compare shortlog master "--glob=heads/someref/* master" &&
 301        compare shortlog "subspace/one subspace/two other/three" \
 302          "--glob=heads/subspace/* --glob=heads/other/*" &&
 303        compare shortlog \
 304          "master other/three someref subspace-x subspace/one subspace/two" \
 305          "--glob=heads/*" &&
 306        compare shortlog foo/bar --tags=foo &&
 307        compare shortlog foo/bar --tags &&
 308        compare shortlog foo/baz --remotes=foo
 309
 310'
 311
 312test_expect_failure 'shortlog accepts --glob as detached option' '
 313
 314        compare shortlog \
 315          "master other/three someref subspace-x subspace/one subspace/two" \
 316          "--glob heads/*"
 317
 318'
 319
 320test_expect_failure 'shortlog --glob is not confused by option-like argument' '
 321
 322        compare shortlog master "--glob -e master"
 323
 324'
 325
 326test_done