unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
@ 2017-10-12 23:02 John Williams
  2017-10-14  5:51 ` Noam Postavsky
  0 siblings, 1 reply; 10+ messages in thread
From: John Williams @ 2017-10-12 23:02 UTC (permalink / raw)
  To: 28803

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



[-- Attachment #2: 0001-Fixed-compiler-warnings-for-advised-functions.patch --]
[-- Type: text/x-patch, Size: 11385 bytes --]

From 3589eea932f5dec0125a3dcd16061385c0f30a5e Mon Sep 17 00:00:00 2001
From: John Williams <jrw@pobox.com>
Date: Thu, 12 Oct 2017 15:57:37 -0700
Subject: [PATCH] Fixed compiler warnings for advised functions.

Added the function `get-advertised-calling-convention', which is
mostly copied from `help-function-arglist'.  Changed
`help-function-arglist' to use `get-advertised-calling-convention'.
Changed nadvice.el to use `get-advertised-calling-convention' instead
of directly querying `advertised-signature-table'.  Added a unit test
to show that previously-advised functions now compile without
warnings.
---
 lisp/emacs-lisp/byte-run.el      | 76 ++++++++++++++++++++++++++++++++++++++--
 lisp/emacs-lisp/nadvice.el       |  7 ++--
 lisp/help.el                     | 52 +++------------------------
 test/automated/bytecomp-tests.el | 11 +++++-
 test/automated/cl-lib-tests.el   |  4 +--
 5 files changed, 94 insertions(+), 56 deletions(-)
 mode change 100644 => 100755 lisp/emacs-lisp/byte-run.el
 mode change 100644 => 100755 lisp/emacs-lisp/nadvice.el
 mode change 100644 => 100755 lisp/help.el
 mode change 100644 => 100755 test/automated/bytecomp-tests.el
 mode change 100644 => 100755 test/automated/cl-lib-tests.el

diff --git a/lisp/emacs-lisp/byte-run.el b/lisp/emacs-lisp/byte-run.el
old mode 100644
new mode 100755
index de6755a41c7..972a069084f
--- a/lisp/emacs-lisp/byte-run.el
+++ b/lisp/emacs-lisp/byte-run.el
@@ -325,13 +325,83 @@ defsubst
 
 (defvar advertised-signature-table (make-hash-table :test 'eq :weakness 'key))
 
