summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-25 15:05:14 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-06-25 15:05:14 +0000
commitaf060855507b1fe5f8a3c5cceababc0568d0e2d8 (patch)
tree78ff47950ba60094ec8e4351fb0926a2b1e7024d
parente202a7bd29fab9da36f1d7a686479fe04885c06a (diff)
* lib/fileutils.rb (FileUtils#rmdir): Backport -p (parents). This
fixes "make clean". git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@28436 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--lib/fileutils.rb15
2 files changed, 17 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 69cd8a7beb..415d354690 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Sat Jun 26 00:04:27 2010 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/fileutils.rb (FileUtils#rmdir): Backport -p (parents). This
+ fixes "make clean".
+
Fri Jun 25 23:45:24 2010 Akinori MUSHA <knu@iDaemons.org>
* common.mk (version.$(OBJEXT)): Fix build. (GNU make seems to
diff --git a/lib/fileutils.rb b/lib/fileutils.rb
index d3a623f808..2105a7721e 100644
--- a/lib/fileutils.rb
+++ b/lib/fileutils.rb
@@ -258,15 +258,24 @@ module FileUtils
def rmdir(list, options = {})
fu_check_options options, OPT_TABLE['rmdir']
list = fu_list(list)
- fu_output_message "rmdir #{list.join ' '}" if options[:verbose]
+ parents = options[:parents]
+ fu_output_message "rmdir #{parents ? '-p ' : ''}#{list.join ' '}" if options[:verbose]
return if options[:noop]
list.each do |dir|
- Dir.rmdir dir.sub(%r</\z>, '')
+ begin
+ Dir.rmdir(dir = dir.sub(%r</\z>, ''))
+ if parents
+ until (parent = File.dirname(dir)) == '.' or parent == dir
+ Dir.rmdir(dir)
+ end
+ end
+ rescue Errno::ENOTEMPTY, Errno::ENOENT
+ end
end
end
module_function :rmdir
- OPT_TABLE['rmdir'] = [:noop, :verbose]
+ OPT_TABLE['rmdir'] = [:parents, :noop, :verbose]
#
# Options: force noop verbose