#!/usr/bin/env bash

__rvm_fix_group_permissions()
{
  if
    umask -S | __rvm_grep 'g=rw' >/dev/null
  then
    chmod -R g+rwX "$@"
  fi
}

# params: archive_file
__rvm_package_list()
{
  rvm_debug __rvm_package_list:$#: "$@"
  case "$1" in
    *.zip)
      unzip -Z -1 "$1"
      ;;
    *.tar.bz2)
      __rvm_tar tjf "$1"
      ;;
    *.tar.gz|*.tgz)
      __rvm_tar tzf "$1"
      ;;
    *)
      return 199
      ;;
  esac
}

__rvm_package_extract_run()
{
  [[ -d "$2" ]] || mkdir -p "$2"
  case "$1" in
    *.zip)
      unzip -q -o "$1" -d "$2"
      ;;
    *.tar.bz2)
      if [[ -n "$ZSH_VERSION" ]]
      then __rvm_tar xjf "$1" -C "$2" ${=rvm_tar_options:-}
      else __rvm_tar xjf "$1" -C "$2" ${rvm_tar_options:-}
      fi
      ;;
    *.tar.gz|*.tgz)
      if [[ -n "$ZSH_VERSION" ]]
      then __rvm_tar xzf "$1" -C "$2" ${=rvm_tar_options:-}
      else __rvm_tar xzf "$1" -C "$2" ${rvm_tar_options:-}
      fi
      ;;
    *)
      return 199
      ;;
  esac &&
  __rvm_fix_group_permissions "$2"/* ||
  return $?
}

# params: archive_file [path]
__rvm_package_extract()
{
  rvm_debug __rvm_package_extract:$#: "$@"
  typeset __tempdir __path __file __return
  __return=0
  __tempdir="$( TMPDIR="${rvm_tmp_path}" mktemp -d -t rvm-tmp.XXXXXXXXX )"
  __rvm_package_extract_run "$1" "$__tempdir" || __return=$?
  if
    (( __return == 0 ))
  then
    for __path in "$__tempdir"/*
    do
      __file="${__path##*/}"
      if
        [[ -n "${__file}" && -e "$2/${__file}" ]]
      then
        \rm -rf "$2/${__file}" || __return=$?
      fi
      \mv -f "${__path}" "$2/" || __return=$?
    done
  fi
  if [[ -n "$__tempdir" ]]
  then \rm -rf "$__tempdir"
  fi
  return $__return
}

# params: archive_file [path [path2]]
__rvm_package_create()
{
  rvm_debug __rvm_package_create:$#: "$@"
  case "$1" in
    *.tar.bz2)
      if [[ -z "${3:-}" ]]
      then __rvm_tar cjf "$1" "$2"
      else __rvm_tar cjf "$1" -C "$2" "$3"
      fi
      ;;
    *.tar.gz|*.tgz)
      if [[ -z "${3:-}" ]]
      then __rvm_tar czf "$1" "$2"
      else __rvm_tar czf "$1" -C "$2" "$3"
      fi
      ;;
    *)
      return 199
      ;;
  esac
}
