diff options
Diffstat (limited to 'subr.pkg/pkg_fetch_extract.subr')
-rw-r--r-- | subr.pkg/pkg_fetch_extract.subr | 48 |
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 |