branch: externals/hyperbole
commit 3940e00d12da2e0a16db4ae781b84004b1f5abc4
Author: Bob Weiner <[email protected]>
Commit: Bob Weiner <[email protected]>
Fix mult-version/mixed Org installations and hyrolo improvements
---
ChangeLog | 25 +++++++++++-
Makefile | 22 +++++-----
hsys-org.el | 96 ++++++++++++++++++++++++++------------------
hui.el | 12 +++---
hyrolo.el | 69 +++++++++++++++----------------
test/hy-test-dependencies.el | 23 ++++++++---
test/hyrolo-tests.el | 5 ++-
7 files changed, 157 insertions(+), 95 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 2bc78a0195..dd7c7c39cc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,30 @@
2024-01-13 Bob Weiner <[email protected]>
+* test/hy-test-dependencies.el: Print status of resolving any
+ multi-version/mixed Org installations.
+
+* hyrolo.el (hyrolo-any-file-type-problem-p): Disable printing
+ output if 'hyrolo-boolean-only-flag' is non-nil, used in
+ testing.
+ test/hyrolo-tests.el (hyrolo-tests--get-file-list-wrong-suffix):
+ Use above flag.
+
+* Makefile (test-ert): Do not ellide any stack traces, i.e. set
+ 'ert-batch-print-length' to nil.
+ Change test SELECTOR= to test= and document how to run.
+
+* hyrolo.el (hyrolo-any-file-type-problem-p): Disable printing of
+ any output when 'hyrolo-boolean-only-flag' is non-nil, typically
+ used for testing purposes.
+
+* hui.el (hui:ebut-unmark): Fix to handle a non-file-based buffer as
+ 'key-src'.
+
* hsys-org.el (hsys-org-fix-version): Add. Add .org suffix to
- 'auto-mode-alist' as it may be removed in this function.
+ 'auto-mode-alist' as it may be removed in this function. Return
+ t when Org is reloaded, nil if not. Require Org libraries even
+ when no reload is done. Handle when 'org-version' differs from
+ version number in 'org-dir'.
hyperbole.el (hyperb:init): Add call to 'hsys-org-fix-version' when
detect a mixed version installation of Org, typically part of
built-in Org loaded before loading a newer packaged version.
diff --git a/Makefile b/Makefile
index e58eae5ad5..5fc7426c91 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
# Author: Bob Weiner
#
# Orig-Date: 15-Jun-94 at 03:42:38
-# Last-Mod: 7-Jan-24 at 14:27:34 by Bob Weiner
+# Last-Mod: 13-Jan-24 at 19:12:58 by Bob Weiner
#
# Copyright (C) 1994-2023 Free Software Foundation, Inc.
# See the file HY-COPY for license information.
@@ -70,8 +70,9 @@
# * Developer targets
#
# To run unit tests:
-# make test - run not interactive tests in batch
mode
-# make test-all - run all tests starting an Emacs in
windowed mode
+# make test - run non-interactive tests in
batch mode
+# make test-all - run all tests starting an
interactive Emacs
+# make test test=<test-name> - run a single test or tests
matching the name
#
# Verify hyperbole installation using different sources:
# make install-<source>
@@ -459,7 +460,7 @@ packageclean:
cd $(pkg_hyperbole)/man/im && $(RM) -r .DS_Store core .place* ._* .*~
*~ \
*.ps *\# *- *.orig *.rej .nfs* CVS .cvsignore; fi
-# Ert test
+# ERT test
.PHONY: tests test test-ert all-tests test-all
tests: test
test: test-ert
@@ -469,10 +470,10 @@ test: test-ert
LET_VARIABLES = (auto-save-default) (enable-local-variables :all)
LOAD_TEST_ERT_FILES=$(patsubst %,(load-file \"%\"),${TEST_ERT_FILES})
-# Run make test SELECTOR=<ert-test-selector> to limit batch test to
+# Run make test test=<ert-test-selector> to limit batch test to
# tests specified by the selector. See "(ert)test selectors"
-ifeq ($(origin SELECTOR), command line)
-HYPB_ERT_BATCH = (ert-run-tests-batch-and-exit \"${SELECTOR}\")
+ifeq ($(origin test), command line)
+HYPB_ERT_BATCH = (ert-run-tests-batch-and-exit \"${test}\")
else
HYPB_ERT_BATCH = (ert-run-tests-batch-and-exit)
endif
@@ -487,9 +488,10 @@ endif
test-ert:
@echo "# Tests: $(TEST_ERT_FILES)"
$(EMACS_BATCH) --eval "(load-file \"test/hy-test-dependencies.el\")" \
- --eval "(let ((auto-save-default) (ert-batch-print-level 10)
(ert-batch-print-length 20) \
- $(HYPB_ERT_BATCH_BT) (ert-batch-backtrace-right-margin 2048)) \
- $(LOAD_TEST_ERT_FILES) $(HYPB_ERT_BATCH))"
+ --eval "(let ((auto-save-default) (ert-batch-print-level 10) \
+ (ert-batch-print-length nil) (backtrace-line-length 5000)
\
+ $(HYPB_ERT_BATCH_BT) (ert-batch-backtrace-right-margin
2048)) \
+ $(LOAD_TEST_ERT_FILES) $(HYPB_ERT_BATCH))"
all-tests: test-all
test-all:
diff --git a/hsys-org.el b/hsys-org.el
index d4bf3bf9ee..910b0682d9 100644
--- a/hsys-org.el
+++ b/hsys-org.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 2-Jul-16 at 14:54:14
-;; Last-Mod: 13-Jan-24 at 16:28:29 by Bob Weiner
+;; Last-Mod: 13-Jan-24 at 19:50:40 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -154,45 +154,65 @@ an error."
;;;###autoload
(defun hsys-org-fix-version ()
- "If multiple Org versions are loaded, use the one first on `load-path'."
+ "If multiple Org versions are loaded, use the one first on `load-path'.
+Always ensure Org libraries have been required.
+Return t if Org is reloaded, else nil."
+ ;; Not all versions of org include this variable, so set it
+ (setq org--inhibit-version-check nil
+ org-list-allow-alphabetical nil)
(let ((org-dir (ignore-errors (org-find-library-dir "org")))
(org-install-dir
- (ignore-errors (org-find-library-dir "org-loaddefs"))))
- (unless (and org-dir org-install-dir (string-equal org-dir
org-install-dir))
- ;; Ensure using any local available packaged version of Org mode
- ;; rather than built-in which may have been activated before
- ;; load-path was set correctly. Avoids mixed version load of Org.
- (mapc (lambda (lib-sym) (when (featurep lib-sym) (unload-feature lib-sym
t)))
- '(org org-version org-keys org-compat ol org-table org-macs org-id
org-element org-list
- org-element org-src org-fold))
- (package-initialize)
- (let ((pkg-desc (car (cdr (assq 'org package-archive-contents)))))
- (package-activate pkg-desc t))
- ;; Not all versions of org include this variable, so set it
- (setq org--inhibit-version-check nil
- org-list-allow-alphabetical nil)
- ;; Otherwise, `font-lock-ensure' make invoke an undefined matcher
- ;; function, `org-fontify-inline-src-blocks'.
- (load "org-src")
- ;; Otherwise, `org-id-get-create' may call undefined
- ;; `org-element-cache-active-p'
- (load "org-element")
- ;; Otherwise, {M-RET} may not be bound to a key
- (load "org-keys")
- ;; Otherwise, `org-file-name-concat' may be undefined
- (load "org-compat")
- ;; Otherwise, `org--inhibit-version-check' may be undefined
- (load "org-macs")
- ;; Otherwise, `org-list-allow-alphabetical' may be undefined
- (load "org-list")
- ;; Otherwise, `org-fold--advice-edit-commands' may be undefined
- (load "org-fold")
- ;; Otherwise, `org-link--description-folding-spec' may be undefined
- (load "ol")
- (cl-flet ((require (lambda (lib-sym &optional _filename _noerror)
- (load (symbol-name lib-sym)))))
- (require 'org))
- (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode)))))
+ (ignore-errors (org-find-library-dir "org-loaddefs")))
+ org-dir-version)
+ (cond ((and org-dir org-install-dir (string-equal org-dir org-install-dir)
+ ;; Still may have a situation where the Org version matches the
+ ;; builtin Org but the directories are for a newer Org
+ ;; package version.
+ (if (string-match "[\\/]org-\\([0-9.]+-?[a-z]*\\)" org-dir)
+ (string-equal (setq org-dir-version (match-string 1
org-dir))
+ (remove ?- (org-release)))
+ t))
+ ;; Just require these libraries used for testing to ensure
+ ;; they are loaded from the single Org version used.
+ (mapc (lambda (lib-sym) (require lib-sym nil t))
+ '(org-version org-keys org-compat ol org-table org-macs org-id
+ org-element org-list org-element org-src
org-fold org))
+ nil)
+ (t
+ ;; Ensure using any local available packaged version of Org mode
+ ;; rather than built-in which may have been activated before
+ ;; load-path was set correctly. Avoids mixed version load of Org.
+ (mapc (lambda (lib-sym) (when (featurep lib-sym) (unload-feature
lib-sym t)))
+ '(org org-version org-keys org-compat ol org-table org-macs
org-id
+ org-element org-list org-element org-src org-fold))
+ (package-initialize)
+ (let ((pkg-desc (car (cdr (assq 'org package-archive-contents)))))
+ (package-activate pkg-desc t))
+ ;; Otherwise, `font-lock-ensure' make invoke an undefined matcher
+ ;; function, `org-fontify-inline-src-blocks'.
+ (load "org-src")
+ ;; Otherwise, `org-id-get-create' may call undefined
+ ;; `org-element-cache-active-p'
+ (load "org-element")
+ ;; Otherwise, {M-RET} may not be bound to a key
+ (load "org-keys")
+ ;; Otherwise, `org-file-name-concat' may be undefined
+ (load "org-compat")
+ ;; Otherwise, `org--inhibit-version-check' may be undefined
+ (load "org-macs")
+ ;; Otherwise, `org-list-allow-alphabetical' may be undefined
+ (load "org-list")
+ ;; Otherwise, `org-fold--advice-edit-commands' may be undefined
+ (load "org-fold")
+ ;; Otherwise, `org-link--description-folding-spec' may be undefined
+ (load "ol")
+ (cl-flet ((require (lambda (lib-sym &optional _filename _noerror)
+ (load (symbol-name lib-sym)))))
+ (require 'org))
+ ;; Next setting may have been deleted with the library
+ ;; unloading, so restore it.
+ (add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
+ t))))
;;;###autoload
(defun hsys-org-meta-return-shared-p ()
diff --git a/hui.el b/hui.el
index a2d7db4bd5..3d64713b7a 100644
--- a/hui.el
+++ b/hui.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 19-Sep-91 at 21:42:03
-;; Last-Mod: 3-Jan-24 at 23:42:18 by Mats Lidell
+;; Last-Mod: 13-Jan-24 at 18:55:34 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -1522,10 +1522,12 @@ With a prefix argument, also delete the button text
between the delimiters."
(when (search-forward ebut:label-end nil t) (funcall form)))
;; Non-interactive invocation.
(let (cur-flag)
- (if (and (or (null key-src) (eq key-src buffer-file-name))
- (or (null directory) (eq directory default-directory)))
- (setq cur-flag t)
- (set-buffer (find-file-noselect (expand-file-name key-src
directory))))
+ (cond ((and (or (null key-src) (eq key-src buffer-file-name))
+ (or (null directory) (eq directory default-directory)))
+ (setq cur-flag t))
+ ((bufferp key-src)
+ (set-buffer key-src))
+ (t (set-buffer (find-file-noselect (expand-file-name key-src
directory)))))
(unless (stringp but-key)
(setq but-key (hbut:label-p))
(unless (stringp but-key)
diff --git a/hyrolo.el b/hyrolo.el
index 8740c4d6f3..a199de2a88 100644
--- a/hyrolo.el
+++ b/hyrolo.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 7-Jun-89 at 22:08:29
-;; Last-Mod: 13-Jan-24 at 02:25:54 by Bob Weiner
+;; Last-Mod: 13-Jan-24 at 20:04:26 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -2420,40 +2420,41 @@ package is not installed."
;; 6. if not, display a buffer with the invalid file types and return t
(when (or files-invalid-suffix-list files-no-mode-list)
- (with-help-window "*HyRolo Errors*"
- (princ "`hyrolo-file-list' gets its files from these patterns:\n")
- (mapc (lambda (spec) (princ (format "\t%S\n" spec)))
- hyrolo-file-list)
- (terpri)
- (princ "When expanded, it includes the following files that HyRolo
cannot process:\n\n")
-
- (when files-invalid-suffix-list
- (princ (format "Files with invalid or no suffixes:\n (valid
suffixes: %S)\n"
- hyrolo-file-suffix-regexp))
- (mapc (lambda (file) (princ (format "\t%S\n" file)))
- files-invalid-suffix-list)
+ (unless (and (boundp 'hyrolo-boolean-only-flag) hyrolo-boolean-only-flag)
+ (with-help-window "*HyRolo Errors*"
+ (princ "`hyrolo-file-list' gets its files from these patterns:\n")
+ (mapc (lambda (spec) (princ (format "\t%S\n" spec)))
+ hyrolo-file-list)
(terpri)
- (princ "Please remove the above files from `hyrolo-file-list'.\n")
- (terpri))
-
- (when files-no-mode-list
- (princ "Files with invalid modes (file suffixes not in
`auto-mode-alist'):\n")
- (mapc (lambda (file) (princ (format "\t%S\n" file)))
- files-no-mode-list)
- (terpri)
- (princ "Please add appropriate entries for the above files to
`auto-mode-alist'.\n")
- (terpri))
-
- (when (hyperb:stack-frame '(hyrolo-file-list-changed))
- ;; Errors occurred with a let of `hyrolo-file-list' so
- ;; include backtrace of where this occurred.
- (princ "Stack trace of where invalid files were referenced:\n")
- (terpri)
- ;; (setq backtrace-view (plist-put backtrace-view :show-locals t))
- (backtrace)))
- (when noninteractive
- (princ (with-current-buffer (get-buffer "*HyRolo Errors*")
- (buffer-string))))
+ (princ "When expanded, it includes the following files that HyRolo
cannot process:\n\n")
+
+ (when files-invalid-suffix-list
+ (princ (format "Files with invalid or no suffixes:\n (valid
suffixes: %S)\n"
+ hyrolo-file-suffix-regexp))
+ (mapc (lambda (file) (princ (format "\t%S\n" file)))
+ files-invalid-suffix-list)
+ (terpri)
+ (princ "Please remove the above files from `hyrolo-file-list'.\n")
+ (terpri))
+
+ (when files-no-mode-list
+ (princ "Files with invalid modes (file suffixes not in
`auto-mode-alist'):\n")
+ (mapc (lambda (file) (princ (format "\t%S\n" file)))
+ files-no-mode-list)
+ (terpri)
+ (princ "Please add appropriate entries for the above files to
`auto-mode-alist'.\n")
+ (terpri))
+
+ (when (hyperb:stack-frame '(hyrolo-file-list-changed))
+ ;; Errors occurred with a let of `hyrolo-file-list' so
+ ;; include backtrace of where this occurred.
+ (princ "Stack trace of where invalid files were referenced:\n")
+ (terpri)
+ ;; (setq backtrace-view (plist-put backtrace-view :show-locals t))
+ (backtrace))
+
+ (when noninteractive
+ (princ (buffer-string)))))
t)))
(defun hyrolo-buffer-exists-p (hyrolo-buf)
diff --git a/test/hy-test-dependencies.el b/test/hy-test-dependencies.el
index ecf59675c7..7fc56087c5 100644
--- a/test/hy-test-dependencies.el
+++ b/test/hy-test-dependencies.el
@@ -3,11 +3,11 @@
;; Author: Mats Lidell <[email protected]>
;;
;; Orig-Date: 20-Feb-21 at 23:16:00
-;; Last-Mod: 2-Oct-23 at 04:48:58 by Bob Weiner
+;; Last-Mod: 13-Jan-24 at 20:08:39 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
-;; Copyright (C) 2021 Free Software Foundation, Inc.
+;; Copyright (C) 2021-2024 Free Software Foundation, Inc.
;; See the "HY-COPY" file for license information.
;;
;; This file is part of GNU Hyperbole.
@@ -18,12 +18,13 @@
;;; Code:
+(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
+(package-initialize)
+
(require 'hload-path)
+(require 'hyperbole)
(add-to-list 'load-path (expand-file-name "test" hyperb:dir))
-(package-initialize)
-(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
-
(defun hy-test-ensure-package-installed (pkg-symbol)
(unless (package-installed-p pkg-symbol)
(package-refresh-contents)
@@ -35,5 +36,17 @@
;; Needed when `hypb:display-file-with-logo' uses `org-mode'.
(setq hsys-org-enable-smart-keys t)
+(require 'pp)
+(terpri)
+(print (format "org-directory = %S" (ignore-errors (org-find-library-dir
"org"))))
+(print (format "ord-load-dir = %S" (ignore-errors (org-find-library-dir
"org-loaddefs"))))
+(print (format "version = %S" (org-release)))
+(terpri)
+
+(let ((org-reloaded (hsys-org-fix-version)))
+ (if org-reloaded
+ (message "Mixed Org versions fixed and reloaded; version is now %s"
org-version)
+ (message "Correct, single version of Org is active %s" org-version)))
+
(provide 'hy-test-dependencies)
;;; hy-test-dependencies.el ends here
diff --git a/test/hyrolo-tests.el b/test/hyrolo-tests.el
index 0b3a956164..4ede38fa42 100644
--- a/test/hyrolo-tests.el
+++ b/test/hyrolo-tests.el
@@ -3,7 +3,7 @@
;; Author: Mats Lidell <[email protected]>
;;
;; Orig-Date: 19-Jun-21 at 22:42:00
-;; Last-Mod: 13-Jan-24 at 02:32:45 by Bob Weiner
+;; Last-Mod: 13-Jan-24 at 20:05:16 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -464,7 +464,8 @@ Match a string in the second cell."
(let ((tmp-file (make-temp-file "hypb" nil)))
(unwind-protect
(should-error
- (let ((hyrolo-file-list (list tmp-file)))
+ (let* ((hyrolo-boolean-only-flag t)
+ (hyrolo-file-list (list tmp-file)))
()))
(hy-delete-file-and-buffer tmp-file))))