unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: "J.P." <jp@neverwas.me>
To: Lars Ingebrigtsen <larsi@gnus.org>
Cc: 50007@debbugs.gnu.org, Amin Bandali <mab@gnu.org>
Subject: bug#50007: 28.0.50; normalize logic surrounding erc-server-reconnecting
Date: Sat, 06 Nov 2021 01:49:00 -0700	[thread overview]
Message-ID: <87pmrd7jpf.fsf@neverwas.me> (raw)
In-Reply-To: <87sfwaav0l.fsf@gnus.org> (Lars Ingebrigtsen's message of "Sat, 06 Nov 2021 03:16:26 +0100")

[-- Attachment #1: Type: text/plain, Size: 1502 bytes --]

Lars Ingebrigtsen <larsi@gnus.org> writes:

> "J.P." <jp@neverwas.me> writes:
>
>> Subject: [PATCH] Normalize usage of variable erc-server-reconnecting
>
> I think I managed to follow the logic of this change, and it doesn't
> seem to regress anything after a bit of testing, so I've pushed it to
> Emacs 29.

Thanks Lars. As you may recall, I'm quite slow, often in more ways than
one. And that certainly applies here. Turns out I've been sitting on
slightly revised versions of both this and

  bug#50008: 28.0.50; ERC sends empty lines with user input

which you also recently added. For some reason (not sloth/dimwittedness,
I assure you), I only updated the versions of these patches living in
#48598 but neglected to follow suit with these two threads. So with much
contrition, I've isolated the differences and attached them here.

The updates to this bug attempt to preserve a couple API elements I
ditched/clobbered in what's already been installed (in the unlikely
event some poor sap or bot actually depended on them). This is mainly an
effort to embrace the spirit of being more responsible with and
accountable for my changes, something I've been slow to pick up on from
the great bandali. That said, I totally understand if you'd rather I
learn to live with my mistakes as well.

The minor changes to the other, "empty lines" patch just involve another
instance of superfluous newlines, this time generated from the function
`erc-cmd-default'. Thanks again and sorry for the disturbance.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Deprecate-instead-of-redefine-erc-server-reconnectin.patch --]
[-- Type: text/x-patch, Size: 5265 bytes --]

From 9a230327870370ca2d3861c6a891d83e3e8ed0d0 Mon Sep 17 00:00:00 2001
From: "F. Jason Park" <jp@neverwas.me>
Date: Fri, 11 Jun 2021 03:55:07 -0700
Subject: [PATCH 1/2] Deprecate instead of redefine erc-server-reconnecting

* lisp/erc/erc-backend.el (erc-server-reconnecting,
erc--server-reconnecting): obsolete and replace the former with new
internal variant, which carries a simplified meaning.

(erc-server-reconnect-p, erc--server-reconnect-p): Obsolete and
replace the former with an internal function, and change behavior to
disregard `erc-server-reconnecting' when rendering verdict.

(erc-process-sentinel-2): ensure local var `erc--server-reconnecting'
is t when timers are scheduled or firing, and nil otherwise, including
after retries exhausted.  This agrees with the straightforward way
`erc-server-reconnecting' has always been used by `erc-cmd-RECONNECT'.

(erc-server-connect): set `erc--server-reconnecting'.

* lisp/erc/erc.el (erc-cmd-RECONNECT): use `erc--server-reconnecting'
instead of `erc-server-reconnecting'.
---
 lisp/erc/erc-backend.el | 26 +++++++++++++++++++++-----
 lisp/erc/erc.el         |  8 ++++++--
 2 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 6e5a768b70..69f63dfbc4 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -197,7 +197,13 @@ erc-server-quitting
   "Non-nil if the user requests a quit.")
 
 (defvar-local erc-server-reconnecting nil
-  "Non-nil if reconnecting or scheduled to.")
+  "Non-nil if the user requests an explicit reconnect, and the
+current IRC process is still alive.")
+(make-obsolete-variable 'erc-server-reconnecting
+                        "see `erc--server-reconnecting'" "29.1")
+
+(defvar-local erc--server-reconnecting nil
+  "Non-nil when reconnecting.")
 
 (defvar-local erc-server-timed-out nil
   "Non-nil if the IRC server failed to respond to a ping.")
@@ -532,7 +538,8 @@ erc-server-connect
     (with-current-buffer buffer
       (setq erc-server-process process)
       (setq erc-server-quitting nil)
-      (setq erc-server-reconnecting nil)
+      (setq erc-server-reconnecting nil
+            erc--server-reconnecting nil)
       (setq erc-server-timed-out nil)
       (setq erc-server-banned nil)
       (setq erc-server-error-occurred nil)
@@ -616,7 +623,7 @@ erc-server-filter-function
             (erc-parse-server-response process line)))))))
 
 (defun erc--server-reconnect-p (event)
-  "Return non-nil if ERC should attempt to reconnect automatically.
+  "Return non-nil when ERC should attempt to reconnect.
 EVENT is the message received from the closed connection process."
   (and erc-server-auto-reconnect
        (not erc-server-banned)
@@ -631,6 +638,14 @@ erc--server-reconnect-p
        ;; open-network-stream-nowait error for connection refused
        (if (string-match "^failed with code 111" event) 'nonblocking t)))
 
+(defun erc-server-reconnect-p (event)
+  "Return non-nil if ERC should attempt to reconnect automatically.
+EVENT is the message received from the closed connection process."
+  (declare (obsolete "see `erc--server-reconnect-p'" "29.1"))
+  (or (with-suppressed-warnings ((obsolete erc-server-reconnecting))
+        erc-server-reconnecting)
+      (erc--server-reconnect-p event)))
+
 (defun erc-process-sentinel-2 (event buffer)
   "Called when `erc-process-sentinel-1' has detected an unexpected disconnect."
   (if (not (buffer-live-p buffer))
@@ -642,7 +657,7 @@ erc-process-sentinel-2
         (if (not reconnect-p)
             ;; terminate, do not reconnect
             (progn
-              (setq erc-server-reconnecting nil)
+              (setq erc--server-reconnecting nil)
               (erc-display-message nil 'error (current-buffer)
                                    'terminated ?e event)
               ;; Update mode line indicators
@@ -651,7 +666,8 @@ erc-process-sentinel-2
           ;; reconnect
           (condition-case nil
               (progn
-                (setq erc-server-reconnecting t
+                (setq erc-server-reconnecting nil
+                      erc--server-reconnecting t
                       erc-server-reconnect-count (1+ erc-server-reconnect-count))
                 (setq delay erc-server-reconnect-timeout)
                 (run-at-time delay nil
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 0da837012c..9fa1736535 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -3752,13 +3752,17 @@ erc-cmd-RECONNECT
       (setq buffer (current-buffer)))
     (with-current-buffer buffer
       (setq erc-server-quitting nil)
-      (setq erc-server-reconnecting t)
+      (with-suppressed-warnings ((obsolete erc-server-reconnecting))
+        (setq erc-server-reconnecting t))
+      (setq erc--server-reconnecting t)
       (setq erc-server-reconnect-count 0)
       (setq process (get-buffer-process (erc-server-buffer)))
       (if process
           (delete-process process)
         (erc-server-reconnect))
-      (setq erc-server-reconnecting nil)))
+      (with-suppressed-warnings ((obsolete erc-server-reconnecting))
+        (setq erc-server-reconnecting nil))
+      (setq erc--server-reconnecting nil)))
   t)
 (put 'erc-cmd-RECONNECT 'process-not-needed t)
 
-- 
2.31.1


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-Don-t-send-empty-lines-for-unknown-commands-in-ERC.patch --]
[-- Type: text/x-patch, Size: 2745 bytes --]

From a2d249d758f49ba528243204e32ecd0aa59c3105 Mon Sep 17 00:00:00 2001
From: "F. Jason Park" <jp@neverwas.me>
Date: Sun, 13 Jun 2021 02:15:55 -0700
Subject: [PATCH 2/2] Don't send empty lines for unknown commands in ERC

* lisp/erc/erc.el (erc-cmd-default): prevent excess trailing newlines
from being sent.

* test/lisp/erc/erc-tests.el: Update `erc-process-input-line' test to
check for excess line feeds with unknown commands.
---
 lisp/erc/erc.el            |  2 +-
 test/lisp/erc/erc-tests.el | 15 ++++++++++++---
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 9fa1736535..8e2bb83360 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -2965,7 +2965,7 @@ erc-cmd-default
 this function.  LINE is sent to the server verbatim, and
 therefore has to contain the command itself as well."
   (erc-log (format "cmd: DEFAULT: %s" line))
-  (erc-server-send (substring line 1))
+  (erc-server-send (string-trim-right (substring line 1) "[\r\n]"))
   t)
 
 (defvar erc--read-time-period-history nil)
diff --git a/test/lisp/erc/erc-tests.el b/test/lisp/erc/erc-tests.el
index 685f4e2bea..b2dbc1012d 100644
--- a/test/lisp/erc/erc-tests.el
+++ b/test/lisp/erc/erc-tests.el
@@ -236,6 +236,7 @@ erc-process-input-line
   (let (erc-server-last-sent-time
         erc-server-flood-queue
         (orig-erc-cmd-MSG (symbol-function 'erc-cmd-MSG))
+        (erc-default-recipients '("#chan"))
         calls)
     (with-temp-buffer
       (cl-letf (((symbol-function 'erc-cmd-MSG)
@@ -247,9 +248,7 @@ erc-process-input-line
                 ((symbol-function 'erc-server-process-alive)
                  (lambda () t))
                 ((symbol-function 'erc-server-send-queue)
-                 #'ignore)
-                ((symbol-function 'erc-default-target)
-                 (lambda () "" "#chan")))
+                 #'ignore))
 
         (ert-info ("Dispatch to user command handler")
 
@@ -259,6 +258,16 @@ erc-process-input-line
             (should (equal (pop erc-server-flood-queue)
                            '("PRIVMSG #chan :hi\r\n" . utf-8))))
 
+          (ert-info ("Quote preserves line intact")
+            (erc-process-input-line "/QUOTE FAKE foo bar\n")
+            (should (equal (pop erc-server-flood-queue)
+                           '("FAKE foo bar\r\n" . utf-8))))
+
+          (ert-info ("Unknown command respected")
+            (erc-process-input-line "/FAKE foo bar\n")
+            (should (equal (pop erc-server-flood-queue)
+                           '("FAKE foo bar\r\n" . utf-8))))
+
           (ert-info ("Spaces preserved")
             (erc-process-input-line "/msg #chan hi you\n")
             (should (equal (pop calls) " #chan hi you"))
-- 
2.31.1


  reply	other threads:[~2021-11-06  8:49 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-11 14:12 bug#50007: 28.0.50; normalize logic surrounding erc-server-reconnecting J.P.
2021-09-19 16:36 ` Stefan Kangas
2021-09-22  4:37   ` Amin Bandali
2021-11-06  2:16 ` Lars Ingebrigtsen
2021-11-06  8:49   ` J.P. [this message]
2021-11-06 18:13     ` Lars Ingebrigtsen
2021-11-06 22:02       ` J.P.

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87pmrd7jpf.fsf@neverwas.me \
    --to=jp@neverwas.me \
    --cc=50007@debbugs.gnu.org \
    --cc=larsi@gnus.org \
    --cc=mab@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).