|  | #!/bin/sh | 
|  | # | 
|  | # Copyright (c) 2005-2006 Pavel Roskin | 
|  | # | 
|  |  | 
|  | OPTIONS_KEEPDASHDASH= | 
|  | OPTIONS_SPEC="\ | 
|  | git-clean [options] <paths>... | 
|  |  | 
|  | Clean untracked files from the working directory | 
|  |  | 
|  | When optional <paths>... arguments are given, the paths | 
|  | affected are further limited to those that match them. | 
|  | -- | 
|  | d remove directories as well | 
|  | f override clean.requireForce and clean anyway | 
|  | n don't remove anything, just show what would be done | 
|  | q be quiet, only report errors | 
|  | x remove ignored files as well | 
|  | X remove only ignored files" | 
|  |  | 
|  | SUBDIRECTORY_OK=Yes | 
|  | . git-sh-setup | 
|  | require_work_tree | 
|  |  | 
|  | ignored= | 
|  | ignoredonly= | 
|  | cleandir= | 
|  | rmf="rm -f --" | 
|  | rmrf="rm -rf --" | 
|  | rm_refuse="echo Not removing" | 
|  | echo1="echo" | 
|  |  | 
|  | disabled=$(git config --bool clean.requireForce) | 
|  |  | 
|  | while test $# != 0 | 
|  | do | 
|  | case "$1" in | 
|  | -d) | 
|  | cleandir=1 | 
|  | ;; | 
|  | -f) | 
|  | disabled=false | 
|  | ;; | 
|  | -n) | 
|  | disabled=false | 
|  | rmf="echo Would remove" | 
|  | rmrf="echo Would remove" | 
|  | rm_refuse="echo Would not remove" | 
|  | echo1=":" | 
|  | ;; | 
|  | -q) | 
|  | echo1=":" | 
|  | ;; | 
|  | -x) | 
|  | ignored=1 | 
|  | ;; | 
|  | -X) | 
|  | ignoredonly=1 | 
|  | ;; | 
|  | --) | 
|  | shift | 
|  | break | 
|  | ;; | 
|  | *) | 
|  | usage # should not happen | 
|  | ;; | 
|  | esac | 
|  | shift | 
|  | done | 
|  |  | 
|  | # requireForce used to default to false but now it defaults to true. | 
|  | # IOW, lack of explicit "clean.requireForce = false" is taken as | 
|  | # "clean.requireForce = true". | 
|  | case "$disabled" in | 
|  | "") | 
|  | die "clean.requireForce not set and -n or -f not given; refusing to clean" | 
|  | ;; | 
|  | "true") | 
|  | die "clean.requireForce set and -n or -f not given; refusing to clean" | 
|  | ;; | 
|  | esac | 
|  |  | 
|  | if [ "$ignored,$ignoredonly" = "1,1" ]; then | 
|  | die "-x and -X cannot be set together" | 
|  | fi | 
|  |  | 
|  | if [ -z "$ignored" ]; then | 
|  | excl="--exclude-per-directory=.gitignore" | 
|  | excl_info= excludes_file= | 
|  | if [ -f "$GIT_DIR/info/exclude" ]; then | 
|  | excl_info="--exclude-from=$GIT_DIR/info/exclude" | 
|  | fi | 
|  | if cfg_excl=$(git config core.excludesfile) && test -f "$cfg_excl" | 
|  | then | 
|  | excludes_file="--exclude-from=$cfg_excl" | 
|  | fi | 
|  | if [ "$ignoredonly" ]; then | 
|  | excl="$excl --ignored" | 
|  | fi | 
|  | fi | 
|  |  | 
|  | git ls-files --others --directory \ | 
|  | $excl ${excl_info:+"$excl_info"} ${excludes_file:+"$excludes_file"} \ | 
|  | -- "$@" | | 
|  | while read -r file; do | 
|  | if [ -d "$file" -a ! -L "$file" ]; then | 
|  | if [ -z "$cleandir" ]; then | 
|  | $rm_refuse "$file" | 
|  | continue | 
|  | fi | 
|  | $echo1 "Removing $file" | 
|  | $rmrf "$file" | 
|  | else | 
|  | $echo1 "Removing $file" | 
|  | $rmf "$file" | 
|  | fi | 
|  | done |