-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patherlvm-installer
executable file
·207 lines (172 loc) · 7.17 KB
/
erlvm-installer
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#!/usr/bin/env bash
erlvm_fatal() {
tput sgr0
tput setaf 1 # Red color
echo "[ERROR] $1" >&2
tput sgr0
exit 1
}
erlvm_error() {
tput sgr0
tput setaf 1 # Red color
echo "[ERROR] $1" >&2
tput sgr0
}
erlvm_warn() {
tput sgr0
tput setaf 3 # Yellow color
echo "[WARN] $1" >&1
tput sgr0
}
erlvm_info() {
tput sgr0
tput setaf 2 # Green color
echo "[INFO] $1" >&1
tput sgr0
}
erlvm_dev_info() {
tput sgr0
tput setaf 2 # Green color
if [[ -n $ERLVM_DEV ]]; then
echo "[INFO] $(date +'%Y-%m-%dT%H:%M:%S%z'): $@" >&1
else
echo "[INFO] $(date +'%Y-%m-%dT%H:%M:%S%z'): $@" > /dev/null
fi
tput sgr0
}
erlvm_echo() {
tput sgr0
tput setaf 4 # Blue color
echo "$1" >&1
tput sgr0
}
erlvm_success_echo() {
tput sgr0
tput setaf 5
echo "$1" >&1
tput sgr0
}
erlvm_message() {
tput sgr0
tput setaf 2 # Green color
echo "$1" >&1
tput sgr0
}
update_profile() {
[ -f "$1" ] || return 1
grep -F "$source_line" "$1" > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "\n$source_line" >> "$1"
fi
}
welcome_to_erlvm() {
v1=${ERLVM_VERSION}
erlvm_echo "#######################################################################"
erlvm_echo "# #"
erlvm_echo "# Congratulations! erlvm v${v1} has been installed successfully. #"
erlvm_echo "# Welcome to use erlvm tool to manage your erlang versions! #"
erlvm_echo "# #"
erlvm_echo "#######################################################################"
cat << "EOF"
,--, ____
,--.'| ,' , `.
__ ,-.| | : ,-+-,.' _ |
,' ,'/ /|: : ' .---. ,-+-. ; , ||
,---. ' | |' || ' | /. ./| ,--.'|' | ||
/ \ | | ,'' | | .-' . ' || | ,', | |,
/ / | ' : / | | : /___/ \: || | / | |--'
. ' / | | | ' ' : |__. \ ' .| : | | ,
' ; /| ; : | | | '.'|\ \ '| : | |/
' | / | | , ; ; : ; \ \ | | |`-'
| : | ---' | , / \ \ || ;/
\ \ / ---`-' '---" '---' by keonjeo
`----'
EOF
}
BRANCH=${1:-master}
ERLVM_DEST=${2:-$HOME}
ERLVM_NAME="erlvm"
SRC_REPO=${SRC_REPO:-https://github.com/keonjeo/erlvm.git}
[[ "$ERLVM_DEST" = "$HOME" ]] && ERLVM_NAME=".erlvm"
[[ -d "$ERLVM_DEST/$ERLVM_NAME" ]] && erlvm_warn "Already installed! Remove old installation by running the following command:
rm -rf $ERLVM_DEST/$ERLVM_NAME"
[[ -d "$ERLVM_DEST/$ERLVM_NAME" ]] && exit 1
[ -d "$ERLVM_DEST" ] || mkdir -p "$ERLVM_DEST" > /dev/null 2>&1 || erlvm_fatal "Failed to create $ERLVM_DEST"
[ -z "$(which git)" ] && erlvm_fatal "Sorry guys. I can't find your git tool in your system.
Debian / Ubuntu : sudo apt-get install git
Redhat / Centos : sudo yum install git
Mac OSX : sudo brew install git
"
[ -z "$(which wget)" ] && erlvm_fatal "Sorry guys. I can't find your wget tool in your system.
Debian / Ubuntu : sudo apt-get install wget
Redhat / Centos : sudo yum install wget
Mac OSX : sudo brew install wget
"
GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
if [[ -z "$GIT_ROOT" || "$(basename "$GIT_ROOT")" != "erlvm" ]];then
echo "Cloning from $SRC_REPO to $ERLVM_DEST/$ERLVM_NAME"
git clone --quiet "$SRC_REPO" "$ERLVM_DEST/$ERLVM_NAME" 2> /dev/null ||
erlvm_fatal "Failed to clone from $SRC_REPO into $ERLVM_DEST/$ERLVM_NAME"
else
# Generally speaking, it is impossible for users to reach this branch.
# For developer to execute erlvm-installer script on the local.
erlvm_dev_info "==============================="
erlvm_dev_info "ERLVM_DEST => $ERLVM_DEST"
erlvm_dev_info "GIT_ROOT => $GIT_ROOT"
erlvm_dev_info "==============================="
if [[ $ERLVM_DEST == *"$GIT_ROOT"* ]]; then # means that you want to install erlvm tool into GIT_ROOT directory
ln -s "$GIT_ROOT" "$ERLVM_DEST"
else
cp -r "$GIT_ROOT" "$ERLVM_DEST/$ERLVM_NAME"
fi
fi
pushd . > /dev/null
cd "$ERLVM_DEST/$ERLVM_NAME" && git checkout --quiet "$BRANCH" 2> /dev/null
[[ $? -ne 0 ]] && (erlvm_fatal "Failed to checkout $BRANCH branch")
popd > /dev/null
# backup .git directory if exosts .git directory
[ -d "$ERLVM_DEST/$ERLVM_NAME/.git" ] && mv "$ERLVM_DEST/$ERLVM_NAME/.git" "$ERLVM_DEST/$ERLVM_NAME/git.bak"
# Create some directories for ERLVM_HOME
[[ ! -d $ERLVM_DEST/$ERLVM_NAME/erlang ]] && mkdir -p $ERLVM_DEST/$ERLVM_NAME/erlang
[[ ! -d $ERLVM_DEST/$ERLVM_NAME/erlang_tars ]] && mkdir -p $ERLVM_DEST/$ERLVM_NAME/erlang_tars
[[ ! -d $ERLVM_DEST/$ERLVM_NAME/erlang_versions ]] && mkdir -p $ERLVM_DEST/$ERLVM_NAME/erlang_versions
[[ ! -d $ERLVM_DEST/$ERLVM_NAME/erlvm_config ]] && mkdir -p $ERLVM_DEST/$ERLVM_NAME/erlvm_config
# Create the configuration file for ERLVM_HOME
[[ -f $ERLVM_DEST/$ERLVM_NAME/erlvm_config/erlang_default ]] && rm -f $ERLVM_DEST/$ERLVM_NAME/erlvm_config/erlang_default
touch $ERLVM_DEST/$ERLVM_NAME/erlvm_config/erlang_default
erlvm_dev_info "$ERLVM_DEST/$ERLVM_NAME/erlvm_config/erlang_default succesfully created"
[[ -f $ERLVM_DEST/$ERLVM_NAME/erlvm_config/erlang_current ]] && rm -f $ERLVM_DEST/$ERLVM_NAME/erlvm_config/erlang_current
touch $ERLVM_DEST/$ERLVM_NAME/erlvm_config/erlang_current
erlvm_dev_info "$ERLVM_DEST/$ERLVM_NAME/erlvm_config/erlang_current succesfully created"
source_line="[[ -s \"${ERLVM_DEST}/$ERLVM_NAME/scripts/erlvm\" ]] && source \"${ERLVM_DEST}/$ERLVM_NAME/scripts/erlvm\""
source_file="${ERLVM_DEST}/$ERLVM_NAME/scripts/erlvm"
if [ -z "$ERLVM_NO_UPDATE_PROFILE" ]; then
if [ -n "$ZSH_NAME" ]; then
update_profile "$HOME/.zshrc"
elif [ "$(uname)" == "Linux" ]; then
update_profile "$HOME/.bashrc" || update_profile "$HOME/.bash_profile"
elif [ "$(uname)" == "Darwin" ]; then
update_profile "$HOME/.profile" || update_profile "$HOME/.bash_profile"
fi
fi
if [ -z "$ERLVM_NO_UPDATE_PROFILE" ] && [ "$?" != "0" ]; then
erlvm_warn "Unable to locate profile settings file (Something like $HOME/.bashrc or $HOME/.bash_profile)"
erlvm_warn ""
erlvm_warn " You will have to manually add the following line:"
erlvm_warn ""
erlvm_warn " $source_line"
erlvm_warn ""
fi
echo "#!/usr/bin/env bash\n" > "$ERLVM_DEST/$ERLVM_NAME/scripts/erlvm"
echo "export ERLVM_ROOT=$ERLVM_DEST/$ERLVM_NAME" >> "$ERLVM_DEST/$ERLVM_NAME/scripts/erlvm"
echo "export ERLANG_ROOT=$ERLVM_DEST/$ERLVM_NAME/erlang" >> "$ERLVM_DEST/$ERLVM_NAME/scripts/erlvm"
echo "export ERLVM_ROOT_BACKUP=$ERLVM_DEST/$ERLVM_NAME.back" >> "$ERLVM_DEST/$ERLVM_NAME/scripts/erlvm"
echo ". \$ERLVM_ROOT/scripts/default_init" >> "$ERLVM_DEST/$ERLVM_NAME/scripts/erlvm"
[[ -s "$ERLVM_DEST/$ERLVM_NAME/scripts/erlvm" ]] && source "$ERLVM_DEST/$ERLVM_NAME/scripts/erlvm"
welcome_to_erlvm
erlvm_success_echo ""
erlvm_success_echo ""
erlvm_success_echo "Please restart your terminal session, or to get started execute the following command to make it effective."
erlvm_success_echo ""
erlvm_success_echo " source ${source_file} "
erlvm_success_echo ""