######################################################################## # Copyright (C) 2006 Aleksey Nogin # # Permission is hereby granted, free of charge, to any person # obtaining a copy of this file, to deal in the File without # restriction, including without limitation the rights to use, # copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the File, and to permit persons to whom the File # is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be # included in all copies or substantial portions of the File. # # THE FILE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES # OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # FILE OR THE USE OR OTHER DEALINGS IN THE FILE. ######################################################################## # This file defines an svn_realclean utility. The svn_realclean utility removes # all unversioned files in a subversion wc. # # Usage: svn_realclean [options] [dir1 [dir2 ...]] # Options are: # -f Do not ask whether to remove files # -i Ignore the file # -help Display this list of options # --help Display this list of options # If no directories are given, . is used. open configure/Configure static. = SVN_AVAILABLE = $(CheckProg svn) if $(SVN_AVAILABLE) Shell. += svn_realclean(argv) = usage(msg,err) = println($"""$(msg) Usage: svn_realclean [options] [dir1 [dir2 ...]] Options are: -f Do not ask whether to remove files -i Ignore the file -help Display this list of options --help Display this list of options If no directories are given, . is used. """) exit($(err)) FORCE=false IGNORES[]= DIRS[] = $(dir .) while $(gt $(length $(argv)), 0) match $(nth 0, $(argv)) case $'^-f$' FORCE=true argv = $(nth-tl 1, $(argv)) export case $'^-i$' if $(gt $(length $(argv)), 1) IGNORES[] += $(file $(nth 1, $(argv))) argv = $(nth-tl 2, $(argv)) export else usage($"The -i option requires an argument", 1) export case $'^--?help$' usage($"The svn_realclean utility removes all unversioned files in a subversion wc.", 0) case $'^-' usage($"Unknown option: $(nth 0, $(argv))", 1) default DIRS[] = $(dir $(argv)) if $(FORCE) Shell. += do_clean(IGNORES) = awk() case $'^[I?] ' f = $(file $2) if $(not $(mem $f, $(IGNORES))) println($"Removing $f...") rm -rf $f svn st --no-ignore $(DIRS) | do_clean $(IGNORES) else # rm -ri will require a real stdin, so we can not use the same # "svn ... | do_clean" pipeline here. tmp = $(tmpfile svn_realclean) svn st --no-ignore $(DIRS) > $(tmp) awk($(tmp)) case $'^[I?] ' f = $(file $2) if $(not $(mem $f, $(IGNORES))) # println($"Removing $f...") rm -ri $f rm -rf $(tmp) export else Shell. += svn_realclean(argv) = eprintln($"svn_realclean requires the svn binary, but svn is missing") exit(1) export # vim:tw=80:ts=4:et