Function: eca-process--fetch-releases

eca-process--fetch-releases is a natively compiled function defined in eca-process.el.

Signature

(eca-process--fetch-releases)

Documentation

Return cached releases list, fetching from GitHub if needed.

Refetches when the cache is empty or has expired per eca-server-releases-cache-ttl. On fetch failure, any previously cached value is preserved and returned, and further fetch attempts are skipped for eca-process--releases-failure-cooldown seconds.

Source Code

;; Defined in /nix/store/jklqzw6pzz6j4jrbv8wy0iwgi7jlrbld-emacs-packages-deps/share/emacs/site-lisp/elpa/eca-20260928.1827/eca-process.el
(defun eca-process--fetch-releases ()
  "Return cached releases list, fetching from GitHub if needed.
Refetches when the cache is empty or has expired per
`eca-server-releases-cache-ttl'.  On fetch failure, any previously
cached value is preserved and returned, and further fetch attempts
are skipped for `eca-process--releases-failure-cooldown' seconds."
  (cond
   ((eca-process--releases-cache-valid-p)
    (cdr eca-process--releases-cache))
   ((and eca-process--releases-fetch-failed-at
         (< (- (float-time) eca-process--releases-fetch-failed-at)
            eca-process--releases-failure-cooldown))
    (cdr-safe eca-process--releases-cache))
   (t
    (condition-case err
        (let* ((coding-system-for-read 'utf-8)
               (json-string
                (eca--curl-download-string
                 eca-process--releases-url))
               (releases (with-temp-buffer
                           (insert json-string)
                           (goto-char (point-min))
                           (eca-api--json-read-buffer))))
          ;; Guard against non-release payloads (e.g. a rate-limit
          ;; JSON object) poisoning the cache.
          (unless (and (or (vectorp releases) (proper-list-p releases))
                       (> (length releases) 0)
                       (plist-get (elt releases 0) :tag_name))
            (error "Unexpected releases payload"))
          (setq eca-process--releases-fetch-failed-at nil)
          (setq eca-process--releases-cache
                (cons (float-time) releases))
          releases)
      (error
       (setq eca-process--releases-fetch-failed-at (float-time))
       (eca-warn "Failed to fetch releases: %s" err)
       (cdr-safe eca-process--releases-cache))))))