From 339f79269579bb46541070e61933d483c4e279d6 Mon Sep 17 00:00:00 2001 From: dickmao Date: Wed, 30 Oct 2019 22:43:34 -0400 Subject: [PATCH 1/8] scoring and select-newsgroup fighting --- nnhackernews.el | 83 ++++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 32 deletions(-) diff --git a/nnhackernews.el b/nnhackernews.el index d06406a..cb97ad0 100644 --- a/nnhackernews.el +++ b/nnhackernews.el @@ -83,6 +83,14 @@ Do not set this to \"localhost\" as a numeric IP is required for the oauth hands (defvoo nnhackernews-status-string "") +(defvar nnhackernews--mutex-display-article (when (fboundp 'make-mutex) + (make-mutex "nnhackernews--mutex-display-article")) + "Scoring runs via `gnus-after-getting-new-news-hook' cause 'Selecting deleted buffer'.") + +(defvar nnhackernews--mutex-request-group (when (fboundp 'make-mutex) + (make-mutex "nnhackernews--mutex-request-group")) + "Scoring runs via `gnus-after-getting-new-news-hook' cause 'Selecting deleted buffer'.") + (defvar nnhackernews--last-item nil "Keep track of where we are.") (defvar nnhackernews--debug-request-items nil "Keep track of ids to re-request for testing.") @@ -563,6 +571,13 @@ Originally written by Paul Issartel." (error nil)) t)) +(defmacro nnhackernews--with-mutex (mtx &rest body) + "If capable of threading, lock with MTX and execute BODY." + (declare (indent 1)) + (if (fboundp 'with-mutex) + `(with-mutex ,mtx ,@body) + `(progn ,@body))) + (defun nnhackernews--rescore (group &optional force) "Can't figure out GROUP hook that can remove itself (quine conundrum). @@ -587,8 +602,10 @@ FORCE is generally t unless coming from `nnhackernews--score-pending'." (save-window-excursion (let ((gnus-auto-select-subject nil) (gnus-summary-next-group-on-exit nil)) - (gnus-summary-read-group group nil t) - (nnhackernews--summary-exit)))))))) + (nnhackernews--with-mutex nnhackernews--mutex-display-article + (nnhackernews--with-mutex nnhackernews--mutex-request-group + (gnus-summary-read-group group nil t) + (nnhackernews--summary-exit)))))))))) (defalias 'nnhackernews--score-pending (lambda (&rest _args) (nnhackernews--rescore (gnus-group-name-at-point)))) @@ -680,26 +697,27 @@ The two hashtables being reconciled are `nnhackernews-location-hashtb' and ;; nnhackernews-request-group (deffoo nnhackernews-request-group (group &optional server _fast info) (nnhackernews--normalize-server) - (nnhackernews--with-group group - (let* ((info (or info (gnus-get-info gnus-newsgroup-name))) - (headers (nnhackernews-get-headers group)) - (first-header (1+ (or (-find-index #'identity headers) 0))) - (last-header (length headers)) - (num-headers (if (> first-header last-header) 0 - (1+ (- last-header first-header)))) - (status (format "211 %d %d %d %s" - num-headers first-header last-header group))) - (gnus-message 7 "nnhackernews-request-group: %s" status) - (nnheader-insert "%s\n" status) - (when info - (gnus-info-set-marks - info - (append (assq-delete-all 'seen (gnus-info-marks info)) - (list `(seen (1 . ,num-headers)))) - t) - (gnus-info-set-method info (gnus-group-method gnus-newsgroup-name) t) - (gnus-set-info gnus-newsgroup-name info))) - t)) + (nnhackernews--with-mutex nnhackernews--mutex-request-group + (nnhackernews--with-group group + (let* ((info (or info (gnus-get-info gnus-newsgroup-name))) + (headers (nnhackernews-get-headers group)) + (first-header (1+ (or (-find-index #'identity headers) 0))) + (last-header (length headers)) + (num-headers (if (> first-header last-header) 0 + (1+ (- last-header first-header)))) + (status (format "211 %d %d %d %s" + num-headers first-header last-header group))) + (gnus-message 7 "nnhackernews-request-group: %s" status) + (nnheader-insert "%s\n" status) + (when info + (gnus-info-set-marks + info + (append (assq-delete-all 'seen (gnus-info-marks info)) + (list `(seen (1 . ,num-headers)))) + t) + (gnus-info-set-method info (gnus-group-method gnus-newsgroup-name) t) + (gnus-set-info gnus-newsgroup-name info))) + t))) (defsubst nnhackernews--json-read () "Copied from ein:json-read() by tkf." @@ -1355,16 +1373,17 @@ Optionally provide STATIC-MAX-ITEM and STATIC-NEWSTORIES to prevent querying out (defalias 'nnhackernews--display-article (lambda (article &optional all-headers _header) - (condition-case err - (gnus-article-prepare article all-headers) - (error - (if nnhackernews-render-story - (progn - (gnus-message 7 "nnhackernews--display-article: '%s' (falling back...)" - (error-message-string err)) - (nnhackernews--fallback-link) - (gnus-article-prepare article all-headers)) - (error (error-message-string err)))))) + (nnhackernews--with-mutex nnhackernews--mutex-display-article + (condition-case err + (gnus-article-prepare article all-headers) + (error + (if nnhackernews-render-story + (progn + (gnus-message 7 "nnhackernews--display-article: '%s' (falling back...)" + (error-message-string err)) + (nnhackernews--fallback-link) + (gnus-article-prepare article all-headers)) + (error (error-message-string err))))))) "In case of shr failures, dump original link.") (defsubst nnhackernews--dense-time (time) -- 2.34.1 From 6a9b1fd47dad8cc74c03d811bf8961d527d61b53 Mon Sep 17 00:00:00 2001 From: dickmao Date: Thu, 31 Oct 2019 12:14:16 -0400 Subject: [PATCH 2/8] maybe the read-string is happening in the scoring thread --- nnhackernews.el | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/nnhackernews.el b/nnhackernews.el index cb97ad0..6dd7af1 100644 --- a/nnhackernews.el +++ b/nnhackernews.el @@ -87,10 +87,6 @@ Do not set this to \"localhost\" as a numeric IP is required for the oauth hands (make-mutex "nnhackernews--mutex-display-article")) "Scoring runs via `gnus-after-getting-new-news-hook' cause 'Selecting deleted buffer'.") -(defvar nnhackernews--mutex-request-group (when (fboundp 'make-mutex) - (make-mutex "nnhackernews--mutex-request-group")) - "Scoring runs via `gnus-after-getting-new-news-hook' cause 'Selecting deleted buffer'.") - (defvar nnhackernews--last-item nil "Keep track of where we are.") (defvar nnhackernews--debug-request-items nil "Keep track of ids to re-request for testing.") @@ -604,6 +600,7 @@ FORCE is generally t unless coming from `nnhackernews--score-pending'." (gnus-summary-next-group-on-exit nil)) (nnhackernews--with-mutex nnhackernews--mutex-display-article (nnhackernews--with-mutex nnhackernews--mutex-request-group + (let ((gnus-newsgroup-display 0)) (gnus-summary-read-group group nil t) (nnhackernews--summary-exit)))))))))) -- 2.34.1 From adbccd9aa1f099c29a6b43f47c86a53d7e409ce8 Mon Sep 17 00:00:00 2001 From: dickmao Date: Thu, 31 Oct 2019 12:17:23 -0400 Subject: [PATCH 3/8] bad cherry-pick --- nnhackernews.el | 1 - 1 file changed, 1 deletion(-) diff --git a/nnhackernews.el b/nnhackernews.el index 6dd7af1..7bedfbe 100644 --- a/nnhackernews.el +++ b/nnhackernews.el @@ -599,7 +599,6 @@ FORCE is generally t unless coming from `nnhackernews--score-pending'." (let ((gnus-auto-select-subject nil) (gnus-summary-next-group-on-exit nil)) (nnhackernews--with-mutex nnhackernews--mutex-display-article - (nnhackernews--with-mutex nnhackernews--mutex-request-group (let ((gnus-newsgroup-display 0)) (gnus-summary-read-group group nil t) (nnhackernews--summary-exit)))))))))) -- 2.34.1 From ae2be9a06a7915f5167d5331a87a0283a80d84bb Mon Sep 17 00:00:00 2001 From: dickmao Date: Thu, 31 Oct 2019 12:18:13 -0400 Subject: [PATCH 4/8] really bad cherrypick --- nnhackernews.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nnhackernews.el b/nnhackernews.el index 7bedfbe..d3f47dd 100644 --- a/nnhackernews.el +++ b/nnhackernews.el @@ -693,7 +693,6 @@ The two hashtables being reconciled are `nnhackernews-location-hashtb' and ;; nnhackernews-request-group (deffoo nnhackernews-request-group (group &optional server _fast info) (nnhackernews--normalize-server) - (nnhackernews--with-mutex nnhackernews--mutex-request-group (nnhackernews--with-group group (let* ((info (or info (gnus-get-info gnus-newsgroup-name))) (headers (nnhackernews-get-headers group)) @@ -713,7 +712,7 @@ The two hashtables being reconciled are `nnhackernews-location-hashtb' and t) (gnus-info-set-method info (gnus-group-method gnus-newsgroup-name) t) (gnus-set-info gnus-newsgroup-name info))) - t))) + t)) (defsubst nnhackernews--json-read () "Copied from ein:json-read() by tkf." -- 2.34.1 From 2108bf5e7a97b3d867e1de04ef260bda7699f07d Mon Sep 17 00:00:00 2001 From: dickmao Date: Wed, 6 Nov 2019 21:08:35 -0500 Subject: [PATCH 5/8] make test-install --- .travis.yml | 1 + nnhackernews.el | 7 ++++--- tools/package-lint.sh | 18 +++++++++++++++--- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0c3ad63..be092a9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -50,4 +50,5 @@ before_script: - sh tools/install-cask.sh script: + - make test-install - make test || ( ( printf "To diagnose, travis logs -i | dos2unix | sed '/^begin 644/,/^end/!d' | uudecode\n" ) && ( zip -q - tests/log/* 2>/dev/null | uuencode log.zip ) && false) diff --git a/nnhackernews.el b/nnhackernews.el index d3f47dd..8c39c83 100644 --- a/nnhackernews.el +++ b/nnhackernews.el @@ -599,9 +599,10 @@ FORCE is generally t unless coming from `nnhackernews--score-pending'." (let ((gnus-auto-select-subject nil) (gnus-summary-next-group-on-exit nil)) (nnhackernews--with-mutex nnhackernews--mutex-display-article - (let ((gnus-newsgroup-display 0)) - (gnus-summary-read-group group nil t) - (nnhackernews--summary-exit)))))))))) + (cl-letf (((symbol-function 'read-string) + (lambda (&rest _args) 0))) + (gnus-summary-read-group group nil t)) + (nnhackernews--summary-exit))))))))) (defalias 'nnhackernews--score-pending (lambda (&rest _args) (nnhackernews--rescore (gnus-group-name-at-point)))) diff --git a/tools/package-lint.sh b/tools/package-lint.sh index c8f2af1..29c1c5b 100644 --- a/tools/package-lint.sh +++ b/tools/package-lint.sh @@ -8,9 +8,11 @@ EMACS="${EMACS:=emacs}" INIT_PACKAGE_EL="(progn (require 'package) - (push '(\"melpa\" . \"http://melpa.org/packages/\") package-archives) (package-initialize) - (package-refresh-contents))" + (push (quote (\"melpa\" . \"http://melpa.org/packages/\")) package-archives) + (package-refresh-contents) + (unless (package-installed-p (quote package-lint)) + (package-install (quote package-lint))))" # rm -rf "$HOME"/.emacs.d/elpa/package-lint-* @@ -19,7 +21,6 @@ INIT_PACKAGE_EL="(progn ( cd /tmp ; curl -OskL https://raw.githubusercontent.com/dickmao/package-lint/datetime/package-lint.el ) "$EMACS" -Q -batch \ --eval "$INIT_PACKAGE_EL" \ - --eval "(package-install (quote package-lint))" \ --eval "(let ((dir (file-name-directory (locate-library \"package-lint\")))) \ (ignore-errors (delete-file (expand-file-name \"package-lint.elc\" dir))) \ (copy-file (expand-file-name \"package-lint.el\" \ @@ -43,5 +44,16 @@ BASENAME=$(basename "$1") "$EMACS" -Q -batch \ --eval "$INIT_PACKAGE_EL" \ -l package-lint.el \ + --eval "(defconst package-lint--sane-prefixes \ + (rx \ + string-start \ + (or \ + \"org-dblock-write:\" \ + \"string-trim-left\" \ + \"org-babel-execute:\" \ + \"org-babel-prep-session:\" \ + \"org-babel-variable-assignments:\" \ + \"org-babel-default-header-args:\" \ + \"pcomplete/\")))" \ -f package-lint-batch-and-exit \ "$1" || [ -n "${EMACS_LINT_IGNORE+x}" ] -- 2.34.1 From 4042ff3df10f3144c3518f760d585f43a6133094 Mon Sep 17 00:00:00 2001 From: dickmao Date: Mon, 11 Nov 2019 08:12:31 -0500 Subject: [PATCH 6/8] nnhackernews--request-max-item goes back in time sometimes --- nnhackernews.el | 89 ++++++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/nnhackernews.el b/nnhackernews.el index 8c39c83..e787721 100644 --- a/nnhackernews.el +++ b/nnhackernews.el @@ -597,12 +597,14 @@ FORCE is generally t unless coming from `nnhackernews--score-pending'." (when (or force (> num-headers seen)) (save-window-excursion (let ((gnus-auto-select-subject nil) - (gnus-summary-next-group-on-exit nil)) - (nnhackernews--with-mutex nnhackernews--mutex-display-article - (cl-letf (((symbol-function 'read-string) - (lambda (&rest _args) 0))) - (gnus-summary-read-group group nil t)) - (nnhackernews--summary-exit))))))))) + (gnus-summary-next-group-on-exit nil) + (unread (length (gnus-list-of-unread-articles group)))) + (if (zerop unread) + (gnus-message 7 "nnhackernews--rescore: skipping %s no unread" + group) + (nnhackernews--with-mutex nnhackernews--mutex-display-article + (gnus-summary-read-group group nil t) + (nnhackernews--summary-exit)))))))))) (defalias 'nnhackernews--score-pending (lambda (&rest _args) (nnhackernews--rescore (gnus-group-name-at-point)))) @@ -1023,42 +1025,45 @@ Optionally provide STATIC-MAX-ITEM and STATIC-NEWSTORIES to prevent querying out ,nnhackernews--group-show ,nnhackernews--group-job ,nnhackernews--group-stories))) - (when-let ((max-item (or static-max-item (nnhackernews--request-max-item)))) - (let* ((stories (or static-newstories (nnhackernews--request-newstories))) - (earliest-story (nth (1- (min nnhackernews-max-items-per-scan - (length stories))) - stories)) - (start-item (if nnhackernews--last-item - (1+ nnhackernews--last-item) - (min earliest-story - (- max-item nnhackernews-max-items-per-scan)))) - (counts (gnus-make-hashtable)) - (items (nnhackernews--select-items start-item max-item stories))) - (dolist (item items) - (-when-let* ((plst (nnhackernews--request-item item)) - (not-deleted (not (plist-get plst :deleted))) - (type (plist-get plst :type))) - (nnhackernews-add-entry nnhackernews-refs-hashtb plst :parent) - (nnhackernews-add-entry nnhackernews-authors-hashtb plst :by) - (nnhackernews--replace-hash type (lambda (x) (1+ (or x 0))) counts) - (setq plst (plist-put plst :link_title - (or (plist-get - (nnhackernews--retrieve-root plst) - :title) ""))) - (cl-case (intern type) - (job (nnhackernews--append-header plst nnhackernews--group-job)) - ((story comment) (nnhackernews--append-header plst)) - (otherwise (gnus-message 5 "nnhackernews-incoming: ignoring type %s" type))))) - (setq nnhackernews--last-item max-item) - (gnus-message - 5 (concat "nnhackernews--incoming: " - (format "%d requests, " (length nnhackernews--debug-request-items)) - (let ((result "")) - (nnhackernews--maphash - (lambda (key value) - (setq result (concat result (format "%s +%s " key value)))) - counts) - result)))))) + (let ((max-item (or static-max-item (nnhackernews--request-max-item)))) + (if (and nnhackernews--last-item (<= max-item nnhackernews--last-item)) + (gnus-message 7 "nnhackernews--incoming: max %s <= last %s" + max-item nnhackernews--last-item) + (let* ((stories (or static-newstories (nnhackernews--request-newstories))) + (earliest-story (nth (1- (min nnhackernews-max-items-per-scan + (length stories))) + stories)) + (start-item (if nnhackernews--last-item + (1+ nnhackernews--last-item) + (min earliest-story + (- max-item nnhackernews-max-items-per-scan)))) + (counts (gnus-make-hashtable)) + (items (nnhackernews--select-items start-item max-item stories))) + (dolist (item items) + (-when-let* ((plst (nnhackernews--request-item item)) + (not-deleted (not (plist-get plst :deleted))) + (type (plist-get plst :type))) + (nnhackernews-add-entry nnhackernews-refs-hashtb plst :parent) + (nnhackernews-add-entry nnhackernews-authors-hashtb plst :by) + (nnhackernews--replace-hash type (lambda (x) (1+ (or x 0))) counts) + (setq plst (plist-put plst :link_title + (or (plist-get + (nnhackernews--retrieve-root plst) + :title) ""))) + (cl-case (intern type) + (job (nnhackernews--append-header plst nnhackernews--group-job)) + ((story comment) (nnhackernews--append-header plst)) + (otherwise (gnus-message 5 "nnhackernews-incoming: ignoring type %s" type))))) + (setq nnhackernews--last-item max-item) + (gnus-message + 5 (concat "nnhackernews--incoming: " + (format "%d requests, " (length nnhackernews--debug-request-items)) + (let ((result "")) + (nnhackernews--maphash + (lambda (key value) + (setq result (concat result (format "%s +%s " key value)))) + counts) + result))))))) (deffoo nnhackernews-request-scan (&optional group server) (nnhackernews--normalize-server) -- 2.34.1 From b7495c07a9a3d23c2b7754d75a56978c5124fe70 Mon Sep 17 00:00:00 2001 From: dickmao Date: Mon, 11 Nov 2019 08:30:25 -0500 Subject: [PATCH 7/8] cask-ify package-lint.sh --- Cask | 2 ++ tools/package-lint.sh | 78 ++++++++++++++----------------------------- 2 files changed, 27 insertions(+), 53 deletions(-) diff --git a/Cask b/Cask index db399b2..b077980 100644 --- a/Cask +++ b/Cask @@ -1,3 +1,4 @@ +(source gnu) (source melpa) (package-file "nnhackernews.el") @@ -5,4 +6,5 @@ (development (depends-on "ert-runner") + (depends-on "package-lint") (depends-on "ecukes")) diff --git a/tools/package-lint.sh b/tools/package-lint.sh index 29c1c5b..33a14df 100644 --- a/tools/package-lint.sh +++ b/tools/package-lint.sh @@ -1,59 +1,31 @@ -#!/bin/sh -ex - -# The following is a derivative work of -# https://github.com/purcell/package-lint -# licensed under GNU General Public License v3.0. +#!/bin/sh -e EMACS="${EMACS:=emacs}" - -INIT_PACKAGE_EL="(progn - (require 'package) - (package-initialize) - (push (quote (\"melpa\" . \"http://melpa.org/packages/\")) package-archives) - (package-refresh-contents) - (unless (package-installed-p (quote package-lint)) - (package-install (quote package-lint))))" - -# rm -rf "$HOME"/.emacs.d/elpa/package-lint-* - -# Get mainline package-lint, then replace package-lint.el with dickmao's. -# quelpa doesn't get data/stdlib-changes.gz for whatever reason. -( cd /tmp ; curl -OskL https://raw.githubusercontent.com/dickmao/package-lint/datetime/package-lint.el ) -"$EMACS" -Q -batch \ - --eval "$INIT_PACKAGE_EL" \ - --eval "(let ((dir (file-name-directory (locate-library \"package-lint\")))) \ - (ignore-errors (delete-file (expand-file-name \"package-lint.elc\" dir))) \ - (copy-file (expand-file-name \"package-lint.el\" \ - \"/tmp\") (expand-file-name \"package-lint.el\" dir) t))" - BASENAME=$(basename "$1") -"$EMACS" -Q -batch \ - --eval "$INIT_PACKAGE_EL" \ - -l package-lint.el \ - --visit "$1" \ - --eval "(checkdoc-eval-current-buffer)" \ - --eval "(princ (with-current-buffer checkdoc-diagnostic-buffer (buffer-string)))" \ - 2>&1 | egrep -a "^$BASENAME:" | egrep -v "Messages should start" && [ -n "${EMACS_LINT_IGNORE+x}" ] -# Lint ourselves -# Lint failures are ignored if EMACS_LINT_IGNORE is defined, so that lint -# failures on Emacs 24.2 and below don't cause the tests to fail, as these -# versions have buggy imenu that reports (defvar foo) as a definition of foo. +!( cask emacs -Q --batch \ + --visit "$1" \ + --eval "(checkdoc-eval-current-buffer)" \ + --eval "(princ (with-current-buffer checkdoc-diagnostic-buffer \ + (buffer-string)))" \ + 2>&1 | egrep -a "^$BASENAME:" | egrep -v "Messages should start" | grep "." ) + +# this repo uses datetime versions +( cd /tmp ; curl -OskL https://raw.githubusercontent.com/dickmao/package-lint/datetime/package-lint.el ) + +cask emacs -Q --batch \ + --eval "(let ((dir (file-name-directory (locate-library \"package-lint\")))) \ + (ignore-errors (delete-file (expand-file-name \ + \"package-lint.elc\" dir))) \ + (copy-file (expand-file-name \"package-lint.el\" \"/tmp\") \ + (expand-file-name \"package-lint.el\" dir) t))" + # Reduce purity via: # --eval "(fset 'package-lint--check-defs-prefix (symbol-function 'ignore))" \ -"$EMACS" -Q -batch \ - --eval "$INIT_PACKAGE_EL" \ - -l package-lint.el \ - --eval "(defconst package-lint--sane-prefixes \ - (rx \ - string-start \ - (or \ - \"org-dblock-write:\" \ - \"string-trim-left\" \ - \"org-babel-execute:\" \ - \"org-babel-prep-session:\" \ - \"org-babel-variable-assignments:\" \ - \"org-babel-default-header-args:\" \ - \"pcomplete/\")))" \ - -f package-lint-batch-and-exit \ - "$1" || [ -n "${EMACS_LINT_IGNORE+x}" ] +cask emacs -Q --batch \ + -l package-lint \ + --eval "(package-initialize)" \ + --eval "(push (quote (\"melpa\" . \"http://melpa.org/packages/\")) \ + package-archives)" \ + --eval "(package-refresh-contents)" \ + -f package-lint-batch-and-exit "$1" -- 2.34.1 From 3320dd3deed78ac2e095a8b7be6f0dfac6989fcf Mon Sep 17 00:00:00 2001 From: dickmao Date: Mon, 11 Nov 2019 09:05:31 -0500 Subject: [PATCH 8/8] must install package-lint before calling it --- .travis.yml | 2 +- Makefile | 2 +- nnhackernews.el | 5 +++-- tools/package-lint.sh | 6 ++++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index be092a9..7bd98c0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,7 +38,7 @@ matrix: - env: EMACS_CI=emacs-snapshot include: - os: linux - env: EMACS_CI=emacs-25-1 PY=python PIP="${PY} -m pip install --user" + env: EMACS_CI=emacs-25-2 PY=python PIP="${PY} -m pip install --user" - os: linux env: EMACS_CI=emacs-26-2 PY=python3 PIP="${PY} -m pip install --user" - os: osx diff --git a/Makefile b/Makefile index 9125cb8..9fd7d77 100644 --- a/Makefile +++ b/Makefile @@ -39,8 +39,8 @@ clean: test-clean .PHONY: test-compile test-compile: - sh -e tools/package-lint.sh nnhackernews.el cask install + sh -ex tools/package-lint.sh nnhackernews.el ! (cask eval "(let ((byte-compile-error-on-warn t)) (cask-cli/build))" 2>&1 | egrep -a "(Warning|Error):") cask clean-elc diff --git a/nnhackernews.el b/nnhackernews.el index e787721..5253170 100644 --- a/nnhackernews.el +++ b/nnhackernews.el @@ -6,7 +6,7 @@ ;; Version: 0.1.0 ;; Keywords: news ;; URL: https://github.com/dickmao/nnhackernews -;; Package-Requires: ((emacs "25.1") (request "20190819") (dash "20190401") (dash-functional "20180107") (anaphora "20180618")) +;; Package-Requires: ((emacs "25.2") (request "20190819") (dash "20190401") (dash-functional "20180107") (anaphora "20180618")) ;; This file is NOT part of GNU Emacs. @@ -1317,7 +1317,8 @@ Optionally provide STATIC-MAX-ITEM and STATIC-NEWSTORIES to prevent querying out (let* ((path (car (url-path-and-query (url-generic-parse-url url)))) (url (replace-regexp-in-string path "/comment" url)) (result (nnhackernews--request-reply url body hidden)) - (dom (nnhackernews--domify result))) + dom) + (setq dom (nnhackernews--domify result)) (cl-destructuring-bind (tag params &rest args) dom (setq ret (and (eq tag 'html) (string= (alist-get 'op params) "item"))) diff --git a/tools/package-lint.sh b/tools/package-lint.sh index 33a14df..9b05007 100644 --- a/tools/package-lint.sh +++ b/tools/package-lint.sh @@ -1,5 +1,7 @@ #!/bin/sh -e +. tools/retry.sh + EMACS="${EMACS:=emacs}" BASENAME=$(basename "$1") @@ -11,7 +13,7 @@ BASENAME=$(basename "$1") 2>&1 | egrep -a "^$BASENAME:" | egrep -v "Messages should start" | grep "." ) # this repo uses datetime versions -( cd /tmp ; curl -OskL https://raw.githubusercontent.com/dickmao/package-lint/datetime/package-lint.el ) +( cd /tmp ; travis_retry curl -OskL https://raw.githubusercontent.com/dickmao/package-lint/datetime/package-lint.el ) cask emacs -Q --batch \ --eval "(let ((dir (file-name-directory (locate-library \"package-lint\")))) \ @@ -22,7 +24,7 @@ cask emacs -Q --batch \ # Reduce purity via: # --eval "(fset 'package-lint--check-defs-prefix (symbol-function 'ignore))" \ -cask emacs -Q --batch \ +travis_retry cask emacs -Q --batch \ -l package-lint \ --eval "(package-initialize)" \ --eval "(push (quote (\"melpa\" . \"http://melpa.org/packages/\")) \ -- 2.34.1