t / t7300-clean.shon commit Merge branch 'maint-1.5.4' into maint (d6d96f8)
   1#!/bin/sh
   2#
   3# Copyright (c) 2007 Michael Spang
   4#
   5
   6test_description='git-clean basic tests'
   7
   8. ./test-lib.sh
   9
  10git config clean.requireForce no
  11
  12test_expect_success 'setup' '
  13
  14        mkdir -p src &&
  15        touch src/part1.c Makefile &&
  16        echo build >.gitignore &&
  17        echo \*.o >>.gitignore &&
  18        git add . &&
  19        git-commit -m setup &&
  20        touch src/part2.c README &&
  21        git add .
  22
  23'
  24
  25test_expect_success 'git-clean' '
  26
  27        mkdir -p build docs &&
  28        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
  29        git-clean &&
  30        test -f Makefile &&
  31        test -f README &&
  32        test -f src/part1.c &&
  33        test -f src/part2.c &&
  34        test ! -f a.out &&
  35        test ! -f src/part3.c &&
  36        test -f docs/manual.txt &&
  37        test -f obj.o &&
  38        test -f build/lib.so
  39
  40'
  41
  42test_expect_success 'git-clean src/' '
  43
  44        mkdir -p build docs &&
  45        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
  46        git-clean src/ &&
  47        test -f Makefile &&
  48        test -f README &&
  49        test -f src/part1.c &&
  50        test -f src/part2.c &&
  51        test -f a.out &&
  52        test ! -f src/part3.c &&
  53        test -f docs/manual.txt &&
  54        test -f obj.o &&
  55        test -f build/lib.so
  56
  57'
  58
  59test_expect_success 'git-clean src/ src/' '
  60
  61        mkdir -p build docs &&
  62        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
  63        git-clean src/ src/ &&
  64        test -f Makefile &&
  65        test -f README &&
  66        test -f src/part1.c &&
  67        test -f src/part2.c &&
  68        test -f a.out &&
  69        test ! -f src/part3.c &&
  70        test -f docs/manual.txt &&
  71        test -f obj.o &&
  72        test -f build/lib.so
  73
  74'
  75
  76test_expect_success 'git-clean with prefix' '
  77
  78        mkdir -p build docs &&
  79        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
  80        (cd src/ && git-clean) &&
  81        test -f Makefile &&
  82        test -f README &&
  83        test -f src/part1.c &&
  84        test -f src/part2.c &&
  85        test -f a.out &&
  86        test ! -f src/part3.c &&
  87        test -f docs/manual.txt &&
  88        test -f obj.o &&
  89        test -f build/lib.so
  90
  91'
  92
  93test_expect_success 'git-clean with relative prefix' '
  94
  95        mkdir -p build docs &&
  96        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
  97        would_clean=$(
  98                cd docs &&
  99                git clean -n ../src |
 100                sed -n -e "s|^Would remove ||p"
 101        ) &&
 102        test "$would_clean" = ../src/part3.c || {
 103                echo "OOps <$would_clean>"
 104                false
 105        }
 106'
 107
 108test_expect_success 'git-clean with absolute path' '
 109
 110        mkdir -p build docs &&
 111        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 112        would_clean=$(
 113                cd docs &&
 114                git clean -n $(pwd)/../src |
 115                sed -n -e "s|^Would remove ||p"
 116        ) &&
 117        test "$would_clean" = ../src/part3.c || {
 118                echo "OOps <$would_clean>"
 119                false
 120        }
 121'
 122
 123test_expect_success 'git-clean with out of work tree relative path' '
 124
 125        mkdir -p build docs &&
 126        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 127        (
 128                cd docs &&
 129                test_must_fail git clean -n ../..
 130        )
 131'
 132
 133test_expect_success 'git-clean with out of work tree absolute path' '
 134
 135        mkdir -p build docs &&
 136        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 137        dd=$(cd .. && pwd) &&
 138        (
 139                cd docs &&
 140                test_must_fail git clean -n $dd
 141        )
 142'
 143
 144test_expect_success 'git-clean -d with prefix and path' '
 145
 146        mkdir -p build docs src/feature &&
 147        touch a.out src/part3.c src/feature/file.c docs/manual.txt obj.o build/lib.so &&
 148        (cd src/ && git-clean -d feature/) &&
 149        test -f Makefile &&
 150        test -f README &&
 151        test -f src/part1.c &&
 152        test -f src/part2.c &&
 153        test -f a.out &&
 154        test -f src/part3.c &&
 155        test ! -f src/feature/file.c &&
 156        test -f docs/manual.txt &&
 157        test -f obj.o &&
 158        test -f build/lib.so
 159
 160'
 161
 162test_expect_success 'git-clean symbolic link' '
 163
 164        mkdir -p build docs &&
 165        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 166        ln -s docs/manual.txt src/part4.c
 167        git-clean &&
 168        test -f Makefile &&
 169        test -f README &&
 170        test -f src/part1.c &&
 171        test -f src/part2.c &&
 172        test ! -f a.out &&
 173        test ! -f src/part3.c &&
 174        test ! -f src/part4.c &&
 175        test -f docs/manual.txt &&
 176        test -f obj.o &&
 177        test -f build/lib.so
 178
 179'
 180
 181test_expect_success 'git-clean with wildcard' '
 182
 183        touch a.clean b.clean other.c &&
 184        git-clean "*.clean" &&
 185        test -f Makefile &&
 186        test -f README &&
 187        test -f src/part1.c &&
 188        test -f src/part2.c &&
 189        test ! -f a.clean &&
 190        test ! -f b.clean &&
 191        test -f other.c
 192
 193'
 194
 195test_expect_success 'git-clean -n' '
 196
 197        mkdir -p build docs &&
 198        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 199        git-clean -n &&
 200        test -f Makefile &&
 201        test -f README &&
 202        test -f src/part1.c &&
 203        test -f src/part2.c &&
 204        test -f a.out &&
 205        test -f src/part3.c &&
 206        test -f docs/manual.txt &&
 207        test -f obj.o &&
 208        test -f build/lib.so
 209
 210'
 211
 212test_expect_success 'git-clean -d' '
 213
 214        mkdir -p build docs &&
 215        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 216        git-clean -d &&
 217        test -f Makefile &&
 218        test -f README &&
 219        test -f src/part1.c &&
 220        test -f src/part2.c &&
 221        test ! -f a.out &&
 222        test ! -f src/part3.c &&
 223        test ! -d docs &&
 224        test -f obj.o &&
 225        test -f build/lib.so
 226
 227'
 228
 229test_expect_success 'git-clean -d src/ examples/' '
 230
 231        mkdir -p build docs examples &&
 232        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so examples/1.c &&
 233        git-clean -d src/ examples/ &&
 234        test -f Makefile &&
 235        test -f README &&
 236        test -f src/part1.c &&
 237        test -f src/part2.c &&
 238        test -f a.out &&
 239        test ! -f src/part3.c &&
 240        test ! -f examples/1.c &&
 241        test -f docs/manual.txt &&
 242        test -f obj.o &&
 243        test -f build/lib.so
 244
 245'
 246
 247test_expect_success 'git-clean -x' '
 248
 249        mkdir -p build docs &&
 250        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 251        git-clean -x &&
 252        test -f Makefile &&
 253        test -f README &&
 254        test -f src/part1.c &&
 255        test -f src/part2.c &&
 256        test ! -f a.out &&
 257        test ! -f src/part3.c &&
 258        test -f docs/manual.txt &&
 259        test ! -f obj.o &&
 260        test -f build/lib.so
 261
 262'
 263
 264test_expect_success 'git-clean -d -x' '
 265
 266        mkdir -p build docs &&
 267        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 268        git-clean -d -x &&
 269        test -f Makefile &&
 270        test -f README &&
 271        test -f src/part1.c &&
 272        test -f src/part2.c &&
 273        test ! -f a.out &&
 274        test ! -f src/part3.c &&
 275        test ! -d docs &&
 276        test ! -f obj.o &&
 277        test ! -d build
 278
 279'
 280
 281test_expect_success 'git-clean -X' '
 282
 283        mkdir -p build docs &&
 284        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 285        git-clean -X &&
 286        test -f Makefile &&
 287        test -f README &&
 288        test -f src/part1.c &&
 289        test -f src/part2.c &&
 290        test -f a.out &&
 291        test -f src/part3.c &&
 292        test -f docs/manual.txt &&
 293        test ! -f obj.o &&
 294        test -f build/lib.so
 295
 296'
 297
 298test_expect_success 'git-clean -d -X' '
 299
 300        mkdir -p build docs &&
 301        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 302        git-clean -d -X &&
 303        test -f Makefile &&
 304        test -f README &&
 305        test -f src/part1.c &&
 306        test -f src/part2.c &&
 307        test -f a.out &&
 308        test -f src/part3.c &&
 309        test -f docs/manual.txt &&
 310        test ! -f obj.o &&
 311        test ! -d build
 312
 313'
 314
 315test_expect_success 'clean.requireForce defaults to true' '
 316
 317        git config --unset clean.requireForce &&
 318        ! git-clean
 319
 320'
 321
 322test_expect_success 'clean.requireForce' '
 323
 324        git config clean.requireForce true &&
 325        ! git-clean
 326
 327'
 328
 329test_expect_success 'clean.requireForce and -n' '
 330
 331        mkdir -p build docs &&
 332        touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 333        git-clean -n &&
 334        test -f Makefile &&
 335        test -f README &&
 336        test -f src/part1.c &&
 337        test -f src/part2.c &&
 338        test -f a.out &&
 339        test -f src/part3.c &&
 340        test -f docs/manual.txt &&
 341        test -f obj.o &&
 342        test -f build/lib.so
 343
 344'
 345
 346test_expect_success 'clean.requireForce and -f' '
 347
 348        git-clean -f &&
 349        test -f README &&
 350        test -f src/part1.c &&
 351        test -f src/part2.c &&
 352        test ! -f a.out &&
 353        test ! -f src/part3.c &&
 354        test -f docs/manual.txt &&
 355        test -f obj.o &&
 356        test -f build/lib.so
 357
 358'
 359
 360test_expect_success 'core.excludesfile' '
 361
 362        echo excludes >excludes &&
 363        echo included >included &&
 364        git config core.excludesfile excludes &&
 365        output=$(git clean -n excludes included 2>&1) &&
 366        expr "$output" : ".*included" >/dev/null &&
 367        ! expr "$output" : ".*excludes" >/dev/null
 368
 369'
 370
 371test_expect_success 'removal failure' '
 372
 373        mkdir foo &&
 374        touch foo/bar &&
 375        exec <foo/bar &&
 376        chmod 0 foo &&
 377        test_must_fail git clean -f -d
 378
 379'
 380chmod 755 foo
 381
 382test_done