Function: nnmaildir-request-delete-group

nnmaildir-request-delete-group is a byte-compiled function defined in nnmaildir.el.gz.

Signature

(nnmaildir-request-delete-group GNAME FORCE &optional SERVER)

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/nnmaildir.el.gz
(defun nnmaildir-request-delete-group (gname force &optional server)
  (let ((group (nnmaildir--prepare server gname))
	pgname grp-dir target dir ls deactivate-mark)
    (catch 'return
      (unless group
	(setf (nnmaildir--srv-error nnmaildir--cur-server)
	      (concat "No such group: " gname))
	(throw 'return nil))
      (setq gname (nnmaildir--grp-name group)
	    pgname (nnmaildir--pgname nnmaildir--cur-server gname)
	    grp-dir (nnmaildir--srv-dir nnmaildir--cur-server)
	    target (car (file-attributes (concat grp-dir gname)))
	    grp-dir (nnmaildir--srvgrp-dir grp-dir gname))
      (unless (or force (stringp target))
	(setf (nnmaildir--srv-error nnmaildir--cur-server)
	      (concat "Not a symlink: " gname))
	(throw 'return nil))
      (if (eq group (nnmaildir--srv-curgrp nnmaildir--cur-server))
	  (setf (nnmaildir--srv-curgrp nnmaildir--cur-server) nil))
      (remhash gname (nnmaildir--srv-groups nnmaildir--cur-server))
      (if (not force)
	  (progn
	    (setq grp-dir (directory-file-name grp-dir))
	    (nnmaildir--unlink grp-dir))
	(setq ls (nnmaildir--group-ls nnmaildir--cur-server pgname))
	(if (nnmaildir--param pgname 'read-only)
	    (progn (delete-directory  (nnmaildir--tmp grp-dir))
		   (nnmaildir--unlink (nnmaildir--new grp-dir))
		   (delete-directory  (nnmaildir--cur grp-dir)))
	  (nnmaildir--delete-dir-files (nnmaildir--tmp grp-dir) ls)
	  (nnmaildir--delete-dir-files (nnmaildir--new grp-dir) ls)
	  (nnmaildir--delete-dir-files (nnmaildir--cur grp-dir) ls))
	(setq dir (nnmaildir--nndir grp-dir))
	(dolist (subdir `(,(nnmaildir--nov-dir dir) ,(nnmaildir--num-dir dir)
			  ,@(funcall ls (nnmaildir--marks-dir dir)
				     'full "\\`[^.]" 'nosort)))
	  (nnmaildir--delete-dir-files subdir ls))
	(setq dir (nnmaildir--nndir grp-dir))
	(nnmaildir--unlink (concat dir "markfile"))
	(nnmaildir--unlink (concat dir "markfile{new}"))
	(delete-directory (nnmaildir--marks-dir dir))
	(delete-directory dir)
	(if (not (stringp target))
	    (delete-directory grp-dir)
	  (setq grp-dir (directory-file-name grp-dir)
		dir target)
	  (unless (eq (aref "/" 0) (aref dir 0))
	    (setq dir (concat (file-truename
			       (nnmaildir--srv-dir nnmaildir--cur-server))
			      dir)))
	  (delete-directory dir)
	  (nnmaildir--unlink grp-dir)))
      t)))