mirror of
https://github.com/standardebooks/web.git
synced 2025-07-13 01:52:02 -04:00
Add script to download books from https://github.com/standardebooks/ and keep them up to date.
This commit is contained in:
parent
e967da9605
commit
235e1a1388
3 changed files with 131 additions and 0 deletions
|
@ -58,6 +58,8 @@ You’ll also need to ensure the following:
|
||||||
|
|
||||||
The website pulls all ebook information from what is contained in `/standardebooks.org/www/ebooks/`. It does not inspect `/standardebooks.org/ebooks/`. Therefore it is possible for one or the other to hold different catalogs if they become out of sync.
|
The website pulls all ebook information from what is contained in `/standardebooks.org/www/ebooks/`. It does not inspect `/standardebooks.org/ebooks/`. Therefore it is possible for one or the other to hold different catalogs if they become out of sync.
|
||||||
|
|
||||||
|
To automatically populate your server with ebooks from https://github.com/standardebooks/, you can use sync-ebooks and deploy-ebook-to-www in the [scripts](scripts) directory. If you don't want to clone all ebooks, don't use sync-ebooks, and instead clone the books you want into `/standardebooks.org/ebooks` with `git clone --bare`. To clone a list of books, you can use `while IFS= read -r line; do git clone --bare "${line}"; done < urllist.txt`
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
|
|
||||||
This repository includes [PHPStan](https://github.com/phpstan/phpstan) to statically analyze the codebase and [Safe PHP](https://github.com/thecodingmachine/safe) to replace old functions that don't throw exceptions.
|
This repository includes [PHPStan](https://github.com/phpstan/phpstan) to statically analyze the codebase and [Safe PHP](https://github.com/thecodingmachine/safe) to replace old functions that don't throw exceptions.
|
||||||
|
|
7
scripts/README.md
Normal file
7
scripts/README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# sync-ebooks
|
||||||
|
|
||||||
|
To use, call this script with the directory where your ebooks go as its last argument. For example `sync-ebooks /standardebooks.org/ebooks` or if you want to clone them into this repository `sync-ebooks ebooks`. If you want progress output, use -v, and if you want detailed git progress output use -vv.
|
||||||
|
|
||||||
|
# deploy-ebook-to-www
|
||||||
|
|
||||||
|
To use, call this script with the directories of the books you want to deploy as its arguments. For example, to deploy all ebooks after using sync-ebooks, run `deploy-ebook-to-www /standardebooks.org/ebooks/*`. To deploy only The Time Machine by H.G Wells, you would run `deploy-ebook-to-www /standardebooks.org/ebooks/h-g-wells_the-time-machine`. Note that deploy-ebook-to-www assumes that your webroot is in /standardebooks.org/. To output progress information, use -v or --verbose.
|
122
scripts/sync-ebooks
Executable file
122
scripts/sync-ebooks
Executable file
|
@ -0,0 +1,122 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
usage(){
|
||||||
|
fmt <<EOF
|
||||||
|
DESCRIPTION
|
||||||
|
Syncs books from standardebooks.org GitHub org to specified folder.
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
${0##*/} [-h] [-v|-vv] [-u] DIRECTORY
|
||||||
|
|
||||||
|
-h displays this message
|
||||||
|
-v displays general progress updates
|
||||||
|
-vv displays progress updates and verbose git output
|
||||||
|
|
||||||
|
DIRECTORY should be where the repositories should go.
|
||||||
|
|
||||||
|
EXAMPLE
|
||||||
|
${0##*/} /standardebooks.org/ebooks
|
||||||
|
EOF
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
# Terminate on CTRL-C
|
||||||
|
trap ctrl_c INT
|
||||||
|
ctrl_c() {
|
||||||
|
printf "** Trapped CTRL-C\n"
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
verbosity=0
|
||||||
|
update_only="false"
|
||||||
|
while getopts ":hvu" option; do
|
||||||
|
case "${option}" in
|
||||||
|
h) usage ;;
|
||||||
|
v) verbosity=$((verbosity + 1)) ;;
|
||||||
|
u) update_only="true" ;;
|
||||||
|
?) usage ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
shift "$((OPTIND -1))"
|
||||||
|
|
||||||
|
if [ -z "$*" ]; then
|
||||||
|
usage
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [ -d "$*" ]; then
|
||||||
|
>&2 printf "%s does not exist.\n" "$*"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! cd "$*"; then
|
||||||
|
>&2 printf "Couldn't cd into %s.\n" "$*"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${verbosity}" -gt 0 ]; then
|
||||||
|
printf "** Updating local repositories. **\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for item in ./*; do
|
||||||
|
[ -e "${item}" ] || break
|
||||||
|
if [ "${verbosity}" -gt 0 ]; then
|
||||||
|
printf "Updating %s\n" "${item}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${verbosity}" -gt 1 ]; then
|
||||||
|
git -C "${item}" fetch -v
|
||||||
|
else
|
||||||
|
git -C "${item}" fetch -q
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${update_only}" = "true" ]; then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${verbosity}" -gt 0 ]; then
|
||||||
|
printf "** Cloning remote repositories. **\n"
|
||||||
|
printf "Fetching repository urls"
|
||||||
|
fi
|
||||||
|
|
||||||
|
page=1
|
||||||
|
urls=""
|
||||||
|
pageurls="placeholder"
|
||||||
|
while [ -n "${pageurls}" ]; do
|
||||||
|
pageurls=$(curl -s "https://api.github.com/orgs/standardebooks/repos?per_page=100&page=${page}" \
|
||||||
|
| awk 'BEGIN { FS="\""; RS="," }; { if ($2 == "clone_url") {print $4} }')
|
||||||
|
urls=$(printf "%s\n%s" "${urls}" "${pageurls}")
|
||||||
|
page=$((page + 1))
|
||||||
|
|
||||||
|
if [ "${verbosity}" -gt 0 ]; then
|
||||||
|
printf "."
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "${verbosity}" -gt 0 ]; then
|
||||||
|
printf "\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
urls=$(printf "%s\n" "${urls}" | grep -v -e "/tools.git\$" -e "/web.git\$" -e "/manual.git\$" | awk 'NF')
|
||||||
|
|
||||||
|
printf "%s\n" "${urls}" | while IFS= read -r repourl; do
|
||||||
|
[ -n "${repourl}" ] || continue
|
||||||
|
[ -d "${repourl##*/}" ] && continue
|
||||||
|
|
||||||
|
if [ "${verbosity}" -gt 0 ]; then
|
||||||
|
printf "Cloning %s\n" "${repourl}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${verbosity}" -gt 1 ]; then
|
||||||
|
git clone -v --bare "${repourl}"
|
||||||
|
else
|
||||||
|
git clone -q --bare "${repourl}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! [ -d "${repourl##*/}" ]; then
|
||||||
|
>&2 printf "%s wasn't cloned." "${repourl}"
|
||||||
|
fi
|
||||||
|
done
|
Loading…
Add table
Add a link
Reference in a new issue