branch: elpa/logview
commit 663a2acf62aeddd5ea37c09bad45b895ddee7c27
Author: Paul Pogonyshev <pogonys...@gmail.com>
Commit: Paul Pogonyshev <pogonys...@gmail.com>

    Don't fail if a customized timestamp format contains an illegal Java 
pattern: just warn about it and ignore; related to issue #7.
---
 logview.el | 61 ++++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 34 insertions(+), 27 deletions(-)

diff --git a/logview.el b/logview.el
index 76275ad396..cfd5a31b9f 100644
--- a/logview.el
+++ b/logview.el
@@ -1615,34 +1615,41 @@ returns non-nil."
       (dolist (timestamp-option (if timestamp-at timestamp-options '(nil)))
         (let* ((timestamp-pattern (assq 'java-pattern timestamp-option))
                (timestamp-regexp  (if timestamp-pattern
-                                      (apply #'datetime-matching-regexp 'java 
(cdr timestamp-pattern)
-                                             :locale (cdr (assq 'locale 
timestamp-option)) logview--datetime-options)
+                                      (condition-case error
+                                          (apply #'datetime-matching-regexp 
'java (cdr timestamp-pattern)
+                                                 :locale (cdr (assq 'locale 
timestamp-option)) logview--datetime-options)
+                                        ;; 'datetime' doesn't mention the 
erroneous pattern to keep
+                                        ;; the error message concise.  Let's 
do it ourselves.
+                                        (error (warn "In Java timestamp 
pattern '%s': %s"
+                                                     (cdr timestamp-pattern) 
(error-message-string error))
+                                               nil))
                                     (cdr (assq 'regexp timestamp-option)))))
-          (when timestamp-at
-            (setcar timestamp-at (format "\\(?%d:%s\\)" 
logview--timestamp-group timestamp-regexp)))
-          (let ((regexp (apply #'concat parts)))
-            (when (string-match regexp test-line)
-              (setq logview--process-buffer-changes t
-                    logview--entry-regexp           regexp
-                    logview--submode-features       features
-                    logview--submode-level-alist    nil
-                    mode-name                       (format "Logview/%s" name))
-              (when (memq 'level features)
-                (dolist (final-level logview--final-levels)
-                  (dolist (level (cdr (assoc final-level levels)))
-                    (setq logview--submode-level-alist (cons (cons level 
final-level) logview--submode-level-alist))
-                    (push (cons level (list (make-symbol level)
-                                            (intern (format "logview-%s-entry" 
(symbol-name final-level)))
-                                            (intern (format "logview-level-%s" 
(symbol-name final-level)))))
-                          logview--submode-level-data))))
-              (logview--split-region-into-entries (point-min) (point-max) 
'report-progress)
-              (add-hook 'after-change-functions 
'logview--split-region-into-entries t t)
-              (read-only-mode 1)
-              (when buffer-file-name
-                (pcase logview-auto-revert-mode
-                  (`auto-revert-mode      (auto-revert-mode      1))
-                  (`auto-revert-tail-mode (auto-revert-tail-mode 1))))
-              (throw 'success nil))))))))
+          (when (or timestamp-regexp (null timestamp-at))
+            (when timestamp-at
+              (setcar timestamp-at (format "\\(?%d:%s\\)" 
logview--timestamp-group timestamp-regexp)))
+            (let ((regexp (apply #'concat parts)))
+              (when (string-match regexp test-line)
+                (setq logview--process-buffer-changes t
+                      logview--entry-regexp           regexp
+                      logview--submode-features       features
+                      logview--submode-level-alist    nil
+                      mode-name                       (format "Logview/%s" 
name))
+                (when (memq 'level features)
+                  (dolist (final-level logview--final-levels)
+                    (dolist (level (cdr (assoc final-level levels)))
+                      (setq logview--submode-level-alist (cons (cons level 
final-level) logview--submode-level-alist))
+                      (push (cons level (list (make-symbol level)
+                                              (intern (format 
"logview-%s-entry" (symbol-name final-level)))
+                                              (intern (format 
"logview-level-%s" (symbol-name final-level)))))
+                            logview--submode-level-data))))
+                (logview--split-region-into-entries (point-min) (point-max) 
'report-progress)
+                (add-hook 'after-change-functions 
'logview--split-region-into-entries t t)
+                (read-only-mode 1)
+                (when buffer-file-name
+                  (pcase logview-auto-revert-mode
+                    (`auto-revert-mode      (auto-revert-mode      1))
+                    (`auto-revert-tail-mode (auto-revert-tail-mode 1))))
+                (throw 'success nil)))))))))
 
 (defun logview--all-timestamp-formats ()
   (unless logview--all-timestamp-formats-cache

Reply via email to