Function: change-log-merge
change-log-merge is an autoloaded, interactive and byte-compiled
function defined in add-log.el.gz.
Signature
(change-log-merge OTHER-LOG)
Documentation
Merge the contents of change log file OTHER-LOG with this buffer.
Both must be found in Change Log mode (since the merging depends on the appropriate motion commands). OTHER-LOG can be either a file name or a buffer.
Entries are inserted in chronological order. Both the current and old-style time formats for entries are supported.
Probably introduced at or before Emacs version 21.1.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/vc/add-log.el.gz
;;;###autoload
(defun change-log-merge (other-log)
"Merge the contents of change log file OTHER-LOG with this buffer.
Both must be found in Change Log mode (since the merging depends on
the appropriate motion commands). OTHER-LOG can be either a file name
or a buffer.
Entries are inserted in chronological order. Both the current and
old-style time formats for entries are supported."
(interactive "*fLog file name to merge: ")
(if (not (derived-mode-p 'change-log-mode))
(error "Not in Change Log mode"))
(let ((other-buf (if (bufferp other-log) other-log
(find-file-noselect other-log)))
(buf (current-buffer))
date1 start end)
(save-excursion
(goto-char (point-min))
(set-buffer other-buf)
(goto-char (point-min))
(if (not (derived-mode-p 'change-log-mode))
(error "%s not found in Change Log mode" other-log))
;; Loop through all the entries in OTHER-LOG.
(while (not (eobp))
(setq date1 (change-log-sortable-date-at))
(setq start (point)
end (progn (forward-page) (point)))
;; Look for an entry in original buffer that isn't later.
(with-current-buffer buf
(while (and (not (eobp))
(string< date1 (change-log-sortable-date-at)))
(forward-page))
(if (not (eobp))
(insert-buffer-substring other-buf start end)
;; At the end of the original buffer, insert a newline to
;; separate entries and then the rest of the file being
;; merged.
(unless (or (bobp)
(and (= ?\n (char-before))
(or (<= (1- (point)) (point-min))
(= ?\n (char-before (1- (point)))))))
(insert (if use-hard-newlines hard-newline "\n")))
;; Move to the end of it to terminate outer loop.
(with-current-buffer other-buf
(goto-char (point-max)))
(insert-buffer-substring other-buf start)))))))