1#!/bin/sh 2# 3# Copyright (c) 2005-2006 Pavel Roskin 4# 5 6USAGE="[-d] [-f] [-n] [-q] [-x | -X] [--] <paths>..." 7LONG_USAGE='Clean untracked files from the working directory 8 -d remove directories as well 9 -f override clean.requireForce and clean anyway 10 -n don'\''t remove anything, just show what would be done 11 -q be quiet, only report errors 12 -x remove ignored files as well 13 -X remove only ignored files 14When optional <paths>... arguments are given, the paths 15affected are further limited to those that match them.' 16SUBDIRECTORY_OK=Yes 17. git-sh-setup 18require_work_tree 19 20ignored= 21ignoredonly= 22cleandir= 23rmf="rm -f --" 24rmrf="rm -rf --" 25rm_refuse="echo Not removing" 26echo1="echo" 27 28disabled=$(git config --bool clean.requireForce) 29 30whiletest$#!=0 31do 32case"$1"in 33-d) 34 cleandir=1 35;; 36-f) 37 disabled=false 38;; 39-n) 40 disabled=false 41 rmf="echo Would remove" 42 rmrf="echo Would remove" 43 rm_refuse="echo Would not remove" 44 echo1=":" 45;; 46-q) 47 echo1=":" 48;; 49-x) 50 ignored=1 51;; 52-X) 53 ignoredonly=1 54;; 55--) 56shift 57break 58;; 59-*) 60 usage 61;; 62*) 63break 64esac 65shift 66done 67 68# requireForce used to default to false but now it defaults to true. 69# IOW, lack of explicit "clean.requireForce = false" is taken as 70# "clean.requireForce = true". 71case"$disabled"in 72"") 73 die "clean.requireForce not set and -n or -f not given; refusing to clean" 74;; 75"true") 76 die "clean.requireForce set and -n or -f not given; refusing to clean" 77;; 78esac 79 80case"$ignored,$ignoredonly"in 811,1) usage;; 82esac 83 84if[-z"$ignored"];then 85 excl="--exclude-per-directory=.gitignore" 86if[-f"$GIT_DIR/info/exclude"];then 87 excl_info="--exclude-from=$GIT_DIR/info/exclude" 88fi 89if["$ignoredonly"];then 90 excl="$excl--ignored" 91fi 92fi 93 94git ls-files --others --directory$excl ${excl_info:+"$excl_info"}--"$@"| 95whileread -rfile;do 96if[-d"$file"-a!-L"$file"];then 97if[-z"$cleandir"];then 98$rm_refuse"$file" 99continue 100fi 101$echo1"Removing$file" 102$rmrf"$file" 103else 104$echo1"Removing$file" 105$rmf"$file" 106fi 107done