mirror of
https://github.com/dimitri/el-get.git
synced 2024-09-30 05:29:52 +08:00
d676e99e7d
This avoids accidentally DoSing the servers that host many packages, such as GitHub or the ELPA servers.
82 lines
2.0 KiB
Bash
Executable File
82 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: $0 recipe1 [recipe2 ...]"
|
|
exit 0
|
|
fi
|
|
|
|
set_default () {
|
|
eval "
|
|
if [ -z \$$1 ]; then
|
|
$1=$2
|
|
fi
|
|
"
|
|
}
|
|
|
|
set_default EL_GET_LIB_DIR "$(dirname "$(dirname "$(readlink -f "$0")")")"
|
|
set_default TMPDIR "$(dirname "$(mktemp --dry-run)")"
|
|
set_default TEST_HOME "$TMPDIR/el-get-test-home"
|
|
set_default EMACS "$(which emacs)"
|
|
|
|
# 5 seconds in between tests to avoid accidental DoS from running too
|
|
# many tests in a short time
|
|
set_default DELAY_BETWEEN_TESTS 5
|
|
|
|
set_default RECIPE_DIR "$EL_GET_LIB_DIR/recipes"
|
|
|
|
get_recipe_file () {
|
|
for x in "$1" "$RECIPE_DIR/$1" "$RECIPE_DIR/$1.rcp" "$RECIPE_DIR/$1.el"; do
|
|
if [ -e "$x" ]; then
|
|
echo "$x"
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
test_recipe () {
|
|
recipe_file="$(get_recipe_file "$1")"
|
|
if [ ! -n "$recipe_file" ]; then
|
|
echo "*** Skipping nonexistent recipe $1 ***"
|
|
return
|
|
fi
|
|
echo "*** Testing el-get recipe $recipe_file ***"
|
|
mkdir -p "$TEST_HOME"/.emacs.d
|
|
rm -rf "$TEST_HOME"/.emacs.d/el-get/
|
|
lisp_temp_file=`mktemp`
|
|
cat >"$lisp_temp_file" <<EOF
|
|
|
|
(progn
|
|
(setq debug-on-error t
|
|
el-get-verbose t
|
|
el-get-default-process-sync t
|
|
pdef (el-get-read-recipe-file "$recipe_file")
|
|
pname (plist-get pdef :name)
|
|
el-get-sources (list pdef))
|
|
(el-get (quote sync) pname)
|
|
(message "*** Initial install successful ***")
|
|
(el-get-update pname)
|
|
(message "*** Update successful ***")
|
|
(el-get-remove pname)
|
|
(message "*** Removal successful ***")
|
|
(el-get-install pname)
|
|
(message "*** Second install successful ***")
|
|
(assert (el-get-package-is-installed pname) nil
|
|
"Package %s should be installed right now but isn't" pname))
|
|
|
|
EOF
|
|
|
|
HOME="$TEST_HOME" "$EMACS" -Q -batch -L "$EL_GET_LIB_DIR" \
|
|
-l "$EL_GET_LIB_DIR/el-get.el" -l "$lisp_temp_file"
|
|
result="$?"
|
|
if [ "$result" = 0 ]; then
|
|
echo "*** SUCCESS $recipe_file ***"
|
|
else
|
|
echo "*** FAILED $recipe_file ***"
|
|
fi
|
|
}
|
|
|
|
for r in "$@"; do
|
|
test_recipe "$r"
|
|
sleep "$DELAY_BETWEEN_TESTS"
|
|
done
|