[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/plz 27010c20e1 45/81: Meta: Update makem.sh, etc.
From: |
ELPA Syncer |
Subject: |
[elpa] externals/plz 27010c20e1 45/81: Meta: Update makem.sh, etc. |
Date: |
Wed, 11 May 2022 17:58:01 -0400 (EDT) |
branch: externals/plz
commit 27010c20e17aaed6f1e74ab7519578d57cdf9e19
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>
Meta: Update makem.sh, etc.
---
.github/workflows/test.yml | 18 +--
Makefile | 23 ++--
makem.sh | 303 +++++++++++++++++++++++++++++++++++++--------
3 files changed, 279 insertions(+), 65 deletions(-)
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 29560acca1..e84deac3c2 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,6 +1,9 @@
# * test.yml --- Test Emacs packages using makem.sh on GitHub Actions
-# https://github.com/alphapapa/makem.sh
+# URL: https://github.com/alphapapa/makem.sh
+# Version: 0.5
+
+# * Commentary:
# Based on Steve Purcell's examples at
#
<https://github.com/purcell/setup-emacs/blob/master/.github/workflows/test.yml>,
@@ -28,8 +31,8 @@ on:
pull_request:
push:
# Comment out this section to enable testing of all branches.
- # branches:
- # - master
+ branches:
+ - master
jobs:
build:
@@ -39,6 +42,7 @@ jobs:
matrix:
emacs_version:
- 26.3
+ - 27.1
- snapshot
steps:
- uses: purcell/setup-emacs@master
@@ -50,8 +54,8 @@ jobs:
- name: Initialize sandbox
run: |
SANDBOX_DIR=$(mktemp -d) || exit 1
- echo ::set-env name=SANDBOX_DIR::$SANDBOX_DIR
- ./makem.sh -vv --sandbox-dir=$SANDBOX_DIR --install-deps
--install-linters
+ echo "SANDBOX_DIR=$SANDBOX_DIR" >> $GITHUB_ENV
+ ./makem.sh -vv --sandbox=$SANDBOX_DIR --install-deps --install-linters
# The "all" rule is not used, because it treats compilation warnings
# as failures, so linting and testing are run as separate steps.
@@ -60,11 +64,11 @@ jobs:
# NOTE: Uncomment this line to treat lint failures as passing
# so the job doesn't show failure.
# continue-on-error: true
- run: ./makem.sh -vv --sandbox-dir=$SANDBOX_DIR lint
+ run: ./makem.sh -vv --sandbox=$SANDBOX_DIR lint
- name: Test
if: always() # Run test even if linting fails.
- run: ./makem.sh -vv --sandbox-dir=$SANDBOX_DIR test
+ run: ./makem.sh -vv --sandbox=$SANDBOX_DIR test
# Local Variables:
# eval: (outline-minor-mode)
diff --git a/Makefile b/Makefile
index 1ca3da4b8e..64c4516119 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,7 @@
# * makem.sh/Makefile --- Script to aid building and testing Emacs Lisp
packages
-# This Makefile is from the makem.sh repo:
<https://github.com/alphapapa/makem.sh>.
+# URL: https://github.com/alphapapa/makem.sh
+# Version: 0.5
# * Arguments
@@ -19,11 +20,11 @@ ifdef install-linters
endif
ifdef sandbox
- SANDBOX = "--sandbox"
-endif
-
-ifdef sandbox-dir
- SANDBOX_DIR = "--sandbox-dir" "$(sandbox-dir)"
+ ifeq ($(sandbox), t)
+ SANDBOX = --sandbox
+ else
+ SANDBOX = --sandbox=$(sandbox)
+ endif
endif
ifdef debug
@@ -37,7 +38,9 @@ endif
verbose = $(v)
-ifneq (,$(findstring vv,$(verbose)))
+ifneq (,$(findstring vvv,$(verbose)))
+ VERBOSE = "-vvv"
+else ifneq (,$(findstring vv,$(verbose)))
VERBOSE = "-vv"
else ifneq (,$(findstring v,$(verbose)))
VERBOSE = "-v"
@@ -49,4 +52,8 @@ endif
# directory by that name exists, which can confuse Make.
%:
- @./makem.sh $(DEBUG) $(VERBOSE) $(SANDBOX) $(SANDBOX_DIR)
$(INSTALL_DEPS) $(INSTALL_LINTERS) $(@)
+ @./makem.sh $(DEBUG) $(VERBOSE) $(SANDBOX) $(INSTALL_DEPS)
$(INSTALL_LINTERS) $(@)
+
+.DEFAULT: init
+init:
+ @./makem.sh $(DEBUG) $(VERBOSE) $(SANDBOX) $(INSTALL_DEPS)
$(INSTALL_LINTERS)
diff --git a/makem.sh b/makem.sh
index 060bf19f15..d1a5edba8f 100755
--- a/makem.sh
+++ b/makem.sh
@@ -2,7 +2,8 @@
# * makem.sh --- Script to aid building and testing Emacs Lisp packages
-# https://github.com/alphapapa/makem.sh
+# URL: https://github.com/alphapapa/makem.sh
+# Version: 0.5
# * Commentary:
@@ -60,6 +61,7 @@ Rules:
lint-checkdoc Run checkdoc.
lint-compile Byte-compile source files with warnings as errors.
lint-declare Run check-declare.
+ lint-elsa Run Elsa (not included in "lint" rule).
lint-indent Lint indentation.
lint-package Run package-lint.
lint-regexps Run relint.
@@ -77,7 +79,8 @@ Rules:
Options:
-d, --debug Print debug info.
-h, --help I need somebody!
- -v, --verbose Increase verbosity, up to -vv.
+ -v, --verbose Increase verbosity, up to -vvv.
+ --no-color Disable color output.
--debug-load-path Print load-path from inside Emacs.
@@ -86,22 +89,29 @@ Options:
-e, --exclude FILE Exclude FILE from linting and testing.
-f, --file FILE Check FILE in addition to discovered files.
- --no-color Disable color output.
- -C, --no-compile Don't compile files automatically.
+ -c, --compile-batch Batch-compile files (instead of separately; quicker, but
+ may hide problems).
+ -C, --no-compile Don't compile files automatically.
Sandbox options:
- -s, --sandbox Run Emacs with an empty config in a temporary
- sandbox directory (removing directory on exit).
- -S, --sandbox-dir DIR Run Emacs with DIR as persistent sandbox directory.
- Makes an Emacs version-specific subdirectory, which
- facilitates testing under multiple Emacs versions.
- --install-deps Automatically install package dependencies.
- --install-linters Automatically install linters.
- -i, --install PACKAGE Install PACKAGE before running rules.
+ -s[DIR], --sandbox[=DIR] Run Emacs with an empty config in a sandbox DIR.
+ If DIR does not exist, make it. If DIR is not
+ specified, use a temporary sandbox directory and
+ delete it afterward, implying --install-deps and
+ --install-linters.
+ --install-deps Automatically install package dependencies.
+ --install-linters Automatically install linters.
+ -i, --install PACKAGE Install PACKAGE before running rules.
+
+ An Emacs version-specific subdirectory is automatically made inside
+ the sandbox, allowing testing with multiple Emacs versions. When
+ specifying a sandbox directory, use options --install-deps and
+ --install-linters on first-run and omit them afterward to save time.
Source files are automatically discovered from git, or may be
specified with options. Package dependencies are discovered from
-"Package-Requires" headers in source files and from a Cask file.
+"Package-Requires" headers in source files, from -pkg.el files, and
+from a Cask file.
EOF
}
@@ -144,7 +154,8 @@ function elisp-checkdoc-file {
": " text)))
(message msg)
(setq makem-checkdoc-errors-p t)
- (list text start end unfixable)))))
+ ;; Return nil because we *are* generating a buffered list of
errors.
+ nil))))
(mapcar #'checkdoc-file files)
(when makem-checkdoc-errors-p
(kill-emacs 1))))
@@ -155,6 +166,39 @@ EOF
echo $file
}
+function elisp-byte-compile-file {
+ # This seems to be the only way to make byte-compilation signal
+ # errors for warnings AND display all warnings rather than only
+ # the first one.
+ local file=$(mktemp)
+ # TODO: Add file to $paths_temp in other elisp- functions.
+ paths_temp+=("$file")
+
+ cat >"$file" <<EOF
+(defun makem-batch-byte-compile (&rest args)
+ ""
+ (let ((num-errors 0))
+ ;; NOTE: Only accepts files as args, not directories.
+ (dolist (file command-line-args-left)
+ (unless (makem-byte-compile-file file)
+ (cl-incf num-errors)))
+ (zerop num-errors)))
+
+(defun makem-byte-compile-file (filename &optional load)
+ "Call \`byte-compile-warn', returning nil if there are any warnings."
+ (let ((num-warnings 0))
+ (cl-letf (((symbol-function 'byte-compile-warn)
+ (lambda (format &rest args)
+ ;; Copied from \`byte-compile-warn'.
+ (cl-incf num-warnings)
+ (setq format (apply #'format-message format args))
+ (byte-compile-log-warning format t :warning))))
+ (byte-compile-file filename load))
+ (zerop num-warnings)))
+EOF
+ echo "$file"
+}
+
function elisp-check-declare-file {
# Since check-declare doesn't have a batch function that exits
# non-zero when errors are found, we make one.
@@ -222,7 +266,6 @@ function elisp-package-initialize-file {
(cons "melpa-stable"
"https://stable.melpa.org/packages/")))
$elisp_org_package_archive
(package-initialize)
-(setq load-prefer-newer t)
EOF
echo $file
}
@@ -235,6 +278,8 @@ function run_emacs {
local emacs_command=(
"${emacs_command[@]}"
-Q
+ --eval "(setq load-prefer-newer t)"
+ "${args_debug[@]}"
"${args_sandbox[@]}"
-l $package_initialize_file
$arg_batch
@@ -275,11 +320,27 @@ function batch-byte-compile {
[[ $compile_error_on_warn ]] && local error_on_warn=(--eval "(setq
byte-compile-error-on-warn t)")
run_emacs \
+ --load "$(elisp-byte-compile-file)" \
"${error_on_warn[@]}" \
- --funcall batch-byte-compile \
+ --eval "(unless (makem-batch-byte-compile) (kill-emacs 1))" \
"$@"
}
+function byte-compile-file {
+ debug "byte-compile: ERROR-ON-WARN:$compile_error_on_warn"
+ local file="$1"
+
+ [[ $compile_error_on_warn ]] && local error_on_warn=(--eval "(setq
byte-compile-error-on-warn t)")
+
+ # FIXME: Why is the line starting with "&& verbose 3" not indented
properly? Emacs insists on indenting it back a level.
+ run_emacs \
+ --load "$(elisp-byte-compile-file)" \
+ "${error_on_warn[@]}" \
+ --eval "(unless (makem-byte-compile-file \"$file\") (kill-emacs 1))" \
+ && verbose 3 "Compiling $file finished without errors." \
+ || { verbose 3 "Compiling file failed: $file"; return 1; }
+}
+
# ** Files
function dirs-project {
@@ -353,7 +414,8 @@ function args-load-files {
# For file in $@, echo "--load $file".
for file in "$@"
do
- printf -- '--load %q ' "$file"
+ sans_extension=${file%%.el}
+ printf -- '--load %q ' "$sans_extension"
done
}
@@ -389,11 +451,33 @@ function ert-tests-p {
grep "(ert-deftest" "${files_project_test[@]}" &>/dev/null
}
+function package-main-file {
+ # Echo the package's main file. Helpful for setting
package-lint-main-file.
+
+ file_pkg=$(git ls-files ./*-pkg.el 2>/dev/null)
+
+ if [[ $file_pkg ]]
+ then
+ # Use *-pkg.el file if it exists.
+ echo "$file_pkg"
+ else
+ # Use shortest filename (a sloppy heuristic that will do for now).
+ for file in "${files_project_feature[@]}"
+ do
+ echo ${#file} "$file"
+ done \
+ | sort -h \
+ | head -n1 \
+ | sed -r 's/^[[:digit:]]+ //'
+ fi
+}
+
function dependencies {
# Echo list of package dependencies.
- # Search package headers.
- egrep '^;; Package-Requires: ' $(files-project-feature)
$(files-project-test) \
+ # Search package headers. Use -a so grep won't think that an Elisp file
containing
+ # control characters (rare, but sometimes necessary) is binary and refuse
to search it.
+ egrep -a -i '^;; Package-Requires: ' $(files-project-feature)
$(files-project-test) \
| egrep -o '\([^([:space:]][^)]*\)' \
| egrep -o '^[^[:space:])]+' \
| sed -r 's/\(//g' \
@@ -405,20 +489,32 @@ function dependencies {
egrep '\(depends-on "[^"]+"' Cask \
| sed -r -e 's/\(depends-on "([^"]+)".*/\1/g'
fi
+
+ # Search -pkg.el file.
+ if [[ $(git ls-files ./*-pkg.el 2>/dev/null) ]]
+ then
+ sed -nr 's/.*\(([-[:alnum:]]+)[[:blank:]]+"[.[:digit:]]+"\).*/\1/p'
$(git ls-files ./*-pkg.el 2>/dev/null)
+ fi
}
# ** Sandbox
function sandbox {
- # Initialize sandbox.
+ verbose 2 "Initializing sandbox..."
# *** Sandbox arguments
+ # MAYBE: Optionally use branch-specific sandbox?
+
# Check or make user-emacs-directory.
if [[ $sandbox_dir ]]
then
# Directory given as argument: ensure it exists.
- [[ -d $sandbox_dir ]] || die "Directory doesn't exist: $sandbox_dir"
+ if ! [[ -d $sandbox_dir ]]
+ then
+ debug "Making sandbox directory: $sandbox_dir"
+ mkdir -p "$sandbox_dir" || die "Unable to make sandbox dir."
+ fi
# Add Emacs version-specific subdirectory, creating if necessary.
sandbox_dir="$sandbox_dir/$(emacs-version)"
@@ -434,14 +530,12 @@ function sandbox {
# Make argument to load init file if it exists.
init_file="$sandbox_dir/init.el"
- [[ -r $init_file ]] \
- && local args_load_init_file=(--load "$init_file")
# Set sandbox args. This is a global variable used by the run_emacs
function.
args_sandbox=(
+ --title "makem.sh: $(basename $(pwd)) (sandbox: $sandbox_dir)"
--eval "(setq user-emacs-directory (file-truename \"$sandbox_dir\"))"
--eval "(setq user-init-file (file-truename \"$init_file\"))"
- "${args_load_init_file[@]}"
)
# Add package-install arguments for dependencies.
@@ -456,20 +550,32 @@ function sandbox {
done
fi
+ # Add package-install arguments for linters.
+ if [[ $install_linters ]]
+ then
+ debug "Installing linters: package-lint relint"
+
+ args_sandbox_package_install+=(
+ --eval "(package-install 'elsa)"
+ --eval "(package-install 'package-lint)"
+ --eval "(package-install 'relint)")
+ fi
+
# *** Install packages into sandbox
if [[ ${args_sandbox_package_install[@]} ]]
then
# Initialize the sandbox (installs packages once rather than for every
rule).
- debug "Initializing sandbox..."
+ verbose 1 "Installing packages into sandbox..."
run_emacs \
--eval "(package-refresh-contents)" \
"${args_sandbox_package_install[@]}" \
- || die "Unable to initialize sandbox."
+ && success "Packages installed." \
+ || die "Unable to initialize sandbox."
fi
- debug "Sandbox initialized."
+ verbose 2 "Sandbox initialized."
}
# ** Utility
@@ -591,7 +697,8 @@ function verbose {
if [[ $verbose -ge $1 ]]
then
[[ $1 -eq 1 ]] && local color_name=blue
- [[ $1 -ge 2 ]] && local color_name=cyan
+ [[ $1 -eq 2 ]] && local color_name=cyan
+ [[ $1 -ge 3 ]] && local color_name=white
shift
log_color $color_name "$@" >&2
@@ -604,7 +711,17 @@ function ts {
function emacs-version {
# Echo Emacs version number.
- run_emacs --eval "(princ emacs-version)" || die "Unable to get Emacs
version."
+
+ # Don't use run_emacs function, which does more than we need.
+ "${emacs_command[@]}" -Q --batch --eval "(princ emacs-version)" \
+ || die "Unable to get Emacs version."
+}
+
+function rule-p {
+ # Return 0 if $1 is a rule.
+ [[ $1 =~ ^(lint-?|tests?)$ ]] \
+ || [[ $1 =~ ^(batch|interactive)$ ]] \
+ || [[ $(type -t "$2" 2>/dev/null) =~ function ]]
}
# * Rules
@@ -621,21 +738,60 @@ function all {
tests
}
-function compile {
+function compile-batch {
[[ $compile ]] || return 0
unset compile # Only compile once.
verbose 1 "Compiling..."
+ verbose 2 "Batch-compiling files..."
debug "Byte-compile files: ${files_project_byte_compile[@]}"
- batch-byte-compile "${files_project_byte_compile[@]}" \
- && success "Compiling finished without errors." \
- || error "Compilation failed."
+ batch-byte-compile "${files_project_byte_compile[@]}"
+}
+
+function compile-each {
+ [[ $compile ]] || return 0
+ unset compile # Only compile once.
+
+ verbose 1 "Compiling..."
+ debug "Byte-compile files: ${files_project_byte_compile[@]}"
+
+ local compile_errors
+ for file in "${files_project_byte_compile[@]}"
+ do
+ verbose 2 "Compiling file: $file..."
+ byte-compile-file "$file" \
+ || compile_errors=t
+ done
+
+ [[ ! $compile_errors ]]
+}
+
+function compile {
+ if [[ $compile = batch ]]
+ then
+ compile-batch "$@"
+ else
+ compile-each "$@"
+ fi
+ local status=$?
+
+ if [[ $compile_error_on_warn ]]
+ then
+ # Linting: just return status code, because lint rule will print
messages.
+ [[ $status = 0 ]]
+ else
+ # Not linting: print messages here.
+ [[ $status = 0 ]] \
+ && success "Compiling finished without errors." \
+ || error "Compiling failed."
+ fi
}
function batch {
- # Run Emacs with $args_batch and with project source and test files loaded.
- verbose 1 "Executing Emacs with arguments: ${args_batch[@]}"
+ # Run Emacs in batch mode with ${args_batch_interactive[@]} and
+ # with project source and test files loaded.
+ verbose 1 "Executing Emacs with arguments: ${args_batch_interactive[@]}"
run_emacs \
$(args-load-files "${files_project_feature[@]}"
"${files_project_test[@]}") \
@@ -644,9 +800,16 @@ function batch {
function interactive {
# Run Emacs interactively. Most useful with --sandbox and --install-deps.
+ local load_file_args=$(args-load-files "${files_project_feature[@]}"
"${files_project_test[@]}")
+ verbose 1 "Running Emacs interactively..."
+ verbose 2 "Loading files: ${load_file_args//--load /}"
+
+ [[ $compile ]] && compile
+
unset arg_batch
run_emacs \
- $(args-load-files "${files_project_feature[@]}"
"${files_project_test[@]}") \
+ $load_file_args \
+ --eval "(load user-init-file)" \
"${args_batch_interactive[@]}"
arg_batch="--batch"
}
@@ -679,7 +842,7 @@ function lint-compile {
verbose 1 "Linting compilation..."
compile_error_on_warn=true
- batch-byte-compile "${files_project_byte_compile[@]}" \
+ compile "${files_project_byte_compile[@]}" \
&& success "Linting compilation finished without errors." \
|| error "Linting compilation failed."
unset compile_error_on_warn
@@ -699,6 +862,20 @@ function lint-declare {
|| error "Linting declarations failed."
}
+function lint-elsa {
+ verbose 1 "Linting with Elsa..."
+
+ # MAYBE: Install Elsa here rather than in sandbox init, to avoid installing
+ # it when not needed. However, we should be careful to be clear about when
+ # packages are installed, because installing them does execute code.
+ run_emacs \
+ --load elsa \
+ -f elsa-run-files-and-exit \
+ "${files_project_feature[@]}" \
+ && success "Linting with Elsa finished without errors." \
+ || error "Linting with Elsa failed."
+}
+
function lint-indent {
verbose 1 "Linting indentation..."
@@ -722,6 +899,7 @@ function lint-package {
run_emacs \
--load package-lint \
+ --eval "(setq package-lint-main-file \"$(package-main-file)\")" \
--funcall package-lint-batch-and-exit \
"${files_project_feature[@]}" \
&& success "Linting package finished without errors." \
@@ -768,9 +946,8 @@ function test-buttercup {
paths_temp+=("$buttercup_file")
run_emacs \
- --load buttercup \
- --load "$buttercup_file" \
- -f buttercup-run-discover \
+ $(args-load-files "${files_project_test[@]}") \
+ -f buttercup-run \
&& success "Buttercup tests finished without errors." \
|| error "Buttercup tests failed."
}
@@ -791,13 +968,14 @@ function test-ert {
# * Defaults
-test_files_regexp='^((tests?|t)/)|-test.el$|^test-'
+test_files_regexp='^((tests?|t)/)|-tests?.el$|^test-'
emacs_command=("emacs")
errors=0
verbose=0
compile=true
arg_batch="--batch"
+compile=each
# MAYBE: Disable color if not outputting to a terminal. (OTOH, the
# colorized output is helpful in CI logs, and I don't know if,
@@ -856,8 +1034,8 @@ elisp_org_package_archive="(add-to-list 'package-archives
'(\"org\" . \"https://
# * Args
args=$(getopt -n "$0" \
- -o dhe:E:i:sS:vf:CO \
- -l
exclude:,emacs:,install-deps,install-linters,debug,debug-load-path,help,install:,verbose,file:,no-color,no-compile,no-org-repo,sandbox,sandbox-dir:
\
+ -o dhce:E:i:s::vf:CO \
+ -l
compile-batch,exclude:,emacs:,install-deps,install-linters,debug,debug-load-path,help,install:,verbose,file:,no-color,no-compile,no-org-repo,sandbox::
\
-- "$@") \
|| { usage; exit 1; }
eval set -- "$args"
@@ -869,12 +1047,13 @@ do
install_deps=true
;;
--install-linters)
- args_sandbox_package_install+=(--eval "(package-install
'package-lint)"
- --eval "(package-install 'relint)")
+ install_linters=true
;;
-d|--debug)
debug=true
verbose=2
+ args_debug=(--eval "(setq init-file-debug t)"
+ --eval "(setq debug-on-error t)")
;;
--debug-load-path)
debug_load_path=true
@@ -883,6 +1062,10 @@ do
usage
exit
;;
+ -c|--compile-batch)
+ debug "Compiling files in batch mode"
+ compile=batch
+ ;;
-E|--emacs)
shift
emacs_command=($1)
@@ -893,11 +1076,16 @@ do
;;
-s|--sandbox)
sandbox=true
- ;;
- -S|--sandbox-dir)
shift
- sandbox=true
sandbox_dir="$1"
+
+ if ! [[ $sandbox_dir ]]
+ then
+ debug "No sandbox dir: installing dependencies."
+ install_deps=true
+ else
+ debug "Sandbox dir: $1"
+ fi
;;
-v|--verbose)
((verbose++))
@@ -909,8 +1097,7 @@ do
;;
-f|--file)
shift
- project_source_files+=("$1")
- project_byte_compile_files+=("$1")
+ args_files+=("$1")
;;
-O|--no-org-repo)
unset elisp_org_package_archive
@@ -948,10 +1135,18 @@ files_project_feature=($(files-project-feature))
files_project_test=($(files-project-test))
files_project_byte_compile=("${files_project_feature[@]}"
"${files_project_test[@]}")
+if [[ ${args_files[@]} ]]
+then
+ # Add specified files.
+ files_project_feature+=("${args_files[@]}")
+ files_project_byte_compile+=("${args_files[@]}")
+fi
+
debug "EXCLUDING FILES: ${files_exclude[@]}"
debug "FEATURE FILES: ${files_project_feature[@]}"
debug "TEST FILES: ${files_project_test[@]}"
debug "BYTE-COMPILE FILES: ${files_project_byte_compile[@]}"
+debug "PACKAGE-MAIN-FILE: $(package-main-file)"
if ! [[ ${files_project_feature[@]} ]]
then
@@ -963,6 +1158,14 @@ fi
args_load_paths=($(args-load-path))
debug "LOAD PATH ARGS: ${args_load_paths[@]}"
+# If rules include linters and sandbox-dir is unspecified, install
+# linters automatically.
+if [[ $sandbox && ! $sandbox_dir ]] && [[ "${rest[@]}" =~ lint ]]
+then
+ debug "Installing linters automatically."
+ install_linters=true
+fi
+
# Initialize sandbox.
[[ $sandbox ]] && sandbox
- [elpa] externals/plz 51404566fa 29/81: Notes: Add fetch.el, (continued)
- [elpa] externals/plz 51404566fa 29/81: Notes: Add fetch.el, ELPA Syncer, 2022/05/11
- [elpa] externals/plz b77283748b 31/81: Meta: Update makem.sh, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 56c66c4421 32/81: Add/Change: :as 'binary, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 1bb701f1c1 36/81: Change/Fix: Downcase and intern header keys, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 6f8dfb83de 34/81: Tests: (plz-test-get-response) Change to macro, ELPA Syncer, 2022/05/11
- [elpa] externals/plz baf93bb80a 39/81: Fix: (plz--curl) Header args, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 33438b7105 35/81: CI: Enable testing of all branches, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 439fb383d9 37/81: Notes: Add idea about finalizers, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 65dbc0f219 41/81: Change/Fix: (plz--sentinel) Use exhaustive pcase, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 7eff40f276 44/81: Add: plz-finally, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 27010c20e1 45/81: Meta: Update makem.sh, etc.,
ELPA Syncer <=
- [elpa] externals/plz f34efa052c 48/81: Fix: set-buffer-multibyte nil for binary, ELPA Syncer, 2022/05/11
- [elpa] externals/plz e977a046a3 50/81: Change: (plz-http-response-status-line-regexp) Match at BOL, ELPA Syncer, 2022/05/11
- [elpa] externals/plz f12f907719 52/81: Change/Fix: (plz--curl) Disable Expect header, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 701e79c3e8 55/81: Tidy: Remove obsolete functions, ELPA Syncer, 2022/05/11
- [elpa] externals/plz b412258c9d 56/81: Add: :timeout argument (curl's --max-time), ELPA Syncer, 2022/05/11
- [elpa] externals/plz 87007fc612 57/81: Add: FIXMEs, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 709a14740f 58/81: Tidy: Docstrings, ELPA Syncer, 2022/05/11
- [elpa] externals/plz 93a2ccaaa8 59/81: Fix: Run curl in temporary-file-directory, ELPA Syncer, 2022/05/11
- [elpa] externals/plz f2176dc56c 60/81: Change/Fix: Avoid command-line arguments, ELPA Syncer, 2022/05/11
- [elpa] externals/plz ac5bc006f3 62/81: Docs: Add readme, ELPA Syncer, 2022/05/11