+(defun get-advertised-calling-convention (function &optional preserve-names)
+  "Return a formal argument list for the function FUNCTION.
+If PRESERVE-NAMES is non-nil, return a formal arglist that uses
+the same names as used in the original source code, when possible.
+
+If the function definition is an autoload, return 'autoload.
+Otherwise, if the argument list is unavailable, return t."
+
+  (let* ((def
+          ;; Handle symbols aliased to other symbols.
+          (indirect-function function))
+         (sig (gethash def advertised-signature-table t)))
+    (if (listp sig)
+        sig
+      ;; Advice wrappers have "catch all" args, so fetch the actual underlying
+      ;; function to find the real arguments.
+      (while (advice--p def) (setq def (advice--cdr def)))
+      ;; If definition is a macro, find the function inside it.
+      (if (eq (car-safe def) 'macro) (setq def (cdr def)))
+      (cond
+       ((and (byte-code-function-p def) (listp (aref def 0))) (aref def 0))
+       ((eq (car-safe def) 'lambda) (nth 1 def))
+       ((eq (car-safe def) 'closure) (nth 2 def))
+       ((or (and (byte-code-function-p def) (integerp (aref def 0)))
+            (subrp def))
+        (or (when preserve-names
+              (let* ((doc (condition-case nil (documentation def) (error nil)))
+                     (docargs (if doc (car (help-split-fundoc doc nil))))
+                     (arglist (if docargs
+                                  (cdar (read-from-string (downcase docargs)))))
+                     (valid t))
+                ;; Check validity.
+                (dolist (arg arglist)
+                  (unless (and (symbolp arg)
+                               (let ((name (symbol-name arg)))
+                                 (if (eq (aref name 0) ?&)
+                                     (memq arg '(&rest &optional))
+                                   (not (string-match "\\." name)))))
+                    (setq valid nil)))
+                (when valid arglist)))
+            (let* ((args-desc (if (not (subrp def))
+                                  (aref def 0)
+                                (let ((a (subr-arity def)))
+                                  (logior (car a)
+                                          (if (numberp (cdr a))
+                                              (lsh (cdr a) 8)
+                                            (lsh 1 7))))))
+                   (max (lsh args-desc -8))
+                   (min (logand args-desc 127))
+                   (rest (logand args-desc 128))
+                   (arglist ()))
+              (dotimes (i min)
+                (push (intern (concat "arg" (number-to-string (1+ i)))) arglist))
+              (when (> max min)
+                (push '&optional arglist)
+                (dotimes (i (- max min))
+                  (push (intern (concat "arg" (number-to-string (+ 1 i min))))
+                        arglist)))
+              (unless (zerop rest) (push '&rest arglist) (push 'rest arglist))
+              (nreverse arglist))))
+       ((and (autoloadp def) (not (eq (nth 4 def) 'keymap)))
+        'autoload)
+       (t t)))))
+
 (defun set-advertised-calling-convention (function signature _when)
   "Set the advertised SIGNATURE of FUNCTION.
 This will allow the byte-compiler to warn the programmer when she uses
 an obsolete calling convention.  WHEN specifies since when the calling
-convention was modified."
-  (puthash (indirect-function function) signature
-           advertised-signature-table))
+convention was modified.
+
+For symmetry with with `get-advertised-calling-convention', if
+SIGNATURE is not a list, the advertised signature for FUNCTION is
+removed."
+  (if (listp signature)
+      (puthash (indirect-function function) signature
+               advertised-signature-table)
+    (remhash (indirect-function function) advertised-signature-table)))
 
 (defun make-obsolete (obsolete-name current-name &optional when)
   "Make the byte-compiler warn that function OBSOLETE-NAME is obsolete.
diff --git a/lisp/emacs-lisp/nadvice.el b/lisp/emacs-lisp/nadvice.el
old mode 100644
new mode 100755
index 5a100b790f1..3e5c83af902
--- a/lisp/emacs-lisp/nadvice.el
+++ b/lisp/emacs-lisp/nadvice.el
@@ -157,14 +157,17 @@ advice--make-interactive-form
 
 (defun advice--make-1 (byte-code stack-depth function main props)
   "Build a function value that adds FUNCTION to MAIN."
-  (let ((adv-sig (gethash main advertised-signature-table))
+  (let ((adv-sig (get-advertised-calling-convention main))
         (advice
          (apply #'make-byte-code 128 byte-code
                 (vector #'apply function main props) stack-depth nil
                 (and (or (commandp function) (commandp main))
                      (list (advice--make-interactive-form
                             function main))))))
-    (when adv-sig (puthash advice adv-sig advertised-signature-table))
+    (when (listp adv-sig)
+      ;; Don’t use set-advertised-calling-convention here; it causes
+      ;; strange problems.
+      (puthash advice adv-sig advertised-signature-table))
     advice))
 
 (defun advice--make (where function main props)
diff --git a/lisp/help.el b/lisp/help.el
old mode 100644
new mode 100755
index 68e8890ee1b..31ac4494183
--- a/lisp/help.el
+++ b/lisp/help.el
@@ -1404,54 +1404,10 @@ help-function-arglist
   "Return a formal argument list for the function DEF.
 IF PRESERVE-NAMES is non-nil, return a formal arglist that uses
 the same names as used in the original source code, when possible."
-  ;; Handle symbols aliased to other symbols.
-  (if (and (symbolp def) (fboundp def)) (setq def (indirect-function def)))
-  ;; If definition is a macro, find the function inside it.
-  (if (eq (car-safe def) 'macro) (setq def (cdr def)))
-  (cond
-   ((and (byte-code-function-p def) (listp (aref def 0))) (aref def 0))
-   ((eq (car-safe def) 'lambda) (nth 1 def))
-   ((eq (car-safe def) 'closure) (nth 2 def))
-   ((or (and (byte-code-function-p def) (integerp (aref def 0)))
-        (subrp def))
-    (or (when preserve-names
-          (let* ((doc (condition-case nil (documentation def) (error nil)))
-                 (docargs (if doc (car (help-split-fundoc doc nil))))
-                 (arglist (if docargs
-                              (cdar (read-from-string (downcase docargs)))))
-                 (valid t))
-            ;; Check validity.
-            (dolist (arg arglist)
-              (unless (and (symbolp arg)
-                           (let ((name (symbol-name arg)))
-                             (if (eq (aref name 0) ?&)
-                                 (memq arg '(&rest &optional))
-                               (not (string-match "\\." name)))))
-                (setq valid nil)))
-            (when valid arglist)))
-        (let* ((args-desc (if (not (subrp def))
-                              (aref def 0)
-                            (let ((a (subr-arity def)))
-                              (logior (car a)
-                                      (if (numberp (cdr a))
-                                          (lsh (cdr a) 8)
-                                        (lsh 1 7))))))
-               (max (lsh args-desc -8))
-               (min (logand args-desc 127))
-               (rest (logand args-desc 128))
-               (arglist ()))
-          (dotimes (i min)
-            (push (intern (concat "arg" (number-to-string (1+ i)))) arglist))
-          (when (> max min)
-            (push '&optional arglist)
-            (dotimes (i (- max min))
-              (push (intern (concat "arg" (number-to-string (+ 1 i min))))
-                    arglist)))
-          (unless (zerop rest) (push '&rest arglist) (push 'rest arglist))
-          (nreverse arglist))))
-   ((and (autoloadp def) (not (eq (nth 4 def) 'keymap)))
-    "[Arg list not available until function definition is loaded.]")
-   (t t)))
+  (let ((sig (get-advertised-calling-convention def preserve-names)))
+    (if (eq sig 'autoload)
+        "[Arg list not available until function definition is loaded.]"
+      sig)))
 
 (defun help--make-usage (function arglist)
   (cons (if (symbolp function) function 'anonymous)
diff --git a/test/automated/bytecomp-tests.el b/test/automated/bytecomp-tests.el
old mode 100644
new mode 100755
index f07138d3c55..ce1306abe60
--- a/test/automated/bytecomp-tests.el
+++ b/test/automated/bytecomp-tests.el
@@ -420,10 +420,19 @@ test-byte-comp-compile-and-load
       (defun def () (m))))
   (should (equal (funcall 'def) 4)))
 
+(ert-deftest bytecomp-tests--test-no-warnings-with-advice ()
+  (defun f ())
+  (define-advice f (:around (oldfun &rest args) test)
+    (apply oldfun args))
+  (with-current-buffer (get-buffer-create "*Compile-Log*")
+    (let ((inhibit-read-only t)) (erase-buffer)))
+  (test-byte-comp-compile-and-load t '(defun f ()))
+  (with-current-buffer (get-buffer-create "*Compile-Log*")
+    (goto-char (point-min))
+    (should-not (search-forward "Warning" nil t))))
 
 ;; Local Variables:
 ;; no-byte-compile: t
 ;; End:
 
 (provide 'byte-opt-testsuite)
-
diff --git a/test/automated/cl-lib-tests.el b/test/automated/cl-lib-tests.el
old mode 100644
new mode 100755
index 5edc3e72bf2..d4e787e56a6
--- a/test/automated/cl-lib-tests.el
+++ b/test/automated/cl-lib-tests.el
@@ -230,8 +230,8 @@
 (ert-deftest cl-lib-arglist-performance ()
   ;; An `&aux' should not cause lambda's arglist to be turned into an &rest
   ;; that's parsed by hand.
-  (should (equal () (help-function-arglist 'cl-lib--con-1)))
-  (should (pcase (help-function-arglist 'cl-lib--con-2)
+  (should (equal () (get-advertised-calling-convention 'cl-lib--con-1)))
+  (should (pcase (get-advertised-calling-convention 'cl-lib--con-2)
             (`(&optional ,_) t))))
 
 (ert-deftest cl-the ()
-- 
2.15.0.rc0.271.g36b669edcc-goog


^ permalink raw reply related	[flat|nested] 10+ messages in thread

* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
  2017-10-12 23:02 bug#28803: [PATCH] Fixed compiler warnings for advised functions John Williams
@ 2017-10-14  5:51 ` Noam Postavsky
       [not found]   ` <CAEdRJLCj0xMqWx5DNXALJQrJw7Z-nUYzXgHeB3Jh3zQd0zPB+A@mail.gmail.com>
  0 siblings, 1 reply; 10+ messages in thread
From: Noam Postavsky @ 2017-10-14  5:51 UTC (permalink / raw)
  To: John Williams; +Cc: 28803

John Williams <jrw@pobox.com> writes:

> Subject: [PATCH] Fixed compiler warnings for advised functions.

I think this bug was already fixed in emacs-26, see [1: 6e2d6d54e1],
Bug#14860 (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=14860).

[1: 6e2d6d54e1]: 2017-07-14 11:27:21 -0400
  * lisp/emacs-lisp/bytecomp.el: Fix bug#14860.
  http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=6e2d6d54e1236216462c13655ea1fe573d9672e7





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
       [not found]     ` <CAEdRJLCYmqcBajzDo-zHwuTg-mN=8APiZ6REYgYV5TAAu_E02A@mail.gmail.com>
@ 2017-10-14 22:55       ` John Williams
  2017-10-14 23:47         ` Noam Postavsky
  0 siblings, 1 reply; 10+ messages in thread
From: John Williams @ 2017-10-14 22:55 UTC (permalink / raw)
  To: Noam Postavsky; +Cc: 28803

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

Oops. Is there anything that can be salvaged from my patch? Aside from
fixing the bug, it also adds a unit test and refactors the logic for
finding a function's argument list into a separate function that's not part
of the help system.

On Oct 13, 2017 10:51 PM, "Noam Postavsky" <npostavs@users.sourceforge.net>
wrote:

John Williams <jrw@pobox.com> writes:

> Subject: [PATCH] Fixed compiler warnings for advised functions.

I think this bug was already fixed in emacs-26, see [1: 6e2d6d54e1],
Bug#14860 (https://debbugs.gnu.org/cgi/bugreport.cgi?bug=14860).

[1: 6e2d6d54e1]: 2017-07-14 11:27:21 -0400
  * lisp/emacs-lisp/bytecomp.el: Fix bug#14860.
  http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=
6e2d6d54e1236216462c13655ea1fe573d9672e7

[-- Attachment #2: Type: text/html, Size: 1405 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
  2017-10-14 22:55       ` John Williams
@ 2017-10-14 23:47         ` Noam Postavsky
  2017-10-15  0:30           ` John Williams
  2017-10-21 23:33           ` Noam Postavsky
  0 siblings, 2 replies; 10+ messages in thread
From: Noam Postavsky @ 2017-10-14 23:47 UTC (permalink / raw)
  To: John Williams; +Cc: 28803

John Williams <jrw@pobox.com> writes:

> Oops. Is there anything that can be salvaged from my patch? Aside
> from fixing the bug, it also adds a unit test and refactors the logic
> for finding a function's argument list into a separate function
> that's not part of the help system.

We could add the test, it seems to be passing in emacs-26.  Have you
assigned copyright to Emacs?  (It's okay if you haven't, the patch is
small enough to go in regardless, we would just need to mark it.)

I don't think there's much need for moving the function argument
retrieval out of the help system.

(By the way, if you've spent some time looking at help-function-arglist,
perhaps you have some ideas about Bug#26270?
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26270)






^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
  2017-10-14 23:47         ` Noam Postavsky
@ 2017-10-15  0:30           ` John Williams
  2017-10-15  1:00             ` Noam Postavsky
  2017-10-21 23:33           ` Noam Postavsky
  1 sibling, 1 reply; 10+ messages in thread
From: John Williams @ 2017-10-15  0:30 UTC (permalink / raw)
  To: Noam Postavsky; +Cc: 28803

On Sat, Oct 14, 2017 at 4:47 PM, Noam Postavsky
<npostavs@users.sourceforge.net> wrote:
> John Williams <jrw@pobox.com> writes:
>
>> Oops. Is there anything that can be salvaged from my patch? Aside
>> from fixing the bug, it also adds a unit test and refactors the logic
>> for finding a function's argument list into a separate function
>> that's not part of the help system.
>
> We could add the test, it seems to be passing in emacs-26.  Have you
> assigned copyright to Emacs?  (It's okay if you haven't, the patch is
> small enough to go in regardless, we would just need to mark it.)

No; how would I go about doing that? The organization of the dev site
is a bit confusing to me.

> I don't think there's much need for moving the function argument
> retrieval out of the help system.

It's not a huge deal to me, but it seems weird that something like
nadvice.el would depend on the help system (which it would in my patch
if I hadn't moved that function--I assume the fix that was already
committed does something similar).

> (By the way, if you've spent some time looking at help-function-arglist,
> perhaps you have some ideas about Bug#26270?
> https://debbugs.gnu.org/cgi/bugreport.cgi?bug=26270)

I took a look at your patch, and without having tried running it, it
seems pretty reasonable to me. A unit test of some sort would be nice,
but since there don't seem to be any for help-function-arglist yet,
accepting the patch as-is would leave the unit test situation no worse
than it was before. I'm not a regular contributor, though, so my
opinion is worth what you paid for it.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
  2017-10-15  0:30           ` John Williams
@ 2017-10-15  1:00             ` Noam Postavsky
  0 siblings, 0 replies; 10+ messages in thread
From: Noam Postavsky @ 2017-10-15  1:00 UTC (permalink / raw)
  To: John Williams; +Cc: 28803

John Williams <jrw@pobox.com> writes:

>> We could add the test, it seems to be passing in emacs-26.  Have you
>> assigned copyright to Emacs?  (It's okay if you haven't, the patch is
>> small enough to go in regardless, we would just need to mark it.)
>
> No; how would I go about doing that? The organization of the dev site
> is a bit confusing to me.

You fill in this form:
http://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/Copyright/request-assign.program
and send it to fsf-records@gnu.org, then wait for further instructions
(in my experience it takes a little over a month to get a response).

>> I don't think there's much need for moving the function argument
>> retrieval out of the help system.
>
> It's not a huge deal to me, but it seems weird that something like
> nadvice.el would depend on the help system (which it would in my patch
> if I hadn't moved that function--I assume the fix that was already
> committed does something similar).

The other patch doesn't change nadvice.el.  There is another existing
call to help-function-arglist in advice--make-docstring, but since it is
used to create a docstring, to me it seems appropriate to depend on the
help system.






^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
  2017-10-14 23:47         ` Noam Postavsky
  2017-10-15  0:30           ` John Williams
@ 2017-10-21 23:33           ` Noam Postavsky
  2017-10-22  2:23             ` John Williams
  1 sibling, 1 reply; 10+ messages in thread
From: Noam Postavsky @ 2017-10-21 23:33 UTC (permalink / raw)
  To: John Williams; +Cc: 28803

tags 28803 fixed
close 28803 26.1
unarchive 14860
merge 28803 14860
quit

Noam Postavsky <npostavs@users.sourceforge.net> writes:

> John Williams <jrw@pobox.com> writes:
>
>> Oops. Is there anything that can be salvaged from my patch? Aside
>> from fixing the bug, it also adds a unit test and refactors the logic
>> for finding a function's argument list into a separate function
>> that's not part of the help system.
>
> We could add the test, it seems to be passing in emacs-26.

I've pushed the test.

[1: 237e96bc52]: 2017-10-21 19:20:46 -0400
  Test that advice doesn't trigger bytecomp warnings (Bug#28803)
  https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=237e96bc5259e59ac5623a93a47f64abffab4e0b





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
  2017-10-21 23:33           ` Noam Postavsky
@ 2017-10-22  2:23             ` John Williams
  2017-10-22 13:04               ` Noam Postavsky
  2017-10-22 14:04               ` Eli Zaretskii
  0 siblings, 2 replies; 10+ messages in thread
From: John Williams @ 2017-10-22  2:23 UTC (permalink / raw)
  To: Noam Postavsky; +Cc: 28803

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

Hooray, my first official contribution to Emacs! Now I have code—not much,
but some—in both Emacs and Vim, which I have to think is pretty rare.

BTW, is posting to this list really the best way to send patches? At my
job, all changes go through a code review tool similar to Gerrit
<https://www.gerritcodereview.com/>, with code uploaded using a command
analogous to "git push", so sending a patch as an email attachment feels
clumsy and anachronistic.

On Oct 21, 2017 4:33 PM, "Noam Postavsky" <npostavs@users.sourceforge.net>
wrote:

> tags 28803 fixed
> close 28803 26.1
> unarchive 14860
> merge 28803 14860
> quit
>
> Noam Postavsky <npostavs@users.sourceforge.net> writes:
>
> > John Williams <jrw@pobox.com> writes:
> >
> >> Oops. Is there anything that can be salvaged from my patch? Aside
> >> from fixing the bug, it also adds a unit test and refactors the logic
> >> for finding a function's argument list into a separate function
> >> that's not part of the help system.
> >
> > We could add the test, it seems to be passing in emacs-26.
>
> I've pushed the test.
>
> [1: 237e96bc52]: 2017-10-21 19:20:46 -0400
>   Test that advice doesn't trigger bytecomp warnings (Bug#28803)
>   https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=237e9
> 6bc5259e59ac5623a93a47f64abffab4e0b
>

[-- Attachment #2: Type: text/html, Size: 2119 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
  2017-10-22  2:23             ` John Williams
@ 2017-10-22 13:04               ` Noam Postavsky
  2017-10-22 14:04               ` Eli Zaretskii
  1 sibling, 0 replies; 10+ messages in thread
From: Noam Postavsky @ 2017-10-22 13:04 UTC (permalink / raw)
  To: John Williams; +Cc: 28803

John Williams <jrw@pobox.com> writes:

> Hooray, my first official contribution to Emacs! Now I have code—not
> much, but some—in both Emacs and Vim, which I have to think is pretty
> rare.

Congrats :)

> BTW, is posting to this list really the best way to send patches? At
> my job, all changes go through a code review tool similar to Gerrit,
> with code uploaded using a command analogous to "git push", so
> sending a patch as an email attachment feels clumsy and
> anachronistic.

For now at least yes.  There has been some grumbling from others about
the "anachronistic" methods, but nothing much has come of it as of yet.

I have some commands in my init file for smoothing the process of
sending and receiving patches between the bug list and my git repo, but
they're dependent of magit, and I'm still working out the kinks.





^ permalink raw reply	[flat|nested] 10+ messages in thread

* bug#28803: [PATCH] Fixed compiler warnings for advised functions.
  2017-10-22  2:23             ` John Williams
  2017-10-22 13:04               ` Noam Postavsky
@ 2017-10-22 14:04               ` Eli Zaretskii
  1 sibling, 0 replies; 10+ messages in thread
From: Eli Zaretskii @ 2017-10-22 14:04 UTC (permalink / raw)
  To: John Williams; +Cc: 28803, npostavs

> From: John Williams <jrw@pobox.com>
> Date: Sat, 21 Oct 2017 19:23:35 -0700
> Cc: 28803@debbugs.gnu.org
> 
> Hooray, my first official contribution to Emacs! Now I have code—not much, but some—in both Emacs and
> Vim, which I have to think is pretty rare.

Welcome on board, and thanks for your contribution.

> BTW, is posting to this list really the best way to send patches?

You are not posting to a list, you are sending to our issue tracker.
Having your patches sent to a mailing list is just one of the
interfaces provided by the tracker; there are others (like an Emacs
interface, see the debbugs package in ELPA.

> At my job, all changes go through a code
> review tool similar to Gerrit, with code uploaded using a command analogous to "git push", so sending a patch
> as an email attachment feels clumsy and anachronistic.

For large changesets, we recommend a scratch branch.





^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2017-10-22 14:04 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-12 23:02 bug#28803: [PATCH] Fixed compiler warnings for advised functions John Williams
2017-10-14  5:51 ` Noam Postavsky
     [not found]   ` <CAEdRJLCj0xMqWx5DNXALJQrJw7Z-nUYzXgHeB3Jh3zQd0zPB+A@mail.gmail.com>
     [not found]     ` <CAEdRJLCYmqcBajzDo-zHwuTg-mN=8APiZ6REYgYV5TAAu_E02A@mail.gmail.com>
2017-10-14 22:55       ` John Williams
2017-10-14 23:47         ` Noam Postavsky
2017-10-15  0:30           ` John Williams
2017-10-15  1:00             ` Noam Postavsky
2017-10-21 23:33           ` Noam Postavsky
2017-10-22  2:23             ` John Williams
2017-10-22 13:04               ` Noam Postavsky
2017-10-22 14:04               ` Eli Zaretskii

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).