Function: ange-ftp-delete-directory
ange-ftp-delete-directory is a byte-compiled function defined in
ange-ftp.el.gz.
Signature
(ange-ftp-delete-directory DIR &optional RECURSIVE TRASH)
Source Code
;; Defined in /usr/src/emacs/lisp/net/ange-ftp.el.gz
(defun ange-ftp-delete-directory (dir &optional recursive trash)
(if (file-directory-p dir)
;; Trashing directories does not work yet, because
;; `rename-file', called in `move-file-to-trash', does not
;; handle directories.
(if nil ; (and delete-by-moving-to-trash trash)
;; Move non-empty dir to trash only if recursive deletion was
;; requested.
(if (not (or recursive (directory-empty-p dir)))
(signal 'ftp-error
(list "Directory is not empty, not moving to trash"))
(move-file-to-trash dir))
(let ((parsed (ange-ftp-ftp-name dir)))
(if recursive
(mapc
(lambda (file)
(if (file-directory-p file)
(ange-ftp-delete-directory file recursive)
(delete-file file)))
(directory-files dir 'full directory-files-no-dot-files-regexp)))
(if parsed
(let* ((host (nth 0 parsed))
(user (nth 1 parsed))
;; Some ftp's on unix machines (at least on Suns)
;; insist that rmdir take a filename, and not a
;; directory-name name as an arg. Argh!! This is a bug.
;; Non-unix machines will probably always insist
;; that rmdir takes a directory-name as an arg
;; (as the ftp man page says it should).
(name (ange-ftp-quote-string
(if (eq (ange-ftp-host-type host) 'unix)
(ange-ftp-real-directory-file-name
(nth 2 parsed))
(ange-ftp-real-file-name-as-directory
(nth 2 parsed)))))
(abbr (ange-ftp-abbreviate-filename dir))
(result
(progn
;; CWD must not in this directory.
(ange-ftp-cd host user "/" 'noerror)
(ange-ftp-send-cmd host user
(list 'rmdir name)
(format "Removing directory %s"
abbr)))))
(or (car result)
(ange-ftp-error host user
(format "Could not remove directory %s: %s"
dir
(cdr result))))
(ange-ftp-delete-file-entry dir t))
(ange-ftp-real-delete-directory dir recursive trash))))
(error "Not a directory: %s" dir)))