(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
"\\|" 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]"
(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
(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