summaryrefslogtreecommitdiffhomepage
path: root/check_updates.sh
diff options
context:
space:
mode:
authorLucio Andrés Illanes Albornoz (arab, vxp) <lucio@lucioillanes.de>2017-11-20 21:45:21 +0000
committerLucio Andrés Illanes Albornoz (arab, vxp) <lucio@lucioillanes.de>2017-11-21 00:51:43 +0000
commitc27beab66023847435fb88cd5cc75916dca37057 (patch)
treec43c23133f5b837925785d5501aa4cff14980415 /check_updates.sh
parentd01c0269b8e5e467f82cd28392579c4c43fe63bc (diff)
downloadmidipix_build-c27beab66023847435fb88cd5cc75916dca37057.tar.bz2
midipix_build-c27beab66023847435fb88cd5cc75916dca37057.tar.xz
Refactors build steps along the sequence {setup,fetch,configure,build,install}.
subr/mode_check_updates.subr: seperated into check_updates.sh. subr/post_{copy_etc,sha256sums,tarballs}.subr: absorbed into `dist' target.
Diffstat (limited to 'check_updates.sh')
-rwxr-xr-xcheck_updates.sh102
1 files changed, 102 insertions, 0 deletions
diff --git a/check_updates.sh b/check_updates.sh
new file mode 100755
index 00000000..9699d360
--- /dev/null
+++ b/check_updates.sh
@@ -0,0 +1,102 @@
+#
+# set -o errexit -o noglob are assumed.
+#
+
+modep_cpu_get_fnames() {
+ if test_cmd pkg_${cu_name}_check_updates; then
+ pkg_${cu_name}_check_updates get_fnames;
+ fi;
+ if [ -z "${cu_fnames}" ]; then
+ if [ "${cu_url#*://github.com/*}" != "${cu_url}" ]; then
+ _cpugf_uname="${cu_url#*/github.com/}";
+ _cpugf_uname="${_cpugf_uname%%/*}";
+ _cpugf_pname="${cu_url#*/github.com/${_cpugf_uname}/}";
+ _cpugf_pname="${_cpugf_pname%%/*}";
+ cu_url_index="https://github.com/${_cpugf_uname%%/*}/${_cpugf_pname%%/*}/releases/";
+ unset _cpu_uname _cpu_pname;
+ cu_fnames="$(wget ${DEFAULT_WGET_ARGS} -qO- ${cu_url_index} |\
+ sed -n '/<span class="\(tag-name\|css-truncate-target\)">/s/^.*<span class="\(tag-name\|css-truncate-target\)">\([a-zA-Z]\+-\|v\|\)\(.\+\)<\/span>.*$/\3/p')";
+ cu_fname_base="${cu_name}";
+ cu_fname_ext="${cu_fname#v${cu_version}.}";
+ else
+ cu_url_index="${cu_url%/*}/";
+ cu_fnames="$(wget ${DEFAULT_WGET_ARGS} -qO- "${cu_url_index}" |\
+ sed -n '/[hH][rR][eE][fF]="[^"]\+"/s/^.*[hH][rR][eE][fF]="\([^"]\+\)".*$/\1/p')";
+ fi;
+ fi;
+ : ${cu_fname:="${cu_url##*/}"};
+ : ${cu_fname_base:="${cu_fname%%-*}"};
+ : ${cu_fname_ext:="${cu_fname#${cu_fname_base}-${cu_version}.}"};
+};
+
+modep_check_cpu_get_version() {
+ unset cu_fname_version;
+ if test_cmd pkg_${cu_name}_check_updates; then
+ pkg_${cu_name}_check_updates get_version;
+ fi;
+ if [ -z "${cu_fname_version}" ]; then
+ if [ "${cu_url#*://github.com/*}" != "${cu_url}" ]; then
+ if [ "${cu_fname#${cu_fname_base}-}" = "${cu_fname}" ]\
+ && [ "${cu_fname%.${cu_fname_ext}}" = "${cu_fname}" ]; then
+ cu_fname_version="${cu_fname}";
+ fi;
+ elif [ "${cu_fname#${cu_fname_base}-}" != "${cu_fname}" ]\
+ && [ "${cu_fname%.${cu_fname_ext}}" != "${cu_fname}" ]; then
+ cu_fname_version="${cu_fname#${cu_fname_base}-}";
+ cu_fname_version="${cu_fname_version%.${cu_fname_ext}}";
+ fi;
+ fi;
+};
+
+mode_check_pkg_updates() {
+ cu_name="${1}"; cu_NAME="${2}";
+ cu_version="$(get_var_unsafe PKG_${cu_NAME}_VERSION)";
+ cu_url="$(get_var_unsafe PKG_${cu_NAME}_URL)";
+ cu_url_type="$(get_var_unsafe PKG_${cu_NAME}_URL_TYPE)";
+ . vars/check_updates.vars;
+ if lmatch "${CHECK_UPDATES_SKIP}" " " "${cu_name}"; then
+ log_msg vnfo "Skipping \`${cu_name}' (set in \${CHECK_UPDATES_SKIP}.)";
+ return 0;
+ elif [ "${cu_url_type}" = "git" ]; then
+ log_msg vnfo "Skipping \`${cu_name}' (URL_TYPE is Git.)";
+ return 0;
+ elif [ -z "${cu_version}" -o -z "${cu_url}" ]; then
+ log_msg fail "Zero-length \${cu_version} and/or \${cu_url} for \`${cu_name}' (ignored.)";
+ return 0;
+ else
+ log_msg vnfo "Checking ${cu_name} v${cu_version} for updates.";
+ modep_cpu_get_fnames; _cpu_versions="";
+ fi;
+ for cu_fname in ${cu_fnames}; do
+ cu_fname="${cu_fname##*/}"; modep_check_cpu_get_version;
+ if [ -z "${cu_fname_version}" ]; then
+ continue;
+ elif ! echo "${cu_fname_version}" | grep -Eq '^[-_.0-9a-zA-Z]+$' \
+ || echo "${cu_fname_version}" | grep -Eq '^[_.a-zA-Z]+'; then
+ log_msg varn "Skipping \`${cu_fname_version}' (invalid version.)";
+ else
+ _cpu_versions="${_cpu_versions:+${_cpu_versions} }${cu_fname_version}";
+ fi;
+ done;
+ if [ -z "${_cpu_versions}" ]; then
+ log_msg warn "No versions available for \`${cu_name}' (Filename URL: ${cu_url}, index URL: ${cu_url_index}).";
+ else
+ _cpu_versions="$(echo "${_cpu_versions}" |\
+ sed 's/ /\n/g' | sort -rV | uniq |\
+ head -n${CHECK_UPDATES_SHOW_NEW:-6} |\
+ paste -d" " -s)";
+ if test_cmd pkg_${cu_name}_check_updates; then
+ pkg_${cu_name}_check_updates version_fixup;
+ fi;
+ if [ "${_cpu_versions%% *}" != "${cu_version}" ]; then
+ log_msg info "New release(s) available for ${cu_name} v${cu_version}: ${_cpu_versions}.";
+ else
+ log_msg vnfo "${cu_name} v${cu_version} is up to date.";
+ fi;
+ fi;
+ unset cu_fname cu_fname_base cu_fname_ext cu_fnames cu_fname_version \
+ cu_name cu_url cu_url_fname cu_url_fname_base cu_url_fname_ext \
+ cu_url_index cu_url_type cu_version _cpu_versions;
+};
+
+# vim:filetype=sh