]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix more shy group regexps
authorBasil L. Contovounesios <contovob@tcd.ie>
Sun, 11 Jun 2023 23:23:56 +0000 (00:23 +0100)
committerBasil L. Contovounesios <contovob@tcd.ie>
Sat, 17 Jun 2023 15:36:27 +0000 (16:36 +0100)
These issues were caught by modified versions of the GNU ELPA
packages xr and relint:
- https://github.com/mattiase/xr/pull/6
- https://github.com/mattiase/relint/pull/14

* lisp/gnus/gnus-art.el (gnus-parse-news-url): Remove redundant
numbered group and calls to match-string.
* lisp/progmodes/c-ts-mode.el (c-ts-mode--c-or-c++-regexp): Fix shy
group mistyped as optional colon (bug#64019#29).
* lisp/vc/vc-git.el (vc-git-annotate-time): Ditto.  Also fix
timezone parsing by using iso8601-parse (bug#64069).
* test/lisp/vc/vc-git-tests.el (vc-git-test-annotate-time): New
test.

lisp/gnus/gnus-art.el
lisp/progmodes/c-ts-mode.el
lisp/vc/vc-git.el
test/lisp/vc/vc-git-tests.el

index 6a7a3f417462facbbeea76d65fa1cf76485bace3..6f201f9c3df9eef5f789a4de45e986ce986b3fa6 100644 (file)
@@ -8331,11 +8331,10 @@ url is put as the `gnus-button-url' overlay property on the button."
       (when (looking-at "\\([A-Za-z]+\\):")
        (setq scheme (match-string 1))
        (goto-char (match-end 0)))
-      (when (looking-at "//\\([^:/]+\\)\\(:?\\)\\([0-9]+\\)?/")
+      (when (looking-at "//\\([^:/]+\\):?\\([0-9]+\\)?/")
        (setq server (match-string 1))
-       (setq port (if (stringp (match-string 3))
-                      (string-to-number (match-string 3))
-                    (match-string 3)))
+        (setq port (and (match-beginning 2)
+                        (string-to-number (match-string 2))))
        (goto-char (match-end 0)))
 
       (cond
index b99388a40741e72736566c72055e968282b8fad9..f16e06942b9d4db68cf63300dc82ca134bc022ed 100644 (file)
@@ -1355,7 +1355,7 @@ recommended to enable `electric-pair-mode' with this mode."
               "\\|" id "::"
               "\\|" id ws-maybe "=\\)"
               "\\|" "\\(?:inline" ws "\\)?namespace"
-              "\\(:?" ws "\\(?:" id "::\\)*" id "\\)?" ws-maybe "{"
+              "\\(?:" ws "\\(?:" id "::\\)*" id "\\)?" ws-maybe "{"
               "\\|" "class"     ws id
               "\\(?:" ws "final" "\\)?" ws-maybe "[:{;\n]"
               "\\|" "struct"     ws id "\\(?:" ws "final" ws-maybe "[:{\n]"
index a3469b71386fb9260e67a00b7523ceab7c3c7496..dfca944dc742e96371eabe54e9c7e26620eeb915 100644 (file)
@@ -1723,14 +1723,19 @@ This requires git 1.8.4 or later, for the \"-L\" option of \"git log\"."
 
 (declare-function vc-annotate-convert-time "vc-annotate" (&optional time))
 
+(autoload 'decoded-time-set-defaults "time-date")
+(autoload 'iso8601-parse "iso8601")
+
 (defun vc-git-annotate-time ()
-  (and (re-search-forward "^[0-9a-f^]+[^()]+(.*?\\([0-9]+\\)-\\([0-9]+\\)-\\([0-9]+\\) \\(:?\\([0-9]+\\):\\([0-9]+\\):\\([0-9]+\\) \\([-+0-9]+\\)\\)? *[0-9]+) " nil t)
-       (vc-annotate-convert-time
-        (apply #'encode-time (mapcar (lambda (match)
-                                       (if (match-beginning match)
-                                           (string-to-number (match-string match))
-                                         0))
-                                     '(6 5 4 3 2 1 7))))))
+  (and (re-search-forward "^[0-9a-f^]+[^()]+(.*?\\([0-9]+-[0-9]+-[0-9]+\\)\\(?: \\([0-9]+:[0-9]+:[0-9]+\\) \\([-+0-9]+\\)\\)? +[0-9]+) " nil t)
+       (let* ((dt (match-string 1))
+              (dt (if (not (match-beginning 2)) dt
+                    ;; Format as ISO 8601.
+                    (concat dt "T" (match-string 2) (match-string 3))))
+              (decoded (ignore-errors (iso8601-parse dt))))
+         (and decoded
+              (vc-annotate-convert-time
+               (encode-time (decoded-time-set-defaults decoded)))))))
 
 (defun vc-git-annotate-extract-revision-at-line ()
   (save-excursion
index f12c5d3434b713d875346940d6967ba990a7820c..b331b77cf01c5de8b03e339e4fb34c88467d5cd3 100644 (file)
              (actual-output (vc-git--program-version)))
     (should (equal actual-output expected-output))))
 
+(ert-deftest vc-git-test-annotate-time ()
+  "Test `vc-git-annotate-time'."
+  (require 'vc-annotate)
+  (with-temp-buffer
+    (insert "\
+00000000 (Foo Bar 2023-06-14  1) a
+00000001 (Foo Bar 2023-06-14 00:00:00 -0130  2) b
+00000002 (Foo Bar 2023-06-14 00:00:00 +0145  3) c
+00000003 (Foo Bar 2023-06-14 00:00:00  4) d
+00000004 (Foo Bar 0-0-0  5) \n")
+    (goto-char (point-min))
+    (should (floatp (vc-git-annotate-time)))
+    (should (> (vc-git-annotate-time)
+               (vc-git-annotate-time)))
+    (should-not (vc-git-annotate-time))
+    (should-not (vc-git-annotate-time))))
+
 ;;; vc-git-tests.el ends here