/
wrapper
executable file
·132 lines (117 loc) · 3.28 KB
/
wrapper
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/usr/bin/env bash
default_flag="$rvm_default_flag"
# Prevent recursion
unset rvm_default_flag rvm_wrapper_name prefix
source "$rvm_scripts_path/base"
# Empty ruby string: show usage and exit.
[[ -n "${1:-}" ]] ||
{
rvm_help wrapper "$@"
exit 1
}
ruby_string="$1"
shift
prefix="${1:-}"
(( $# == 0 )) || shift
case "${prefix:-}" in
(--no-links)
rvm_error "Used '--no-links' this no operation as wrappers only creates links now."
exit 1
;;
esac
if (( $# ))
then binaries=("$@")
else binaries=(ruby gem irb ri rdoc rake erb testrb)
fi
override_check=0
(( ${rvm_default_flag:-0} == 0 )) || prefix="default"
# Use the correct ruby.
__rvm_become "$ruby_string" || {
rvm_error "Could not load ruby $ruby_string."
exit 3
}
# strip trailing / so we can use ${...%/*} to get parent
rvm_bin_path="${rvm_bin_path%/}"
rvm_wrappers_path="${rvm_wrappers_path%/}"
if
[[ -d "$rvm_bin_path" && ! -w "$rvm_bin_path" ]] ||
[[ ! -d "$rvm_bin_path" && ! -w "${rvm_bin_path%/*}" ]]
then
# can not write currently set location, try to switch relatively to wrappers path
rvm_error "No bin path suitable for lining wrapper. Try setting 'rvm_bin_path'."
exit 4
fi
[[ -d "$rvm_bin_path" ]] || mkdir -p "$rvm_bin_path"
__rvm_log_command "gemset.wrappers.$ruby_string" \
"Regenerating $ruby_string wrappers" \
run_gem_wrappers_regenerate 2>/dev/null || true
__rvm_ensure_has_environment_files
environment_identifier="$(__rvm_env_string)"
find_all_wrappers()
{
typeset -a search_paths
typeset _path
search_paths=()
for _path in \
"$rvm_gems_path/${environment_identifier}"/bin/ \
"$rvm_gems_path/${environment_identifier%%@*}@global"/bin/ \
"$rvm_rubies_path/${environment_identifier%%@*}"/bin/
do
if [[ -d "${_path}" ]]
then search_paths+=( "${_path}" )
fi
done
(( ${#search_paths[@]} )) || return 0
__rvm_find "${search_paths[@]}" -type f -perm -u=x | __rvm_awk -F/ '{print $NF}'
}
if
[[ " ${binaries[*]} " =~ " --all " ]]
then
old_binaries=( "${binaries[@]}" )
__rvm_read_lines binaries <(
for binary_name in "${old_binaries[@]}"
do
if
[[ "$binary_name" == "--all" ]]
then
find_all_wrappers "${environment_identifier}"
else
echo "${binary_name}"
fi
done | sort -u
)
fi
# For each binary, we want to generate the wrapper / symlink
# it to the existing wrapper if needed.
for binary_name in "${binaries[@]}"
do
file_name="$rvm_wrappers_path/${environment_identifier}/${binary_name##*\/}"
file_name=${file_name// /_}
if
[[ -f "$file_name" || -f "$binary_name" ]]
then
if [[ ! -f "$file_name" && -f "$binary_name" ]]
then gem wrappers "$binary_name"
fi
case "${prefix:-}" in
(--no-prefix) destination="$rvm_bin_path/${binary_name##*\/}" ;;
("") destination="$rvm_bin_path/${binary_name##*\/}-${environment_identifier}" ;;
(*) destination="$rvm_bin_path/${prefix}_${binary_name##*\/}" ;;
esac
else
rvm_warn "Could not find file '$binary_name' nor '$file_name'."
destination=""
fi
if
[[ -n "$destination" ]]
then
destination="${destination// /_}"
destination="${destination//ruby-ruby-/ruby-}"
if
[[ -s "$destination" ]]
then
\rm -f "$destination"
fi
ln -sf "$file_name" "$destination"
fi
done