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