unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Add zuul.el package to ELPA
@ 2022-08-29 18:37 Niklas Eklund
  2022-08-30  9:02 ` Philip Kaludercic
  2022-08-30 14:22 ` Stefan Monnier
  0 siblings, 2 replies; 15+ messages in thread
From: Niklas Eklund @ 2022-08-29 18:37 UTC (permalink / raw)
  To: emacs-devel

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

Hello,

I would like to add a package that I have developed named zuul.el,
https://git.sr.ht/~niklaseklund/zuul.el, to ELPA.

The package allows users to access build logs from the Zuul,
https://zuul-ci.org/, CI system. Users uses the completion interface of
Emacs to select a specific build and a buffer is then opened with the
build log.

The package utilizes Emacs compilation mode to navigate between errors
in the logs. It also lets the user configure where projects can be found
on the local machine so that navigating to the source code of an error
works, even though the absolute path might not be found on the local
host.

/Niklas Eklund


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-patch, Size: 710 bytes --]

From ed4201c73aa66b21b040169009dddb636ab76048 Mon Sep 17 00:00:00 2001
From: Niklas Eklund <niklas.eklund@posteo.net>
Date: Mon, 29 Aug 2022 20:26:35 +0200
Subject: [PATCH] * elpa-packages (zuul): New package

---
 elpa-packages | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/elpa-packages b/elpa-packages
index 4ae12a26ca..5ab182f93b 100644
--- a/elpa-packages
+++ b/elpa-packages
@@ -810,4 +810,8 @@
  ("yasnippet-classic-snippets" :url nil)
  ("zones"		:url nil)  ;https://www.emacswiki.org/emacs/zones.el
  ("ztree"		:url "https://github.com/fourier/ztree")
+ ("zuul"		:url "https://git.sr.ht/~niklaseklund/zuul.el"
+  :news "CHANGELOG.org"
+  :readme "README.md"
+  :auto-sync t)
  )
-- 
2.34.0


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

* Re: Add zuul.el package to ELPA
  2022-08-29 18:37 Add zuul.el package to ELPA Niklas Eklund
@ 2022-08-30  9:02 ` Philip Kaludercic
  2022-08-30 19:52   ` Niklas Eklund
  2022-08-30 14:22 ` Stefan Monnier
  1 sibling, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2022-08-30  9:02 UTC (permalink / raw)
  To: Niklas Eklund; +Cc: emacs-devel

Niklas Eklund <niklas.eklund@posteo.net> writes:

>
> Hello,
>
> I would like to add a package that I have developed named zuul.el,
> https://git.sr.ht/~niklaseklund/zuul.el, to ELPA.

Just a few comments from briefly skimming the code:

I believe if you used compat, you can reduce the minimal version of
Emacs down to 26.1, and the only hard dependency appears to be
project.el?

I'd also recommend using more specific custom types for your user
options.  See (elisp) Composite Types.

It also appears you should be able to use defconst and defvar-local in
your private variable section.

Keywords (:foo) do not have to be quoted to prevent evaluation.

I believe, but I might be mistaken, that it is advised to require rx in
a `eval-when-compile' block.

(mapconcat #'identity ...) should do the same as `string-join'

Defining a map like zuul-log-mode-map is usually done using defvar

    (defvar foo-map
      (let ((map (make-sparse-keymap)))
        (define-key map ...)
        ...
        map))

> The package allows users to access build logs from the Zuul,
> https://zuul-ci.org/, CI system. Users uses the completion interface of
> Emacs to select a specific build and a buffer is then opened with the
> build log.
>
> The package utilizes Emacs compilation mode to navigate between errors
> in the logs. It also lets the user configure where projects can be found
> on the local machine so that navigating to the source code of an error
> works, even though the absolute path might not be found on the local
> host.
>
> /Niklas Eklund
>
> From ed4201c73aa66b21b040169009dddb636ab76048 Mon Sep 17 00:00:00 2001
> From: Niklas Eklund <niklas.eklund@posteo.net>
> Date: Mon, 29 Aug 2022 20:26:35 +0200
> Subject: [PATCH] * elpa-packages (zuul): New package
>
> ---
>  elpa-packages | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/elpa-packages b/elpa-packages
> index 4ae12a26ca..5ab182f93b 100644
> --- a/elpa-packages
> +++ b/elpa-packages
> @@ -810,4 +810,8 @@
>   ("yasnippet-classic-snippets" :url nil)
>   ("zones"		:url nil)  ;https://www.emacswiki.org/emacs/zones.el
>   ("ztree"		:url "https://github.com/fourier/ztree")
> + ("zuul"		:url "https://git.sr.ht/~niklaseklund/zuul.el"
> +  :news "CHANGELOG.org"
> +  :readme "README.md"
> +  :auto-sync t)
>   )



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

* Re: Add zuul.el package to ELPA
  2022-08-29 18:37 Add zuul.el package to ELPA Niklas Eklund
  2022-08-30  9:02 ` Philip Kaludercic
@ 2022-08-30 14:22 ` Stefan Monnier
  2022-08-30 16:59   ` Niklas Eklund
  1 sibling, 1 reply; 15+ messages in thread
From: Stefan Monnier @ 2022-08-30 14:22 UTC (permalink / raw)
  To: Niklas Eklund; +Cc: emacs-devel

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

Niklas Eklund [2022-08-29 18:37:26] wrote:

> Hello,
>
> I would like to add a package that I have developed named zuul.el,
> https://git.sr.ht/~niklaseklund/zuul.el, to ELPA.

I can do that, but it requires you change the copyright line to state it
is owned by the FSF, as usual.  The patch below does that (and a few
more things which you probably want to double-check).

I notice that the doc says that it doesn't provide any commands other
than those used from `zuul-log-mode`, then I wonder why these are
autoloaded, since presumably by the time you can use them
`zuul-log-mode` is active and hence the package has been loaded.


        Stefan

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: zuul.patch --]
[-- Type: text/x-diff, Size: 9308 bytes --]

diff --git a/.gitignore b/.gitignore
index 1d8f1fc7f6..2e852834d1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 /zuul-autoloads.el
+/zuul-pkg.el
 *.elc
diff --git a/README.md b/README.md
index a84d091e17..f3e83404a5 100644
--- a/README.md
+++ b/README.md
@@ -105,4 +105,4 @@ The `zuul.el` package supports [Connection Local Variables](https://www.gnu.org/
 
 # Contributions
 
-The author might try to include the package into ELPA in the future, which means that if you want to contribute you must have a copyright assignment.
+The author might try to include the package into GNU ELPA in the future, which means that if you want to contribute you must have a copyright assignment.
diff --git a/zuul.el b/zuul.el
index 178022180f..b7340dc61c 100644
--- a/zuul.el
+++ b/zuul.el
@@ -1,6 +1,6 @@
 ;;; zuul.el --- Interface to Zuul -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2022 Niklas Eklund
+;; Copyright (C) 2022  Free Software Foundation, Inc.
 
 ;; Author: Niklas Eklund <niklas.eklund@posteo.net>
 ;; URL: https://git.sr.ht/~niklaseklund/zuul.el
@@ -371,7 +371,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
 
 ;;;; Commands
 
-;;;###autoload
 (defun zuul-switch-build ()
   "Switch to another build."
   (interactive)
@@ -379,7 +378,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
     (zuul--open-build-log
      (zuul--builds zuul--current-build))))
 
-;;;###autoload
 (defun zuul-switch-buildset ()
   "Switch to a build from a specific buildset."
   (interactive)
@@ -387,7 +385,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
     (zuul--open-build-log
      (zuul--buildsets zuul--current-build))))
 
-;;;###autoload
 (defun zuul-open-build-in-browser ()
   "Open build in browser."
   (interactive)
@@ -397,7 +394,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
              "/t/" zuul-tenant
              "/build/" .uuid "/console"))))
 
-;;;###autoload
 (defun zuul-run-build-command ()
   "Run build command from build log."
   (interactive)
@@ -406,7 +402,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
         (detached-compile command)
       (compile command))))
 
-;;;###autoload
 (defun zuul-next-build ()
   "Switch to next build."
   (interactive)
@@ -422,7 +417,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
           (cdr (assoc next-index builds-with-index))))
     (zuul--open-build-log next-build)))
 
-;;;###autoload
 (defun zuul-previous-build ()
   "Switch to previous build."
   (interactive)
@@ -438,7 +432,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
           (cdr (assoc previous-index builds-with-index))))
     (zuul--open-build-log previous-build)))
 
-;;;###autoload
 (defun zuul-quit-build ()
   "Kill buffers associated with build."
   (interactive)
@@ -459,7 +452,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
                                     .change)))))
                  (seq-do #'kill-buffer))))
 
-;;;###autoload
 (defun zuul-previous-command ()
   "Navigate to previous command."
   (interactive)
@@ -468,7 +460,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
     (when (re-search-backward re-prompt nil t)
       (goto-char (match-end 0)))))
 
-;;;###autoload
 (defun zuul-next-command ()
   "Navigate to next command."
   (interactive)
@@ -484,7 +475,7 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
   (with-connection-local-variables
    (seq-find
     (lambda (it)
-      (string= (plist-get it ':name) zuul-tenant))
+      (string= (plist-get it :name) zuul-tenant))
     zuul-tenant-configs)))
 
 (defun zuul--project-root (project)
@@ -492,7 +483,7 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
   (if-let ((tenant-config (zuul--tenant-config))
            (project-root (cdr
                           (assoc project
-                                 (plist-get tenant-config ':project-roots)))))
+                                 (plist-get tenant-config :project-roots)))))
       (concat (file-remote-p default-directory) project-root)
     (message "Project root for %s wasn't found, falling back to `default-directory'" project)
     default-directory))
