From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Basil Contovounesios via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#64069: 30.0.50; Mistyped shy group regexps Date: Wed, 14 Jun 2023 17:43:39 +0100 Message-ID: <87v8fq570k.fsf@epfl.ch> Reply-To: Basil Contovounesios Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="17695"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: Alan Mackenzie , Dmitry Gutov , Paul Eggert , Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= To: 64069@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Wed Jun 14 18:44:45 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1q9Tbx-0004La-44 for geb-bug-gnu-emacs@m.gmane-mx.org; Wed, 14 Jun 2023 18:44:45 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q9TbW-0001Uw-4S; Wed, 14 Jun 2023 12:44:18 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q9TbT-0001UB-S4 for bug-gnu-emacs@gnu.org; Wed, 14 Jun 2023 12:44:15 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q9TbS-00007j-2v for bug-gnu-emacs@gnu.org; Wed, 14 Jun 2023 12:44:15 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q9TbG-0003cQ-Bm; Wed, 14 Jun 2023 12:44:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Basil Contovounesios Original-Sender: "Debbugs-submit" Resent-CC: acm@muc.de, dmitry@gutov.dev, eggert@cs.ucla.edu, mattias.engdegard@gmail.com, bug-gnu-emacs@gnu.org Resent-Date: Wed, 14 Jun 2023 16:44:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 64069 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: bug-gnu-emacs@gnu.org X-Debbugs-Original-Xcc: Alan Mackenzie , Dmitry Gutov , Paul Eggert , Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Received: via spool by submit@debbugs.gnu.org id=B.168676103813890 (code B ref -1); Wed, 14 Jun 2023 16:44:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 14 Jun 2023 16:43:58 +0000 Original-Received: from localhost ([127.0.0.1]:45348 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q9TbB-0003bv-71 for submit@debbugs.gnu.org; Wed, 14 Jun 2023 12:43:58 -0400 Original-Received: from lists.gnu.org ([209.51.188.17]:48684) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q9Tb8-0003bl-Tw for submit@debbugs.gnu.org; Wed, 14 Jun 2023 12:43:55 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q9Tb8-0001Km-67 for bug-gnu-emacs@gnu.org; Wed, 14 Jun 2023 12:43:54 -0400 Original-Received: from mail-pl1-x62d.google.com ([2607:f8b0:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q9Tb1-0008Ul-0G for bug-gnu-emacs@gnu.org; Wed, 14 Jun 2023 12:43:51 -0400 Original-Received: by mail-pl1-x62d.google.com with SMTP id d9443c01a7336-1b3d8aa2c17so19775485ad.3 for ; Wed, 14 Jun 2023 09:43:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcd.ie; s=google21; t=1686761023; x=1689353023; h=mime-version:user-agent:message-id:date:subject:to:from:from:to:cc :subject:date:message-id:reply-to; bh=K5BJDLlWPLiUd6fqvhpiNQljJwlk4AH3lPK/7z/hYKg=; b=SISKJOrvnVX+4NK8gPCbhM2x3ViCH7cV6RL9CQG4BzIVF34AaFTod51bIOBq/D6Rnq T+FzgygfyaPszZf7tJi1zOQntdfh3YuOcmm0Eekcns//mBA39cyXzaCCj9o0rRf8Vnv0 fQYFZ6IM7xNTsw3zON7paWsG5mLdbfbgbKgd4GW5kPSS9le+7ObCea9WEjqjmCrobfgU uwrb4jzRvE2llTieMTydBrTp644moI7hHmJJuZl7v1CwwpWb6Pvcm1Gl7y9kxmdaMOv+ z7ARP9QmcsDJfy5HR+yjz+qFfcFGmvL/AOZAPiWZlJziJAD5B7a7/jGI0dVxSyWW35qI fzzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686761023; x=1689353023; h=mime-version:user-agent:message-id:date:subject:to:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=K5BJDLlWPLiUd6fqvhpiNQljJwlk4AH3lPK/7z/hYKg=; b=PFhwbYRd1hP7h16bQ/0hA+3j6HUnUVWXGGKZEsqZ/SFaR1LLNB5WT+eFJzvPYgAbyR rRkofi6KjyiZO9EA0JkPSjQTOGftOTiLTFIYPd+6wH9NHCFWQvFqjodhgAcinLWPa9+b IjlKh6vMcPmmffIGM5VIHcvLY/xr05zPLQ/VlibJw0h4njW19hyFt/PfkaA7QzBpARJK AiYWkfSjRmYylXFt0DUYxmVmpZgIPInihGoU6YVbt2ThKu71w5EhsvxhWxH1KbP9FD/V SFFcQbafPF0k3qIsIcvq6ybCnVK/t5iUwHvWkfYQmIuBJU6U+bCCnYFZ/L+7cqfXt2mo Rcnw== X-Gm-Message-State: AC+VfDwr0ROh1XC8FQA3/S01OYS1vU4Sg7fMVinTVBON6eGWRRDHy2tR j+V7k0O9sFHDEb0fNujs+rtsu6qpEHwmShVzH0Q= X-Google-Smtp-Source: ACHHUZ5MfyLqsVToSDbEt5ryihera7qZ45gbipfuUiDk2OwQHCyJpG/dRtDxqwp1rpXkNMdsxDvziw== X-Received: by 2002:a17:902:e5c5:b0:1a6:b23c:3bf2 with SMTP id u5-20020a170902e5c500b001a6b23c3bf2mr16075196plf.10.1686761022964; Wed, 14 Jun 2023 09:43:42 -0700 (PDT) Original-Received: from localhost ([64.43.152.143]) by smtp.gmail.com with ESMTPSA id z24-20020a1709028f9800b001b016313b1esm12426917plo.82.2023.06.14.09.43.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Jun 2023 09:43:42 -0700 (PDT) Received-SPF: pass client-ip=2607:f8b0:4864:20::62d; envelope-from=contovob@tcd.ie; helo=mail-pl1-x62d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:263375 Archived-At: --=-=-= Content-Type: text/plain Severity: minor Tags: patch Further to https://bugs.gnu.org/64019#14, I attach a patch which tweaks four redundant or seemingly mistyped instances of \(:?...\), i.e. a numbered group starting with an optional colon in place of the likelier shy group. CCing: - Alan to review the change to c-or-c++-mode--regexp (along with its clone c-ts-mode--c-or-c++-regexp) - Dmitry to review the change in vc-git - Paul for any comments on the time handling in vc-git-annotate-time In vc-git-annotate-time, the mistyped group added in [1] throws off the match string indices that are later passed to encode-time: by my reading the hour argument by chance continues to be specified correctly, but the minutes argument receives the number of hours, the seconds argument the number of minutes, and the timezone argument the number of seconds. [1]: Display shorter dates in Git annotate output 576fba5f58d 2015-05-17 02:47:17 +0300 https://git.sv.gnu.org/cgit/emacs.git/commit/?id=576fba5f58d Even after correcting the shy group, the timezone parsing doesn't seem right to me: encode-time expects a UTC offset in seconds, but is passed e.g. (string-to-number "+0100")=100s instead of the expected 1hr=3600s. IMO there is another minor issue with the regexp towards its end: \([-+0-9]+\) *[0-9]+ The trailing line number should be separated from the preceding timestamp by at least one space. So, the optional space would ideally precede rather than follow the optional time+zone components. The patch fixes this and the match/timezone handling by splitting the datetime string into only three components (date, time, zone) and delegating to iso8601-parse. --=-=-= Content-Type: text/x-diff Content-Disposition: attachment; filename=0001-Fix-some-shy-group-regexps.patch >From 9ead0ba1dd2676105269ff1472a206a250539b18 Mon Sep 17 00:00:00 2001 From: "Basil L. Contovounesios" Date: Mon, 12 Jun 2023 00:23:56 +0100 Subject: [PATCH] Fix some shy group regexps 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-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): * lisp/progmodes/cc-mode.el (c-or-c++-mode--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. * test/lisp/vc/vc-git-tests.el (vc-git-test-annotate-time): New test. --- lisp/gnus/gnus-art.el | 7 +++---- lisp/progmodes/c-ts-mode.el | 2 +- lisp/progmodes/cc-mode.el | 2 +- lisp/vc/vc-git.el | 19 ++++++++++++------- test/lisp/vc/vc-git-tests.el | 17 +++++++++++++++++ 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el index 6a7a3f41746..6f201f9c3df 100644 --- a/lisp/gnus/gnus-art.el +++ b/lisp/gnus/gnus-art.el @@ -8331,11 +8331,10 @@ gnus-parse-news-url (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 diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el index 4b83c6733a2..9e911192be3 100644 --- a/lisp/progmodes/c-ts-mode.el +++ b/lisp/progmodes/c-ts-mode.el @@ -1355,7 +1355,7 @@ c-ts-mode--c-or-c++-regexp "\\|" 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]" diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el index 11a1d3fe6c2..5cf9b7e17f8 100644 --- a/lisp/progmodes/cc-mode.el +++ b/lisp/progmodes/cc-mode.el @@ -2859,7 +2859,7 @@ c-or-c++-mode--regexp "\\|" 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]" diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el index a3469b71386..dfca944dc74 100644 --- a/lisp/vc/vc-git.el +++ b/lisp/vc/vc-git.el @@ -1723,14 +1723,19 @@ vc-git-annotate-command (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 diff --git a/test/lisp/vc/vc-git-tests.el b/test/lisp/vc/vc-git-tests.el index f12c5d3434b..b331b77cf01 100644 --- a/test/lisp/vc/vc-git-tests.el +++ b/test/lisp/vc/vc-git-tests.el @@ -64,4 +64,21 @@ vc-git-test--run-program-version-test (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 -- 2.34.1 --=-=-= Content-Type: text/plain WDYT? Thanks, -- Basil In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, X toolkit, cairo version 1.16.0, Xaw3d scroll bars) of 2023-06-13 built on blc Repository revision: 81932ebcfa56a33fcb1c7d9f91094e2b1f6e9b77 Repository branch: blc/treesit/master Windowing system distributor 'The X.Org Foundation', version 11.0.12101004 System Description: Ubuntu 22.04.2 LTS Configured using: 'configure CC=gcc-12 'CFLAGS=-Og -ggdb3' --prefix=/home/bic/.local --with-file-notification=yes --with-x --with-x-toolkit=lucid' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XAW3D XDBE XIM XINPUT2 XPM LUCID ZLIB Important settings: value of $LC_MONETARY: en_IE.UTF-8 value of $LC_NUMERIC: en_IE.UTF-8 value of $LC_TIME: en_IE.UTF-8 value of $LANG: en_GB.UTF-8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config gnus-util text-property-search time-date subr-x mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo x-toolkit xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 36749 9186) (symbols 48 5178 0) (strings 32 13895 1202) (string-bytes 1 379735) (vectors 16 9299) (vector-slots 8 148629 8492) (floats 8 23 25) (intervals 56 244 0) (buffers 984 10)) --=-=-=--