mirror of
https://github.com/lloeki/dotfiles.git
synced 2025-12-06 07:24:39 +01:00
98 lines
2.9 KiB
Bash
Executable file
98 lines
2.9 KiB
Bash
Executable file
_has-ruby() {
|
|
command -v ruby 2>&1 >/dev/null
|
|
}
|
|
|
|
_set_default_gem_home() {
|
|
if _has-ruby && [[ -z "${GEM_HOME}" ]]; then
|
|
RUBY_VERSION="$(ruby -e 'puts RUBY_VERSION.gsub(/\d+$/, "0")')"
|
|
GEM_HOME="${HOME}/.gem/ruby/${RUBY_VERSION}"
|
|
export GEM_HOME
|
|
PATH="${GEM_HOME}/bin:${PATH}"
|
|
export PATH
|
|
fi
|
|
}
|
|
|
|
if ! _has-chruby && ! _has-rbenv; then
|
|
_set_default_gem_home
|
|
fi
|
|
|
|
_auto-rubygems_gemdeps() {
|
|
local check_dir=$PWD
|
|
local next_check_dir=${check_dir%/*}
|
|
while [ "$next_check_dir" != "" ]; do
|
|
if [[ -f "$check_dir/Gemfile" ]]; then
|
|
export RUBYGEMS_GEMDEPS="$check_dir/Gemfile"
|
|
return
|
|
fi
|
|
check_dir="$next_check_dir"
|
|
next_check_dir=${check_dir%/*}
|
|
done
|
|
unset RUBYGEMS_GEMDEPS
|
|
}
|
|
|
|
unpack_gem() {
|
|
local gemname="${1:?argument missing}"
|
|
local basename="${1%%.gem}"
|
|
|
|
if [[ "${gemname}" == "${basename}" ]]; then
|
|
echo "error: not a .gem: '${gemname}'"
|
|
return 1
|
|
fi
|
|
|
|
if [[ ! -f "${gemname}" ]]; then
|
|
echo "error: not a .gem: '${gemname}'"
|
|
return 1
|
|
fi
|
|
|
|
mkdir -p "${basename}/data"
|
|
tar -C "${basename}" -xvf "${gemname}"
|
|
gunzip -f "${basename}/checksums.yaml.gz"
|
|
gunzip -f "${basename}/metadata.gz"
|
|
tar -C "${basename}"/data -xvzf "${basename}"/data.tar.gz && rm -f "${basename}"/data.tar.gz
|
|
}
|
|
|
|
pack_gem() {
|
|
local dirname="${1:?argument missing}"
|
|
local gemname="${2:-"${dirname}".gem}"
|
|
if type shasum 2>&1 >/dev/null; then
|
|
local sha256sum=( shasum -a 256 )
|
|
local sha512sum=( shasum -a 512 )
|
|
else
|
|
local sha256sum=( sha256sum )
|
|
local sha512sum=( sha512sum )
|
|
fi
|
|
|
|
if [[ ! -d "${dirname}/data" ]]; then
|
|
echo "error: missing data: '${dirname}'"
|
|
return 1
|
|
fi
|
|
|
|
if [[ ! -f "${dirname}/metadata" ]]; then
|
|
echo "error: missing metadata: '${dirname}'"
|
|
return 1
|
|
fi
|
|
|
|
tar --strip-components 2 --uid 0 --gid 0 -cvzf "${dirname}"/data.tar.gz "${dirname}"/data
|
|
gzip < "${dirname}/metadata" > "${dirname}/metadata.gz"
|
|
|
|
metadata_gz_sha256="$("${sha256sum[@]}" "${dirname}"/metadata.gz | sed 's/ .*//')"
|
|
data_tar_gz_sha256="$("${sha256sum[@]}" "${dirname}"/data.tar.gz | sed 's/ .*//')"
|
|
metadata_gz_sha512="$("${sha512sum[@]}" "${dirname}"/metadata.gz | sed 's/ .*//')"
|
|
data_tar_gz_sha512="$("${sha512sum[@]}" "${dirname}"/data.tar.gz | sed 's/ .*//')"
|
|
|
|
chmod u+w "${dirname}/checksums.yaml"
|
|
cat <<CHECKSUMS > "${dirname}/checksums.yaml"
|
|
---
|
|
SHA256:
|
|
metadata.gz: ${metadata_gz_sha256}
|
|
data.tar.gz: ${data_tar_gz_sha256}
|
|
SHA512:
|
|
metadata.gz: ${metadata_gz_sha512}
|
|
data.tar.gz: ${data_tar_gz_sha512}
|
|
CHECKSUMS
|
|
gzip < "${dirname}/checksums.yaml" > "${dirname}/checksums.yaml.gz"
|
|
|
|
tar --strip-components 1 --uid 0 --gid 0 -cvf "${gemname}" "${dirname}"/metadata.gz "${dirname}"/data.tar.gz "${dirname}"/checksums.yaml.gz
|
|
}
|
|
|
|
# vim: ft=bash
|