@@ -854,13 +845,13 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
   (let* ((annotations
           (seq-map (lambda (candidate)
                      (cl-loop for config in annotation-config
-                              collect `(,(plist-get config ':name) .
-                                        ,(funcall (plist-get config ':function) candidate))))
+                              collect `(,(plist-get config :name) .
+                                        ,(funcall (plist-get config :function) candidate))))
                    candidates))
          (annotation-widths
           (cl-loop for config in annotation-config
                    collect
-                   `(,(plist-get config ':name) .
+                   `(,(plist-get config :name) .
                      ,(thread-last annotations
                                    (seq-map (lambda (it) (length (alist-get (plist-get config :name) it))))
                                    (funcall (lambda (it)
@@ -871,17 +862,17 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
                  `(,(cl-loop for config in annotation-config
                              concat
                              (let* ((padding 3)
-                                    (str (alist-get (plist-get config ':name) annotation))
-                                    (width (alist-get (plist-get config ':name) annotation-widths))
+                                    (str (alist-get (plist-get config :name) annotation))
+                                    (width (alist-get (plist-get config :name) annotation-widths))
                                     (new-str
-                                     (if-let* ((align (plist-get config ':align))
+                                     (if-let* ((align (plist-get config :align))
                                                (align-right (eq 'right align)))
                                          (concat (make-string (- width (length str)) ?\s)
                                                  str (make-string padding ?\s))
                                        (concat
                                         (truncate-string-to-width str width 0 ?\s)
                                         (make-string padding ?\s)))))
-                               (if-let ((face (plist-get config ':face)))
+                               (if-let ((face (plist-get config :face)))
                                    (zuul--propertize-face new-str face)
                                  new-str)))
                    . ,candidate))
@@ -1019,33 +1010,33 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
 
 (defun zuul--data-playbook-name-str (data)
   "Return name of playbook in DATA."
-  (let-alist (plist-get data ':playbook)
+  (let-alist (plist-get data :playbook)
     .playbook))
 
 (defun zuul--data-playbook-phase-str (data)
   "Return the phase of playbook in DATA."
-  (let-alist (plist-get data ':playbook)
+  (let-alist (plist-get data :playbook)
     (concat (upcase (substring .phase 0 1))
             (substring .phase 1))))
 
 (defun zuul--data-play-name-str (data)
   "Return the name of play in DATA."
-  (let-alist (plist-get data ':play)
+  (let-alist (plist-get data :play)
     .play.name))
 
 (defun zuul--data-task-name-str (data)
   "Return the name of task in DATA."
-  (let-alist (plist-get data ':task)
+  (let-alist (plist-get data :task)
     .task.name))
 
 (defun zuul--data-task-role-str (data)
   "Return the role of task in DATA."
-  (let-alist (plist-get data ':task)
+  (let-alist (plist-get data :task)
     (or .role.name "")))
 
 (defun zuul--data-task-duration-str (data)
   "Return the duration of task in DATA."
-  (let-alist (plist-get data ':task)
+  (let-alist (plist-get data :task)
     (let ((duration
            (float-time
             (time-subtract
@@ -1055,12 +1046,12 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
 
 (defun zuul--data-host-name-str (data)
   "Return the name of the host in DATA."
-  (pcase-let* ((`(,hostname . ,_data) (plist-get data ':host)))
+  (pcase-let* ((`(,hostname . ,_data) (plist-get data :host)))
     (symbol-name hostname)))
 
 (defun zuul--data-host-cmd-str (data)
   "Return the command of the host in DATA."
-  (pcase-let* ((`(,_hostname . ,data) (plist-get data ':host))
+  (pcase-let* ((`(,_hostname . ,data) (plist-get data :host))
                (cmd-str (let-alist data .cmd)))
     (if (stringp cmd-str)
         cmd-str
@@ -1068,7 +1059,7 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
 
 (defun zuul--data-host-result-str (data)
   "Return the result of the host in DATA."
-  (pcase-let* ((`(,_hostname . ,data) (plist-get data ':host))
+  (pcase-let* ((`(,_hostname . ,data) (plist-get data :host))
                (result
                 (let-alist data
                   (if .failed

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

* Re: Add zuul.el package to ELPA
  2022-08-30 14:22 ` Stefan Monnier
@ 2022-08-30 16:59   ` Niklas Eklund
  0 siblings, 0 replies; 15+ messages in thread
From: Niklas Eklund @ 2022-08-30 16:59 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> Niklas Eklund [2022-08-29 18:37:26] wrote:
>
>> Hello,
>>
>> I would like to add a package that I have developed named zuul.el,
>> https://git.sr.ht/~niklaseklund/zuul.el, to ELPA.
>
> I can do that, but it requires you change the copyright line to state it
> is owned by the FSF, as usual.  The patch below does that (and a few
> more things which you probably want to double-check).

Absolutely, I will apply that :)

> I notice that the doc says that it doesn't provide any commands other
> than those used from `zuul-log-mode`, then I wonder why these are
> autoloaded, since presumably by the time you can use them
> `zuul-log-mode` is active and hence the package has been loaded.

Thanks for the patch and feedback, the autoloaded commands could indeed
be removed.
>
>         Stefan

/Niklas

> diff --git a/.gitignore b/.gitignore
> index 1d8f1fc7f6..2e852834d1 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -1,2 +1,3 @@
>  /zuul-autoloads.el
> +/zuul-pkg.el
>  *.elc
> diff --git a/README.md b/README.md
> index a84d091e17..f3e83404a5 100644
> --- a/README.md
> +++ b/README.md
> @@ -105,4 +105,4 @@ The `zuul.el` package supports [Connection Local Variables](https://www.gnu.org/
>  
>  # Contributions
>  
> -The author might try to include the package into ELPA in the future, which means that if you want to contribute you must have a copyright assignment.
> +The author might try to include the package into GNU ELPA in the future, which means that if you want to contribute you must have a copyright assignment.
> diff --git a/zuul.el b/zuul.el
> index 178022180f..b7340dc61c 100644
> --- a/zuul.el
> +++ b/zuul.el
> @@ -1,6 +1,6 @@
>  ;;; zuul.el --- Interface to Zuul -*- lexical-binding: t; -*-
>  
> -;; Copyright (C) 2022 Niklas Eklund
> +;; Copyright (C) 2022  Free Software Foundation, Inc.
>  
>  ;; Author: Niklas Eklund <niklas.eklund@posteo.net>
>  ;; URL: https://git.sr.ht/~niklaseklund/zuul.el
> @@ -371,7 +371,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>  
>  ;;;; Commands
>  
> -;;;###autoload
>  (defun zuul-switch-build ()
>    "Switch to another build."
>    (interactive)
> @@ -379,7 +378,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>      (zuul--open-build-log
>       (zuul--builds zuul--current-build))))
>  
> -;;;###autoload
>  (defun zuul-switch-buildset ()
>    "Switch to a build from a specific buildset."
>    (interactive)
> @@ -387,7 +385,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>      (zuul--open-build-log
>       (zuul--buildsets zuul--current-build))))
>  
> -;;;###autoload
>  (defun zuul-open-build-in-browser ()
>    "Open build in browser."
>    (interactive)
> @@ -397,7 +394,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>               "/t/" zuul-tenant
>               "/build/" .uuid "/console"))))
>  
> -;;;###autoload
>  (defun zuul-run-build-command ()
>    "Run build command from build log."
>    (interactive)
> @@ -406,7 +402,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>          (detached-compile command)
>        (compile command))))
>  
> -;;;###autoload
>  (defun zuul-next-build ()
>    "Switch to next build."
>    (interactive)
> @@ -422,7 +417,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>            (cdr (assoc next-index builds-with-index))))
>      (zuul--open-build-log next-build)))
>  
> -;;;###autoload
>  (defun zuul-previous-build ()
>    "Switch to previous build."
>    (interactive)
> @@ -438,7 +432,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>            (cdr (assoc previous-index builds-with-index))))
>      (zuul--open-build-log previous-build)))
>  
> -;;;###autoload
>  (defun zuul-quit-build ()
>    "Kill buffers associated with build."
>    (interactive)
> @@ -459,7 +452,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>                                      .change)))))
>                   (seq-do #'kill-buffer))))
>  
> -;;;###autoload
>  (defun zuul-previous-command ()
>    "Navigate to previous command."
>    (interactive)
> @@ -468,7 +460,6 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>      (when (re-search-backward re-prompt nil t)
>        (goto-char (match-end 0)))))
>  
> -;;;###autoload
>  (defun zuul-next-command ()
>    "Navigate to next command."
>    (interactive)
> @@ -484,7 +475,7 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>    (with-connection-local-variables
>     (seq-find
>      (lambda (it)
> -      (string= (plist-get it ':name) zuul-tenant))
> +      (string= (plist-get it :name) zuul-tenant))
>      zuul-tenant-configs)))
>  
>  (defun zuul--project-root (project)
> @@ -492,7 +483,7 @@ Optionally provide parameters CHANGE, PROJECT, PATCHSET and LIMIT."
>    (if-let ((tenant-config (zuul--tenant-config))
>             (project-root (cdr
>                            (assoc project
> -                                 (plist-get tenant-config ':project-roots)))))
> +                                 (plist-get tenant-config :project-roots)))))
>        (concat (file-remote-p default-directory) project-root)
>      (message "Project root for %s wasn't found, falling back to `default-directory'" project)
>      default-directory))
> @@ -854,13 +845,13 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
>    (let* ((annotations
>            (seq-map (lambda (candidate)
>                       (cl-loop for config in annotation-config
> -                              collect `(,(plist-get config ':name) .
> -                                        ,(funcall (plist-get config ':function) candidate))))
> +                              collect `(,(plist-get config :name) .
> +                                        ,(funcall (plist-get config :function) candidate))))
>                     candidates))
>           (annotation-widths
>            (cl-loop for config in annotation-config
>                     collect
> -                   `(,(plist-get config ':name) .
> +                   `(,(plist-get config :name) .
>                       ,(thread-last annotations
>                                     (seq-map (lambda (it) (length (alist-get (plist-get config :name) it))))
>                                     (funcall (lambda (it)
> @@ -871,17 +862,17 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
>                   `(,(cl-loop for config in annotation-config
>                               concat
>                               (let* ((padding 3)
> -                                    (str (alist-get (plist-get config ':name) annotation))
> -                                    (width (alist-get (plist-get config ':name) annotation-widths))
> +                                    (str (alist-get (plist-get config :name) annotation))
> +                                    (width (alist-get (plist-get config :name) annotation-widths))
>                                      (new-str
> -                                     (if-let* ((align (plist-get config ':align))
> +                                     (if-let* ((align (plist-get config :align))
>                                                 (align-right (eq 'right align)))
>                                           (concat (make-string (- width (length str)) ?\s)
>                                                   str (make-string padding ?\s))
>                                         (concat
>                                          (truncate-string-to-width str width 0 ?\s)
>                                          (make-string padding ?\s)))))
> -                               (if-let ((face (plist-get config ':face)))
> +                               (if-let ((face (plist-get config :face)))
>                                     (zuul--propertize-face new-str face)
>                                   new-str)))
>                     . ,candidate))
> @@ -1019,33 +1010,33 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
>  
>  (defun zuul--data-playbook-name-str (data)
>    "Return name of playbook in DATA."
> -  (let-alist (plist-get data ':playbook)
> +  (let-alist (plist-get data :playbook)
>      .playbook))
>  
>  (defun zuul--data-playbook-phase-str (data)
>    "Return the phase of playbook in DATA."
> -  (let-alist (plist-get data ':playbook)
> +  (let-alist (plist-get data :playbook)
>      (concat (upcase (substring .phase 0 1))
>              (substring .phase 1))))
>  
>  (defun zuul--data-play-name-str (data)
>    "Return the name of play in DATA."
> -  (let-alist (plist-get data ':play)
> +  (let-alist (plist-get data :play)
>      .play.name))
>  
>  (defun zuul--data-task-name-str (data)
>    "Return the name of task in DATA."
> -  (let-alist (plist-get data ':task)
> +  (let-alist (plist-get data :task)
>      .task.name))
>  
>  (defun zuul--data-task-role-str (data)
>    "Return the role of task in DATA."
> -  (let-alist (plist-get data ':task)
> +  (let-alist (plist-get data :task)
>      (or .role.name "")))
>  
>  (defun zuul--data-task-duration-str (data)
>    "Return the duration of task in DATA."
> -  (let-alist (plist-get data ':task)
> +  (let-alist (plist-get data :task)
>      (let ((duration
>             (float-time
>              (time-subtract
> @@ -1055,12 +1046,12 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
>  
>  (defun zuul--data-host-name-str (data)
>    "Return the name of the host in DATA."
> -  (pcase-let* ((`(,hostname . ,_data) (plist-get data ':host)))
> +  (pcase-let* ((`(,hostname . ,_data) (plist-get data :host)))
>      (symbol-name hostname)))
>  
>  (defun zuul--data-host-cmd-str (data)
>    "Return the command of the host in DATA."
> -  (pcase-let* ((`(,_hostname . ,data) (plist-get data ':host))
> +  (pcase-let* ((`(,_hostname . ,data) (plist-get data :host))
>                 (cmd-str (let-alist data .cmd)))
>      (if (stringp cmd-str)
>          cmd-str
> @@ -1068,7 +1059,7 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
>  
>  (defun zuul--data-host-result-str (data)
>    "Return the result of the host in DATA."
> -  (pcase-let* ((`(,_hostname . ,data) (plist-get data ':host))
> +  (pcase-let* ((`(,_hostname . ,data) (plist-get data :host))
>                 (result
>                  (let-alist data
>                    (if .failed



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

* Re: Add zuul.el package to ELPA
  2022-08-30  9:02 ` Philip Kaludercic
@ 2022-08-30 19:52   ` Niklas Eklund
  2022-08-30 22:11     ` Philip Kaludercic
  0 siblings, 1 reply; 15+ messages in thread
From: Niklas Eklund @ 2022-08-30 19:52 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: emacs-devel

Philip Kaludercic <philipk@posteo.net> writes:

> Niklas Eklund <niklas.eklund@posteo.net> writes:
>
>>
>> Hello,
>>
>> I would like to add a package that I have developed named zuul.el,
>> https://git.sr.ht/~niklaseklund/zuul.el, to ELPA.
>
> Just a few comments from briefly skimming the code:

Hi Philip,

thanks a lot for the review! :)

> I believe if you used compat, you can reduce the minimal version of
> Emacs down to 26.1, and the only hard dependency appears to be
> project.el?

I wasn't familiar with the compat library. But if I have a dependency to
project.el which package-lint tells me I need to have Emacs 28.1 for, is
the proper way to add project to Package-Requires to circumvent the
need? Should I then do the same for e.g. seq or does compat provide
functionality for that library?

> I'd also recommend using more specific custom types for your user
> options.  See (elisp) Composite Types.

Thanks for the suggestion, I wasn't aware about these composite types!

> It also appears you should be able to use defconst and defvar-local in
> your private variable section.

defvar-local I didn't know about.

> Keywords (:foo) do not have to be quoted to prevent evaluation.
>
> I believe, but I might be mistaken, that it is advised to require rx in
> a `eval-when-compile' block.

Make sense.

> (mapconcat #'identity ...) should do the same as `string-join'

Yeah this becomes clearer.

> Defining a map like zuul-log-mode-map is usually done using defvar
>
>     (defvar foo-map
>       (let ((map (make-sparse-keymap)))
>         (define-key map ...)
>         ...
>         map))

I have taken your suggestions and made them into the following commits:
- Add defvar to zuul-log-mode-map
- Replace mapconcat with string-join
- Require rx at compilation
- Use defconst and defvar-local in private vars
- Use composite types for defcustom variables
https://git.sr.ht/~niklaseklund/zuul.el/log

/Niklas

>> The package allows users to access build logs from the Zuul,
>> https://zuul-ci.org/, CI system. Users uses the completion interface of
>> Emacs to select a specific build and a buffer is then opened with the
>> build log.
>>
>> The package utilizes Emacs compilation mode to navigate between errors
>> in the logs. It also lets the user configure where projects can be found
>> on the local machine so that navigating to the source code of an error
>> works, even though the absolute path might not be found on the local
>> host.
>>
>> /Niklas Eklund
>>
>> From ed4201c73aa66b21b040169009dddb636ab76048 Mon Sep 17 00:00:00 2001
>> From: Niklas Eklund <niklas.eklund@posteo.net>
>> Date: Mon, 29 Aug 2022 20:26:35 +0200
>> Subject: [PATCH] * elpa-packages (zuul): New package
>>
>> ---
>>  elpa-packages | 4 ++++
>>  1 file changed, 4 insertions(+)
>>
>> diff --git a/elpa-packages b/elpa-packages
>> index 4ae12a26ca..5ab182f93b 100644
>> --- a/elpa-packages
>> +++ b/elpa-packages
>> @@ -810,4 +810,8 @@
>>   ("yasnippet-classic-snippets" :url nil)
>>   ("zones"		:url nil)  ;https://www.emacswiki.org/emacs/zones.el
>>   ("ztree"		:url "https://github.com/fourier/ztree")
>> + ("zuul"		:url "https://git.sr.ht/~niklaseklund/zuul.el"
>> +  :news "CHANGELOG.org"
>> +  :readme "README.md"
>> +  :auto-sync t)
>>   )



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

* Re: Add zuul.el package to ELPA
  2022-08-30 19:52   ` Niklas Eklund
@ 2022-08-30 22:11     ` Philip Kaludercic
  2022-08-31  9:25       ` Niklas Eklund
  0 siblings, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2022-08-30 22:11 UTC (permalink / raw)
  To: Niklas Eklund; +Cc: emacs-devel

Niklas Eklund <niklas.eklund@posteo.net> writes:

>> I believe if you used compat, you can reduce the minimal version of
>> Emacs down to 26.1, and the only hard dependency appears to be
>> project.el?
>
> I wasn't familiar with the compat library. But if I have a dependency to
> project.el which package-lint tells me I need to have Emacs 28.1 for, is
> the proper way to add project to Package-Requires to circumvent the
> need? Should I then do the same for e.g. seq or does compat provide
> functionality for that library?

No, compat does not automatically add other dependencies.  If you need
some other core package that is also available from ELPA, you will need
to add the dependency to the "Package-Requires" list yourself.

But I have noticed that compat is missing `text-property-search-forward'
and `text-property-search-backward'.  If you are interested in using
compat, I've already implemented the code and could publish a release
with these functions added.

>> I'd also recommend using more specific custom types for your user
>> options.  See (elisp) Composite Types.
>
> Thanks for the suggestion, I wasn't aware about these composite types!

This is also useful since the new `setopt' macro can use this for
type-checking!

>> It also appears you should be able to use defconst and defvar-local in
>> your private variable section.
>
> defvar-local I didn't know about.
>
>> Keywords (:foo) do not have to be quoted to prevent evaluation.
>>
>> I believe, but I might be mistaken, that it is advised to require rx in
>> a `eval-when-compile' block.
>
> Make sense.
>
>> (mapconcat #'identity ...) should do the same as `string-join'
>
> Yeah this becomes clearer.
>
>> Defining a map like zuul-log-mode-map is usually done using defvar
>>
>>     (defvar foo-map
>>       (let ((map (make-sparse-keymap)))
>>         (define-key map ...)
>>         ...
>>         map))
>
> I have taken your suggestions and made them into the following commits:
> - Add defvar to zuul-log-mode-map
> - Replace mapconcat with string-join
> - Require rx at compilation
> - Use defconst and defvar-local in private vars
> - Use composite types for defcustom variables
> https://git.sr.ht/~niklaseklund/zuul.el/log
>
> /Niklas
>
>>> The package allows users to access build logs from the Zuul,
>>> https://zuul-ci.org/, CI system. Users uses the completion interface of
>>> Emacs to select a specific build and a buffer is then opened with the
>>> build log.
>>>
>>> The package utilizes Emacs compilation mode to navigate between errors
>>> in the logs. It also lets the user configure where projects can be found
>>> on the local machine so that navigating to the source code of an error
>>> works, even though the absolute path might not be found on the local
>>> host.
>>>
>>> /Niklas Eklund
>>>
>>> From ed4201c73aa66b21b040169009dddb636ab76048 Mon Sep 17 00:00:00 2001
>>> From: Niklas Eklund <niklas.eklund@posteo.net>
>>> Date: Mon, 29 Aug 2022 20:26:35 +0200
>>> Subject: [PATCH] * elpa-packages (zuul): New package
>>>
>>> ---
>>>  elpa-packages | 4 ++++
>>>  1 file changed, 4 insertions(+)
>>>
>>> diff --git a/elpa-packages b/elpa-packages
>>> index 4ae12a26ca..5ab182f93b 100644
>>> --- a/elpa-packages
>>> +++ b/elpa-packages
>>> @@ -810,4 +810,8 @@
>>>   ("yasnippet-classic-snippets" :url nil)
>>>   ("zones"		:url nil)  ;https://www.emacswiki.org/emacs/zones.el
>>>   ("ztree"		:url "https://github.com/fourier/ztree")
>>> + ("zuul"		:url "https://git.sr.ht/~niklaseklund/zuul.el"
>>> +  :news "CHANGELOG.org"
>>> +  :readme "README.md"
>>> +  :auto-sync t)
>>>   )



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

* Re: Add zuul.el package to ELPA
  2022-08-30 22:11     ` Philip Kaludercic
@ 2022-08-31  9:25       ` Niklas Eklund
  2022-08-31  9:54         ` Niklas Eklund
  0 siblings, 1 reply; 15+ messages in thread
From: Niklas Eklund @ 2022-08-31  9:25 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: emacs-devel

Philip Kaludercic <philipk@posteo.net> writes:

> Niklas Eklund <niklas.eklund@posteo.net> writes:
>
>>> I believe if you used compat, you can reduce the minimal version of
>>> Emacs down to 26.1, and the only hard dependency appears to be
>>> project.el?
>>
>> I wasn't familiar with the compat library. But if I have a dependency to
>> project.el which package-lint tells me I need to have Emacs 28.1 for, is
>> the proper way to add project to Package-Requires to circumvent the
>> need? Should I then do the same for e.g. seq or does compat provide
>> functionality for that library?
>
> No, compat does not automatically add other dependencies.  If you need
> some other core package that is also available from ELPA, you will need
> to add the dependency to the "Package-Requires" list yourself.

Alright, then I understand. I'll look into that.

> But I have noticed that compat is missing `text-property-search-forward'
> and `text-property-search-backward'.  If you are interested in using
> compat, I've already implemented the code and could publish a release
> with these functions added.

I am interested in adding support for compat, would be good to not
provide a package that only works for the most recent Emacs. Let me know
when the new release is available :)

>>> I'd also recommend using more specific custom types for your user
>>> options.  See (elisp) Composite Types.
>>
>> Thanks for the suggestion, I wasn't aware about these composite types!
>
> This is also useful since the new `setopt' macro can use this for
> type-checking!

That's neat!

/Niklas

>>> It also appears you should be able to use defconst and defvar-local in
>>> your private variable section.
>>
>> defvar-local I didn't know about.
>>
>>> Keywords (:foo) do not have to be quoted to prevent evaluation.
>>>
>>> I believe, but I might be mistaken, that it is advised to require rx in
>>> a `eval-when-compile' block.
>>
>> Make sense.
>>
>>> (mapconcat #'identity ...) should do the same as `string-join'
>>
>> Yeah this becomes clearer.
>>
>>> Defining a map like zuul-log-mode-map is usually done using defvar
>>>
>>>     (defvar foo-map
>>>       (let ((map (make-sparse-keymap)))
>>>         (define-key map ...)
>>>         ...
>>>         map))
>>
>> I have taken your suggestions and made them into the following commits:
>> - Add defvar to zuul-log-mode-map
>> - Replace mapconcat with string-join
>> - Require rx at compilation
>> - Use defconst and defvar-local in private vars
>> - Use composite types for defcustom variables
>> https://git.sr.ht/~niklaseklund/zuul.el/log
>>
>> /Niklas
>>
>>>> The package allows users to access build logs from the Zuul,
>>>> https://zuul-ci.org/, CI system. Users uses the completion interface of
>>>> Emacs to select a specific build and a buffer is then opened with the
>>>> build log.
>>>>
>>>> The package utilizes Emacs compilation mode to navigate between errors
>>>> in the logs. It also lets the user configure where projects can be found
>>>> on the local machine so that navigating to the source code of an error
>>>> works, even though the absolute path might not be found on the local
>>>> host.
>>>>
>>>> /Niklas Eklund
>>>>
>>>> From ed4201c73aa66b21b040169009dddb636ab76048 Mon Sep 17 00:00:00 2001
>>>> From: Niklas Eklund <niklas.eklund@posteo.net>
>>>> Date: Mon, 29 Aug 2022 20:26:35 +0200
>>>> Subject: [PATCH] * elpa-packages (zuul): New package
>>>>
>>>> ---
>>>>  elpa-packages | 4 ++++
>>>>  1 file changed, 4 insertions(+)
>>>>
>>>> diff --git a/elpa-packages b/elpa-packages
>>>> index 4ae12a26ca..5ab182f93b 100644
>>>> --- a/elpa-packages
>>>> +++ b/elpa-packages
>>>> @@ -810,4 +810,8 @@
>>>>   ("yasnippet-classic-snippets" :url nil)
>>>>   ("zones"		:url nil)  ;https://www.emacswiki.org/emacs/zones.el
>>>>   ("ztree"		:url "https://github.com/fourier/ztree")
>>>> + ("zuul"		:url "https://git.sr.ht/~niklaseklund/zuul.el"
>>>> +  :news "CHANGELOG.org"
>>>> +  :readme "README.md"
>>>> +  :auto-sync t)
>>>>   )



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

* Re: Add zuul.el package to ELPA
  2022-08-31  9:25       ` Niklas Eklund
@ 2022-08-31  9:54         ` Niklas Eklund
  2022-08-31 11:09           ` Philip Kaludercic
  0 siblings, 1 reply; 15+ messages in thread
From: Niklas Eklund @ 2022-08-31  9:54 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: emacs-devel

Niklas Eklund <niklas.eklund@posteo.net> writes:

> Philip Kaludercic <philipk@posteo.net> writes:
>
>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>
>>>> I believe if you used compat, you can reduce the minimal version of
>>>> Emacs down to 26.1, and the only hard dependency appears to be
>>>> project.el?

One other thing I saw that package lint complained about, and that I
couldn't find in the compat package was with-connection-local-variables?

486:3: error: You should depend on (emacs "27.1") if you need
`with-connection-local-variables'.

I see in the manual that it doesn't seem to be supported
https://git.sr.ht/~pkal/compat/tree/master/compat.texi#L1753. So I guess
I can lower it to 27.1 the most, but that would be a good win over 28.1 :)

/Niklas

>>> I wasn't familiar with the compat library. But if I have a dependency to
>>> project.el which package-lint tells me I need to have Emacs 28.1 for, is
>>> the proper way to add project to Package-Requires to circumvent the
>>> need? Should I then do the same for e.g. seq or does compat provide
>>> functionality for that library?
>>
>> No, compat does not automatically add other dependencies.  If you need
>> some other core package that is also available from ELPA, you will need
>> to add the dependency to the "Package-Requires" list yourself.
>
> Alright, then I understand. I'll look into that.
>
>> But I have noticed that compat is missing `text-property-search-forward'
>> and `text-property-search-backward'.  If you are interested in using
>> compat, I've already implemented the code and could publish a release
>> with these functions added.
>
> I am interested in adding support for compat, would be good to not
> provide a package that only works for the most recent Emacs. Let me know
> when the new release is available :)
>
>>>> I'd also recommend using more specific custom types for your user
>>>> options.  See (elisp) Composite Types.
>>>
>>> Thanks for the suggestion, I wasn't aware about these composite types!
>>
>> This is also useful since the new `setopt' macro can use this for
>> type-checking!
>
> That's neat!
>
> /Niklas
>
>>>> It also appears you should be able to use defconst and defvar-local in
>>>> your private variable section.
>>>
>>> defvar-local I didn't know about.
>>>
>>>> Keywords (:foo) do not have to be quoted to prevent evaluation.
>>>>
>>>> I believe, but I might be mistaken, that it is advised to require rx in
>>>> a `eval-when-compile' block.
>>>
>>> Make sense.
>>>
>>>> (mapconcat #'identity ...) should do the same as `string-join'
>>>
>>> Yeah this becomes clearer.
>>>
>>>> Defining a map like zuul-log-mode-map is usually done using defvar
>>>>
>>>>     (defvar foo-map
>>>>       (let ((map (make-sparse-keymap)))
>>>>         (define-key map ...)
>>>>         ...
>>>>         map))
>>>
>>> I have taken your suggestions and made them into the following commits:
>>> - Add defvar to zuul-log-mode-map
>>> - Replace mapconcat with string-join
>>> - Require rx at compilation
>>> - Use defconst and defvar-local in private vars
>>> - Use composite types for defcustom variables
>>> https://git.sr.ht/~niklaseklund/zuul.el/log
>>>
>>> /Niklas
>>>
>>>>> The package allows users to access build logs from the Zuul,
>>>>> https://zuul-ci.org/, CI system. Users uses the completion interface of
>>>>> Emacs to select a specific build and a buffer is then opened with the
>>>>> build log.
>>>>>
>>>>> The package utilizes Emacs compilation mode to navigate between errors
>>>>> in the logs. It also lets the user configure where projects can be found
>>>>> on the local machine so that navigating to the source code of an error
>>>>> works, even though the absolute path might not be found on the local
>>>>> host.
>>>>>
>>>>> /Niklas Eklund
>>>>>
>>>>> From ed4201c73aa66b21b040169009dddb636ab76048 Mon Sep 17 00:00:00 2001
>>>>> From: Niklas Eklund <niklas.eklund@posteo.net>
>>>>> Date: Mon, 29 Aug 2022 20:26:35 +0200
>>>>> Subject: [PATCH] * elpa-packages (zuul): New package
>>>>>
>>>>> ---
>>>>>  elpa-packages | 4 ++++
>>>>>  1 file changed, 4 insertions(+)
>>>>>
>>>>> diff --git a/elpa-packages b/elpa-packages
>>>>> index 4ae12a26ca..5ab182f93b 100644
>>>>> --- a/elpa-packages
>>>>> +++ b/elpa-packages
>>>>> @@ -810,4 +810,8 @@
>>>>>   ("yasnippet-classic-snippets" :url nil)
>>>>>   ("zones"		:url nil)  ;https://www.emacswiki.org/emacs/zones.el
>>>>>   ("ztree"		:url "https://github.com/fourier/ztree")
>>>>> + ("zuul"		:url "https://git.sr.ht/~niklaseklund/zuul.el"
>>>>> +  :news "CHANGELOG.org"
>>>>> +  :readme "README.md"
>>>>> +  :auto-sync t)
>>>>>   )



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

* Re: Add zuul.el package to ELPA
  2022-08-31  9:54         ` Niklas Eklund
@ 2022-08-31 11:09           ` Philip Kaludercic
  2022-08-31 11:44             ` Niklas Eklund
  0 siblings, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2022-08-31 11:09 UTC (permalink / raw)
  To: Niklas Eklund; +Cc: emacs-devel

Niklas Eklund <niklas.eklund@posteo.net> writes:

> Niklas Eklund <niklas.eklund@posteo.net> writes:
>
>> Philip Kaludercic <philipk@posteo.net> writes:
>>
>>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>>
>>>>> I believe if you used compat, you can reduce the minimal version of
>>>>> Emacs down to 26.1, and the only hard dependency appears to be
>>>>> project.el?
>
> One other thing I saw that package lint complained about, and that I
> couldn't find in the compat package was with-connection-local-variables?
>
> 486:3: error: You should depend on (emacs "27.1") if you need
> `with-connection-local-variables'.
>
> I see in the manual that it doesn't seem to be supported
> https://git.sr.ht/~pkal/compat/tree/master/compat.texi#L1753. So I guess
> I can lower it to 27.1 the most, but that would be a good win over 28.1 :)

True, that is missing, but reading through the source in files-x.el, it
*might* be possible to add that functionality in a backwards
 way?  But if not, 27.1 is still a considerable improvement considering
 that Debian Stable is currently distributing that version.

> /Niklas
>
>>>> I wasn't familiar with the compat library. But if I have a dependency to
>>>> project.el which package-lint tells me I need to have Emacs 28.1 for, is
>>>> the proper way to add project to Package-Requires to circumvent the
>>>> need? Should I then do the same for e.g. seq or does compat provide
>>>> functionality for that library?
>>>
>>> No, compat does not automatically add other dependencies.  If you need
>>> some other core package that is also available from ELPA, you will need
>>> to add the dependency to the "Package-Requires" list yourself.
>>
>> Alright, then I understand. I'll look into that.
>>
>>> But I have noticed that compat is missing `text-property-search-forward'
>>> and `text-property-search-backward'.  If you are interested in using
>>> compat, I've already implemented the code and could publish a release
>>> with these functions added.
>>
>> I am interested in adding support for compat, would be good to not
>> provide a package that only works for the most recent Emacs. Let me know
>> when the new release is available :)
>>
>>>>> I'd also recommend using more specific custom types for your user
>>>>> options.  See (elisp) Composite Types.
>>>>
>>>> Thanks for the suggestion, I wasn't aware about these composite types!
>>>
>>> This is also useful since the new `setopt' macro can use this for
>>> type-checking!
>>
>> That's neat!
>>
>> /Niklas
>>
>>>>> It also appears you should be able to use defconst and defvar-local in
>>>>> your private variable section.
>>>>
>>>> defvar-local I didn't know about.
>>>>
>>>>> Keywords (:foo) do not have to be quoted to prevent evaluation.
>>>>>
>>>>> I believe, but I might be mistaken, that it is advised to require rx in
>>>>> a `eval-when-compile' block.
>>>>
>>>> Make sense.
>>>>
>>>>> (mapconcat #'identity ...) should do the same as `string-join'
>>>>
>>>> Yeah this becomes clearer.
>>>>
>>>>> Defining a map like zuul-log-mode-map is usually done using defvar
>>>>>
>>>>>     (defvar foo-map
>>>>>       (let ((map (make-sparse-keymap)))
>>>>>         (define-key map ...)
>>>>>         ...
>>>>>         map))
>>>>
>>>> I have taken your suggestions and made them into the following commits:
>>>> - Add defvar to zuul-log-mode-map
>>>> - Replace mapconcat with string-join
>>>> - Require rx at compilation
>>>> - Use defconst and defvar-local in private vars
>>>> - Use composite types for defcustom variables
>>>> https://git.sr.ht/~niklaseklund/zuul.el/log
>>>>
>>>> /Niklas
>>>>
>>>>>> The package allows users to access build logs from the Zuul,
>>>>>> https://zuul-ci.org/, CI system. Users uses the completion interface of
>>>>>> Emacs to select a specific build and a buffer is then opened with the
>>>>>> build log.
>>>>>>
>>>>>> The package utilizes Emacs compilation mode to navigate between errors
>>>>>> in the logs. It also lets the user configure where projects can be found
>>>>>> on the local machine so that navigating to the source code of an error
>>>>>> works, even though the absolute path might not be found on the local
>>>>>> host.
>>>>>>
>>>>>> /Niklas Eklund
>>>>>>
>>>>>> From ed4201c73aa66b21b040169009dddb636ab76048 Mon Sep 17 00:00:00 2001
>>>>>> From: Niklas Eklund <niklas.eklund@posteo.net>
>>>>>> Date: Mon, 29 Aug 2022 20:26:35 +0200
>>>>>> Subject: [PATCH] * elpa-packages (zuul): New package
>>>>>>
>>>>>> ---
>>>>>>  elpa-packages | 4 ++++
>>>>>>  1 file changed, 4 insertions(+)
>>>>>>
>>>>>> diff --git a/elpa-packages b/elpa-packages
>>>>>> index 4ae12a26ca..5ab182f93b 100644
>>>>>> --- a/elpa-packages
>>>>>> +++ b/elpa-packages
>>>>>> @@ -810,4 +810,8 @@
>>>>>>   ("yasnippet-classic-snippets" :url nil)
>>>>>>   ("zones"		:url nil)  ;https://www.emacswiki.org/emacs/zones.el
>>>>>>   ("ztree"		:url "https://github.com/fourier/ztree")
>>>>>> + ("zuul"		:url "https://git.sr.ht/~niklaseklund/zuul.el"
>>>>>> +  :news "CHANGELOG.org"
>>>>>> +  :readme "README.md"
>>>>>> +  :auto-sync t)
>>>>>>   )



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

* Re: Add zuul.el package to ELPA
  2022-08-31 11:09           ` Philip Kaludercic
@ 2022-08-31 11:44             ` Niklas Eklund
  2022-08-31 11:57               ` Philip Kaludercic
  0 siblings, 1 reply; 15+ messages in thread
From: Niklas Eklund @ 2022-08-31 11:44 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: emacs-devel

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

Philip Kaludercic <philipk@posteo.net> writes:

> Niklas Eklund <niklas.eklund@posteo.net> writes:
>
>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>
>>> Philip Kaludercic <philipk@posteo.net> writes:
>>>
>>>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>>>
>>>>>> I believe if you used compat, you can reduce the minimal version of
>>>>>> Emacs down to 26.1, and the only hard dependency appears to be
>>>>>> project.el?
>>
>> One other thing I saw that package lint complained about, and that I
>> couldn't find in the compat package was with-connection-local-variables?
>>
>> 486:3: error: You should depend on (emacs "27.1") if you need
>> `with-connection-local-variables'.
>>
>> I see in the manual that it doesn't seem to be supported
>> https://git.sr.ht/~pkal/compat/tree/master/compat.texi#L1753. So I guess
>> I can lower it to 27.1 the most, but that would be a good win over 28.1 :)
>
> True, that is missing, but reading through the source in files-x.el, it
> *might* be possible to add that functionality in a backwards
>  way?  But if not, 27.1 is still a considerable improvement considering
>  that Debian Stable is currently distributing that version.

Absolutely, a great improvement! :) If that is added in the future that
would be even better of course, seems like that's the only thing
blocking the package from supporting 26. 

Once you have released a new version of compat I'll try to depend on
that. Would this patch be sufficient you think? (given that I update the
version of compat to the latest)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: patch --]
[-- Type: text/x-diff, Size: 1408 bytes --]

From a698110e477a1e640b851f912601c67e19bea6b7 Mon Sep 17 00:00:00 2001
From: Niklas Eklund <niklas.eklund@posteo.net>
Date: Wed, 31 Aug 2022 13:38:06 +0200
Subject: [PATCH] Use compat package to support older Emacs version

This patch lowers the required Emacs version from 28.1 to 27.1. This
is done by using the compat package in combination with an explicit
dependency to the project package.
---
 zuul.el | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/zuul.el b/zuul.el
index f2b146c..34d4bf7 100644
--- a/zuul.el
+++ b/zuul.el
@@ -5,7 +5,7 @@
 ;; Author: Niklas Eklund <niklas.eklund@posteo.net>
 ;; URL: https://git.sr.ht/~niklaseklund/zuul.el
 ;; Version: 0.3
-;; Package-Requires: ((emacs "28.1"))
+;; Package-Requires: ((emacs "27.1") (compat "2.1.2.2") (project "0.8.1"))
 ;; Keywords: convenience tools
 
 ;; This file is not part of GNU Emacs.
@@ -41,6 +41,9 @@
 
 (require 'ansi-color)
 (require 'comint)
+(require 'compat)
+(require 'compat-27)
+(require 'compat-28)
 (require 'project)
 (eval-when-compile (require 'rx))
 (require 'subr-x)
@@ -770,7 +773,7 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
   "Parse the output of a json build."
   (let ((build (zuul--request-json-parser)))
     (string-join
-     (flatten-list
+     (flatten-tree
       (seq-map #'zuul--build-playbook-output build))
      "\n")))
 
-- 
2.34.0


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


/Niklas

>> /Niklas
>>
>>>>> I wasn't familiar with the compat library. But if I have a dependency to
>>>>> project.el which package-lint tells me I need to have Emacs 28.1 for, is
>>>>> the proper way to add project to Package-Requires to circumvent the
>>>>> need? Should I then do the same for e.g. seq or does compat provide
>>>>> functionality for that library?
>>>>
>>>> No, compat does not automatically add other dependencies.  If you need
>>>> some other core package that is also available from ELPA, you will need
>>>> to add the dependency to the "Package-Requires" list yourself.
>>>
>>> Alright, then I understand. I'll look into that.
>>>
>>>> But I have noticed that compat is missing `text-property-search-forward'
>>>> and `text-property-search-backward'.  If you are interested in using
>>>> compat, I've already implemented the code and could publish a release
>>>> with these functions added.
>>>
>>> I am interested in adding support for compat, would be good to not
>>> provide a package that only works for the most recent Emacs. Let me know
>>> when the new release is available :)
>>>
>>>>>> I'd also recommend using more specific custom types for your user
>>>>>> options.  See (elisp) Composite Types.
>>>>>
>>>>> Thanks for the suggestion, I wasn't aware about these composite types!
>>>>
>>>> This is also useful since the new `setopt' macro can use this for
>>>> type-checking!
>>>
>>> That's neat!
>>>
>>> /Niklas
>>>
>>>>>> It also appears you should be able to use defconst and defvar-local in
>>>>>> your private variable section.
>>>>>
>>>>> defvar-local I didn't know about.
>>>>>
>>>>>> Keywords (:foo) do not have to be quoted to prevent evaluation.
>>>>>>
>>>>>> I believe, but I might be mistaken, that it is advised to require rx in
>>>>>> a `eval-when-compile' block.
>>>>>
>>>>> Make sense.
>>>>>
>>>>>> (mapconcat #'identity ...) should do the same as `string-join'
>>>>>
>>>>> Yeah this becomes clearer.
>>>>>
>>>>>> Defining a map like zuul-log-mode-map is usually done using defvar
>>>>>>
>>>>>>     (defvar foo-map
>>>>>>       (let ((map (make-sparse-keymap)))
>>>>>>         (define-key map ...)
>>>>>>         ...
>>>>>>         map))
>>>>>
>>>>> I have taken your suggestions and made them into the following commits:
>>>>> - Add defvar to zuul-log-mode-map
>>>>> - Replace mapconcat with string-join
>>>>> - Require rx at compilation
>>>>> - Use defconst and defvar-local in private vars
>>>>> - Use composite types for defcustom variables
>>>>> https://git.sr.ht/~niklaseklund/zuul.el/log
>>>>>
>>>>> /Niklas
>>>>>
>>>>>>> The package allows users to access build logs from the Zuul,
>>>>>>> https://zuul-ci.org/, CI system. Users uses the completion interface of
>>>>>>> Emacs to select a specific build and a buffer is then opened with the
>>>>>>> build log.
>>>>>>>
>>>>>>> The package utilizes Emacs compilation mode to navigate between errors
>>>>>>> in the logs. It also lets the user configure where projects can be found
>>>>>>> on the local machine so that navigating to the source code of an error
>>>>>>> works, even though the absolute path might not be found on the local
>>>>>>> host.
>>>>>>>
>>>>>>> /Niklas Eklund
>>>>>>>
>>>>>>> From ed4201c73aa66b21b040169009dddb636ab76048 Mon Sep 17 00:00:00 2001
>>>>>>> From: Niklas Eklund <niklas.eklund@posteo.net>
>>>>>>> Date: Mon, 29 Aug 2022 20:26:35 +0200
>>>>>>> Subject: [PATCH] * elpa-packages (zuul): New package
>>>>>>>
>>>>>>> ---
>>>>>>>  elpa-packages | 4 ++++
>>>>>>>  1 file changed, 4 insertions(+)
>>>>>>>
>>>>>>> diff --git a/elpa-packages b/elpa-packages
>>>>>>> index 4ae12a26ca..5ab182f93b 100644
>>>>>>> --- a/elpa-packages
>>>>>>> +++ b/elpa-packages
>>>>>>> @@ -810,4 +810,8 @@
>>>>>>>   ("yasnippet-classic-snippets" :url nil)
>>>>>>>   ("zones"		:url nil)  ;https://www.emacswiki.org/emacs/zones.el
>>>>>>>   ("ztree"		:url "https://github.com/fourier/ztree")
>>>>>>> + ("zuul"		:url "https://git.sr.ht/~niklaseklund/zuul.el"
>>>>>>> +  :news "CHANGELOG.org"
>>>>>>> +  :readme "README.md"
>>>>>>> +  :auto-sync t)
>>>>>>>   )

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

* Re: Add zuul.el package to ELPA
  2022-08-31 11:44             ` Niklas Eklund
@ 2022-08-31 11:57               ` Philip Kaludercic
  2022-08-31 12:08                 ` Philip Kaludercic
  2022-08-31 12:44                 ` Niklas Eklund
  0 siblings, 2 replies; 15+ messages in thread
From: Philip Kaludercic @ 2022-08-31 11:57 UTC (permalink / raw)
  To: Niklas Eklund; +Cc: emacs-devel

Niklas Eklund <niklas.eklund@posteo.net> writes:

> Philip Kaludercic <philipk@posteo.net> writes:
>
>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>
>>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>>
>>>> Philip Kaludercic <philipk@posteo.net> writes:
>>>>
>>>>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>>>>
>>>>>>> I believe if you used compat, you can reduce the minimal version of
>>>>>>> Emacs down to 26.1, and the only hard dependency appears to be
>>>>>>> project.el?
>>>
>>> One other thing I saw that package lint complained about, and that I
>>> couldn't find in the compat package was with-connection-local-variables?
>>>
>>> 486:3: error: You should depend on (emacs "27.1") if you need
>>> `with-connection-local-variables'.
>>>
>>> I see in the manual that it doesn't seem to be supported
>>> https://git.sr.ht/~pkal/compat/tree/master/compat.texi#L1753. So I guess
>>> I can lower it to 27.1 the most, but that would be a good win over 28.1 :)
>>
>> True, that is missing, but reading through the source in files-x.el, it
>> *might* be possible to add that functionality in a backwards
>>  way?  But if not, 27.1 is still a considerable improvement considering
>>  that Debian Stable is currently distributing that version.
>
> Absolutely, a great improvement! :) If that is added in the future that
> would be even better of course, seems like that's the only thing
> blocking the package from supporting 26. 
>
> Once you have released a new version of compat I'll try to depend on
> that. Would this patch be sufficient you think? (given that I update the
> version of compat to the latest)
>
> From a698110e477a1e640b851f912601c67e19bea6b7 Mon Sep 17 00:00:00 2001
> From: Niklas Eklund <niklas.eklund@posteo.net>
> Date: Wed, 31 Aug 2022 13:38:06 +0200
> Subject: [PATCH] Use compat package to support older Emacs version
>
> This patch lowers the required Emacs version from 28.1 to 27.1. This
> is done by using the compat package in combination with an explicit
> dependency to the project package.
> ---
>  zuul.el | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/zuul.el b/zuul.el
> index f2b146c..34d4bf7 100644
> --- a/zuul.el
> +++ b/zuul.el
> @@ -5,7 +5,7 @@
>  ;; Author: Niklas Eklund <niklas.eklund@posteo.net>
>  ;; URL: https://git.sr.ht/~niklaseklund/zuul.el
>  ;; Version: 0.3
> -;; Package-Requires: ((emacs "28.1"))
> +;; Package-Requires: ((emacs "27.1") (compat "2.1.2.2") (project "0.8.1"))
>  ;; Keywords: convenience tools
>  
>  ;; This file is not part of GNU Emacs.
> @@ -41,6 +41,9 @@
>  
>  (require 'ansi-color)
>  (require 'comint)
> +(require 'compat)
> +(require 'compat-27)
> +(require 'compat-28)

These two require statements aren't required, unless you depend on some
function that has been updated between versions (e.g. assoc used to only
take two arguments, and now takes 3, so to avoid overriding the old call
compat provides a prefixed alternative "compat-assoc").

>  (require 'project)
>  (eval-when-compile (require 'rx))
>  (require 'subr-x)
> @@ -770,7 +773,7 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
>    "Parse the output of a json build."
>    (let ((build (zuul--request-json-parser)))
>      (string-join
> -     (flatten-list
> +     (flatten-tree
>        (seq-map #'zuul--build-playbook-output build))
>       "\n")))



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

* Re: Add zuul.el package to ELPA
  2022-08-31 11:57               ` Philip Kaludercic
@ 2022-08-31 12:08                 ` Philip Kaludercic
  2022-08-31 12:47                   ` Niklas Eklund
  2022-08-31 12:44                 ` Niklas Eklund
  1 sibling, 1 reply; 15+ messages in thread
From: Philip Kaludercic @ 2022-08-31 12:08 UTC (permalink / raw)
  To: Niklas Eklund; +Cc: emacs-devel

>> diff --git a/zuul.el b/zuul.el
>> index f2b146c..34d4bf7 100644
>> --- a/zuul.el
>> +++ b/zuul.el
>> @@ -5,7 +5,7 @@
>>  ;; Author: Niklas Eklund <niklas.eklund@posteo.net>
>>  ;; URL: https://git.sr.ht/~niklaseklund/zuul.el
>>  ;; Version: 0.3
>> -;; Package-Requires: ((emacs "28.1"))
>> +;; Package-Requires: ((emacs "27.1") (compat "2.1.2.2") (project "0.8.1"))
>>  ;; Keywords: convenience tools

Another tip I've been giving Sourcehut users is to add the mailing lists
as the package maintainers:

   ;; Maintainer: zuul.el Development <~niklaseklund/zuul.el@lists.sr.ht>



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

* Re: Add zuul.el package to ELPA
  2022-08-31 11:57               ` Philip Kaludercic
  2022-08-31 12:08                 ` Philip Kaludercic
@ 2022-08-31 12:44                 ` Niklas Eklund
  2022-08-31 14:43                   ` Philip Kaludercic
  1 sibling, 1 reply; 15+ messages in thread
From: Niklas Eklund @ 2022-08-31 12:44 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: emacs-devel

Philip Kaludercic <philipk@posteo.net> writes:

> Niklas Eklund <niklas.eklund@posteo.net> writes:
>
>> Philip Kaludercic <philipk@posteo.net> writes:
>>
>>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>>
>>>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>>>
>>>>> Philip Kaludercic <philipk@posteo.net> writes:
>>>>>
>>>>>> Niklas Eklund <niklas.eklund@posteo.net> writes:
>>>>>>
>>>>>>>> I believe if you used compat, you can reduce the minimal version of
>>>>>>>> Emacs down to 26.1, and the only hard dependency appears to be
>>>>>>>> project.el?
>>>>
>>>> One other thing I saw that package lint complained about, and that I
>>>> couldn't find in the compat package was with-connection-local-variables?
>>>>
>>>> 486:3: error: You should depend on (emacs "27.1") if you need
>>>> `with-connection-local-variables'.
>>>>
>>>> I see in the manual that it doesn't seem to be supported
>>>> https://git.sr.ht/~pkal/compat/tree/master/compat.texi#L1753. So I guess
>>>> I can lower it to 27.1 the most, but that would be a good win over 28.1 :)
>>>
>>> True, that is missing, but reading through the source in files-x.el, it
>>> *might* be possible to add that functionality in a backwards
>>>  way?  But if not, 27.1 is still a considerable improvement considering
>>>  that Debian Stable is currently distributing that version.
>>
>> Absolutely, a great improvement! :) If that is added in the future that
>> would be even better of course, seems like that's the only thing
>> blocking the package from supporting 26. 
>>
>> Once you have released a new version of compat I'll try to depend on
>> that. Would this patch be sufficient you think? (given that I update the
>> version of compat to the latest)
>>
>> From a698110e477a1e640b851f912601c67e19bea6b7 Mon Sep 17 00:00:00 2001
>> From: Niklas Eklund <niklas.eklund@posteo.net>
>> Date: Wed, 31 Aug 2022 13:38:06 +0200
>> Subject: [PATCH] Use compat package to support older Emacs version
>>
>> This patch lowers the required Emacs version from 28.1 to 27.1. This
>> is done by using the compat package in combination with an explicit
>> dependency to the project package.
>> ---
>>  zuul.el | 7 +++++--
>>  1 file changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/zuul.el b/zuul.el
>> index f2b146c..34d4bf7 100644
>> --- a/zuul.el
>> +++ b/zuul.el
>> @@ -5,7 +5,7 @@
>>  ;; Author: Niklas Eklund <niklas.eklund@posteo.net>
>>  ;; URL: https://git.sr.ht/~niklaseklund/zuul.el
>>  ;; Version: 0.3
>> -;; Package-Requires: ((emacs "28.1"))
>> +;; Package-Requires: ((emacs "27.1") (compat "2.1.2.2") (project "0.8.1"))
>>  ;; Keywords: convenience tools
>>  
>>  ;; This file is not part of GNU Emacs.
>> @@ -41,6 +41,9 @@
>>  
>>  (require 'ansi-color)
>>  (require 'comint)
>> +(require 'compat)
>> +(require 'compat-27)
>> +(require 'compat-28)
>
> These two require statements aren't required, unless you depend on some
> function that has been updated between versions (e.g. assoc used to only
> take two arguments, and now takes 3, so to avoid overriding the old call
> compat provides a prefixed alternative "compat-assoc").

Alright, so only (require 'compat) then, and it will figure out that it
needs functions from compat-27 or compat-28 internally?

>>  (require 'project)
>>  (eval-when-compile (require 'rx))
>>  (require 'subr-x)
>> @@ -770,7 +773,7 @@ Optionally provide extra parameters PARAMS, PARSER, METHOD, BUFFER or HEADERS."
>>    "Parse the output of a json build."
>>    (let ((build (zuul--request-json-parser)))
>>      (string-join
>> -     (flatten-list
>> +     (flatten-tree
>>        (seq-map #'zuul--build-playbook-output build))
>>       "\n")))



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

* Re: Add zuul.el package to ELPA
  2022-08-31 12:08                 ` Philip Kaludercic
@ 2022-08-31 12:47                   ` Niklas Eklund
  0 siblings, 0 replies; 15+ messages in thread
From: Niklas Eklund @ 2022-08-31 12:47 UTC (permalink / raw)
  To: Philip Kaludercic; +Cc: emacs-devel

Philip Kaludercic <philipk@posteo.net> writes:

>>> diff --git a/zuul.el b/zuul.el
>>> index f2b146c..34d4bf7 100644
>>> --- a/zuul.el
>>> +++ b/zuul.el
>>> @@ -5,7 +5,7 @@
>>>  ;; Author: Niklas Eklund <niklas.eklund@posteo.net>
>>>  ;; URL: https://git.sr.ht/~niklaseklund/zuul.el
>>>  ;; Version: 0.3
>>> -;; Package-Requires: ((emacs "28.1"))
>>> +;; Package-Requires: ((emacs "27.1") (compat "2.1.2.2") (project "0.8.1"))
>>>  ;; Keywords: convenience tools
>
> Another tip I've been giving Sourcehut users is to add the mailing lists
> as the package maintainers:
>
>    ;; Maintainer: zuul.el Development <~niklaseklund/zuul.el@lists.sr.ht>

Good idea, makes sense to highlight :)



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

* Re: Add zuul.el package to ELPA
  2022-08-31 12:44                 ` Niklas Eklund
@ 2022-08-31 14:43                   ` Philip Kaludercic
  0 siblings, 0 replies; 15+ messages in thread
From: Philip Kaludercic @ 2022-08-31 14:43 UTC (permalink / raw)
  To: Niklas Eklund; +Cc: emacs-devel

Niklas Eklund <niklas.eklund@posteo.net> writes:

>>>  (require 'ansi-color)
>>>  (require 'comint)
>>> +(require 'compat)
>>> +(require 'compat-27)
>>> +(require 'compat-28)
>>
>> These two require statements aren't required, unless you depend on some
>> function that has been updated between versions (e.g. assoc used to only
>> take two arguments, and now takes 3, so to avoid overriding the old call
>> compat provides a prefixed alternative "compat-assoc").
>
> Alright, so only (require 'compat) then, and it will figure out that it
> needs functions from compat-27 or compat-28 internally?

No, loading compat will ensure that all missing definitions are loaded,
and compat-NM only loads prefixed definitions.



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

end of thread, other threads:[~2022-08-31 14:43 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-29 18:37 Add zuul.el package to ELPA Niklas Eklund
2022-08-30  9:02 ` Philip Kaludercic
2022-08-30 19:52   ` Niklas Eklund
2022-08-30 22:11     ` Philip Kaludercic
2022-08-31  9:25       ` Niklas Eklund
2022-08-31  9:54         ` Niklas Eklund
2022-08-31 11:09           ` Philip Kaludercic
2022-08-31 11:44             ` Niklas Eklund
2022-08-31 11:57               ` Philip Kaludercic
2022-08-31 12:08                 ` Philip Kaludercic
2022-08-31 12:47                   ` Niklas Eklund
2022-08-31 12:44                 ` Niklas Eklund
2022-08-31 14:43                   ` Philip Kaludercic
2022-08-30 14:22 ` Stefan Monnier
2022-08-30 16:59   ` Niklas Eklund

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