summaryrefslogtreecommitdiffhomepage
path: root/subr.pkg/pkg_fetch_extract.subr
diff options
context:
space:
mode:
Diffstat (limited to 'subr.pkg/pkg_fetch_extract.subr')
-rw-r--r--subr.pkg/pkg_fetch_extract.subr48
1 files changed, 48 insertions, 0 deletions
diff --git a/subr.pkg/pkg_fetch_extract.subr b/subr.pkg/pkg_fetch_extract.subr
new file mode 100644
index 00000000..ed4bad78
--- /dev/null
+++ b/subr.pkg/pkg_fetch_extract.subr
@@ -0,0 +1,48 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkgp_fetch_extract_type() {
+ local _ppfet_fname="${1}" _ppfet_rtype="${2#\$}";
+
+ if [ "${1##*.tar.}" != "${1}" ]; then
+ eval ${_ppfet_rtype}='${1##*.tar.}';
+ elif [ "${1##*.t}" != "${1}" ]; then
+ eval ${_ppfet_rtype}='${1##*.t}';
+ fi;
+ return 0;
+};
+
+pkg_fetch_extract() {
+ local _pfe_group_name="${1}" _pfe_pkg_name="${2}" _pfe_restart_at="${3}" \
+ _pfe_type="";
+
+ if [ "${PKG_URL:+1}" = 1 ]; then
+ _pfe_oldpwd="${PWD}";
+
+ if ! rtl_fileop cd "${PKG_BASE_DIR}"\
+ || ! rtl_fileop rm "${PKG_BASE_DIR}/${PKG_SUBDIR}"; then
+ rtl_fileop cd "${_pfe_oldpwd}"; return 1;
+ else
+ pkgp_fetch_extract_type "${PKG_NAME}" \$_pfe_type;
+
+ case "${_pfe_type}" in
+ bz2) bunzip2 -d < "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}" | tar -C "${PKG_BASE_DIR}" -xf -; ;;
+ gz) gunzip -d < "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}" | tar -C "${PKG_BASE_DIR}" -xf -; ;;
+ lz) lzip -d < "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}" | tar -C "${PKG_BASE_DIR}" -xf -; ;;
+ xz) xz -d < "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}" | tar -C "${PKG_BASE_DIR}" -xf -; ;;
+ *) tar -C "${PKG_BASE_DIR}" -xf "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}"; ;;
+ esac;
+
+ if [ "${?}" -ne 0 ]; then
+ rtl_fileop cd "${_pfe_oldpwd}"; return 1;
+ else
+ rtl_fileop cd "${_pfe_oldpwd}";
+ fi;
+ fi;
+ fi;
+
+ return 0;
+};
+
+# vim:filetype=sh