Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

270 lines (239 sloc) 6.327 kb
#!/usr/bin/env bash
__rvm_log_command_caclulate_log_timestamp()
{
export rvm_log_timestamp="$(__rvm_date "+%s")"
rvm_debug "Log prefix: ${rvm_log_path}/${rvm_log_timestamp}${rvm_ruby_string:+_}${rvm_ruby_string:-}/"
}
__rvm_log_command_caclulate_log_filesystem()
{
export rvm_log_filesystem="$(
__rvm_mount 2>/dev/null | __rvm_awk -v rvm_path=$rvm_path '
BEGIN{longest=""; fstype=""}
{if (index(rvm_path,$3)==1 && length($3)>length(longest)){longest=$3; fstype=$5}}
END{print fstype}
'
)"
rvm_debug "Log filesystem: ${rvm_log_filesystem}"
}
__rvm_log_command_caclulate_log_namelen()
{
case "${rvm_log_filesystem}" in
(ecryptfs) export rvm_log_namelen=138 ;;
(*) export rvm_log_namelen=250 ;;
esac
rvm_debug "Log max name length: ${rvm_log_namelen}"
}
__rvm_log_command_caclulate_log_file_name()
{
[[ -n "${rvm_log_timestamp:-}" ]] || __rvm_log_command_caclulate_log_timestamp
[[ -n "${rvm_log_filesystem:-}" ]] || __rvm_log_command_caclulate_log_filesystem
[[ -n "${rvm_log_namelen:-}" ]] || __rvm_log_command_caclulate_log_namelen
name="${name//[ \/]/_}"
_log="${rvm_log_path}/${rvm_log_timestamp}${rvm_ruby_string:+_}${rvm_ruby_string:-}/${name}"
if [[ -n "${ZSH_VERSION:-}" ]]
then _log="${_log[0,${rvm_log_namelen}]}.log"
else _log="${_log:0:${rvm_log_namelen}}.log"
fi
}
# Run a specified command and log it (once).
__rvm_log_command()
{
typeset name message _command_start _command_name
typeset -a _command
name="${1:-}"
message="${2:-}"
shift 2
_command=( "$@" ) # store full command so we can manipulate it
_command_start="$1" # store first part so we can detect variables
while (( $# )) && [[ "$1" =~ "=" ]] # skip variables from beginning
do shift
done
_command_name="$1" # store the real command so we can detect functions
[[ ! "${_command_start}" =~ "=" ]] || _command=( "env" "${_command[@]}" )
if __function_on_stack __rvm_log_command_internal
then __rvm_log_command_simple "$@" || return $?
else __rvm_log_command_internal "$@" || return $?
fi
}
# basic debugging information for the command
__rvm_log_command_debug()
{
printf "%b" "[$(__rvm_date +'%Y-%m-%d %H:%M:%S')] ${_command_name}\n"
if is_a_function "${_command_name}"
then typeset -f "${_command_name}"
fi
printf "%b" "current path: $PWD\n"
env | grep -E '^GEM_HOME=|^GEM_PATH=|^PATH='
printf "%b" "command(${#_command[@]}): ${_command[*]}\n"
}
# Run a specified command and do not log it again.
__rvm_log_command_simple()
{
__rvm_log_command_debug
rvm_log "$message"
"$@" || return $?
}
# Run a specified command and log it.
__rvm_log_command_internal()
{
typeset _log
(( ${rvm_niceness:-0} == 0 )) || _command=( nice -n $rvm_niceness "${_command[@]}" )
__rvm_log_command_caclulate_log_file_name
rvm_debug "Log file: ${_log}"
[[ -d "${_log%\/*}" ]] || \mkdir -p "${_log%\/*}"
[[ -f "${_log}" ]] || \rm -f "${_log}"
__rvm_log_command_debug | tee "${_log}" | rvm_debug_stream
__rvm_log_dotted "${_log}" "$message" "${_command[@]}" ||
{
typeset result=$?
typeset __show_lines="${rvm_show_log_lines_on_error:-15}"
rvm_error "Error running '${_command[*]}',"
case "${__show_lines}" in
(0)
rvm_error "please read ${_log}"
;;
(all)
rvm_error "content of log ${_log}"
cat "${_log}" >&2
;;
(*)
rvm_error "showing last ${__show_lines} lines of ${_log}"
tail -n "${__show_lines}" "${_log}" >&2
;;
esac
return ${result}
}
}
__rvm_debug_command()
{
rvm_debug "Running($#): $*"
"$@" || return $?
}
__rvm_pager_or_cat_v()
{
eval "${PAGER:-\cat} '$1'"
}
__rvm_ask_for()
{
typeset response
rvm_warn "$1"
printf "%b" "(anything other than '$2' will cancel) > "
# need and IF to properly handle CTRL+C ... wtf?
if read response && [[ "$2" == "$response" ]]
then return 0
else return 1
fi
}
__rvm_dotted()
{
set +x
typeset flush
if (( $# ))
then printf "%b" "${rvm_notify_clr:-}$*${rvm_reset_clr:-}"
fi
if __rvm_awk '{fflush;}' <<<EO 2>/dev/null
then flush=fflush
else flush=flush
fi
# the nasty '${flush}' inside is for compatibility,
# old awk does not allow running function from variable
awk -v go_back="$( tput cub1 2>/dev/null || true)" \
'
BEGIN{
spin[0]="|"go_back;
spin[1]="/"go_back;
spin[2]="-"go_back;
spin[3]="\\"go_back }
{
if ((NR-1)%(10)==9)
printf ".";
else
if (go_back!="") printf spin[(NR-1)%4];
'${flush}' }
END{
print "." }
'
}
__rvm_log_dotted()
{
typeset __log_file __message __iterator __result
__log_file="$1"
__message="$2"
shift 2
__result=0
if
[[ -n "${ZSH_VERSION:-}" ]]
then
rvm_log "${__message} - please wait"
{
set -x
"$@" > "${__log_file}" 2>&1 || __result=$?
(( __local_rvm_trace_flag > 0 )) || set +x
} 2>/dev/null
else
{
set -x
"$@" 2>&1 | tee -a "${__log_file}" | __rvm_dotted "${__message}"
__rvm_check_pipestatus ${PIPESTATUS[@]} ${pipestatus[@]} || __result=$?
(( __local_rvm_trace_flag > 0 )) || set +x
} 2>/dev/null
fi
return $__result
}
__rvm_check_pipestatus()
{
for __iterator
do
case "${__iterator}" in
("") true ;;
(0) true ;;
(*) return ${__iterator} ;;
esac
done
return 0
}
__rvm_wait_anykey()
{
if [[ -n "${1:-}" ]]
then echo "$1"
fi
typeset _read_char_flag
if [[ -n "${ZSH_VERSION:-}" ]]
then _read_char_flag=k
else _read_char_flag=n
fi
builtin read -${_read_char_flag} 1 -s -r anykey
}
__rvm_table_br()
{
typeset width=${COLUMNS:-78}
width=$(( width > 116 ? 116 : width ))
printf "%-${width}s\n" " " | __rvm_sed 's/ /*/g'
}
__rvm_fold()
{
if fold -s -w 10 <<<bla >/dev/null
then fold -s -w $1
else fold -w $1
fi
}
__rvm_table_wrap_text()
{
typeset width=${COLUMNS:-78}
width=$(( width > 116 ? 116 : width ))
width=$(( width - 4 )) # "* <content> *"
__rvm_fold $width | __rvm_awk -v width=$width '{printf "* %-"width"s *\n", $0}'
}
# echo text | __rvm_table [header]
__rvm_table()
{
if
[[ -n "${1:-}" ]]
then
__rvm_table_br
echo "$1" | __rvm_table_wrap_text
fi
__rvm_table_br
\cat "${2:--}" | __rvm_table_wrap_text
__rvm_table_br
}
Jump to Line
Something went wrong with that request. Please try again.