Function: gnus-agent-check-overview-buffer

gnus-agent-check-overview-buffer is a byte-compiled function defined in gnus-agent.el.gz.

Signature

(gnus-agent-check-overview-buffer &optional BUFFER)

Documentation

Check the overview file given for sanity.

In particular, checks that the file is sorted by article number and that there are no duplicates.

Source Code

;; Defined in /usr/src/emacs/lisp/gnus/gnus-agent.el.gz
(defun gnus-agent-check-overview-buffer (&optional buffer)
  "Check the overview file given for sanity.
In particular, checks that the file is sorted by article number
and that there are no duplicates."
  (let ((prev-num -1)
        (backed-up nil))
    (save-excursion
      (when buffer
	(set-buffer buffer))
      (save-restriction
	(widen)
	(goto-char (point-min))

	(while (< (point) (point-max))
	  (let ((p (point))
		(cur (condition-case nil
			 (read (current-buffer))
		       (error nil))))
	    (cond
	     ((or (not (integerp cur))
		  (not (eq (char-after) ?\t)))
              (or backed-up
                  (setq backed-up (gnus-agent-backup-overview-buffer)))
	      (gnus-message 1
			    "Overview buffer contains garbage `%s'."
			    (buffer-substring
			     p (point-at-eol))))
	     ((= cur prev-num)
	      (or backed-up
                  (setq backed-up (gnus-agent-backup-overview-buffer)))
              (gnus-message 1
			    "Duplicate overview line for %d" cur)
	      (delete-region p (progn (forward-line 1) (point))))
	     ((< cur prev-num)
	      (or backed-up
                  (setq backed-up (gnus-agent-backup-overview-buffer)))
              (gnus-message 1 "Overview buffer not sorted!")
	      (sort-numeric-fields 1 (point-min) (point-max))
	      (goto-char (point-min))
	      (setq prev-num -1))
	     (t
	      (setq prev-num cur)))
	    (forward-line 1)))))))