forked from RIFTIO/RIFT.ware
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rift-bashrc
202 lines (170 loc) · 5.2 KB
/
rift-bashrc
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
#!/bin/bash
#
# (c) Copyright RIFT.io, 2013-2016, All Rights Reserved
#
# Define the root and workspace paths by the location of this script, which must
# be at the top level of the repository.
export RIFT_WORKSPACE=$(basename $RIFT_ROOT)
######### PUBLIC FUNCTIONS #####################################################
#
# These are functions that the user can alias or override from their bashrc (so
# they should proceed sourcing the users .bashrc file). Any function that is
# consider essential to code or work performed in a RIFT workspace should be
# defined as a private function.
#
# Updates the RIFT environmental variables
function rift-refresh-env(){
/usr/bin/env python3 ${RIFT_ROOT}/rift_env.py
export RIFT_CONFIG=${RIFT_ROOT}/.build/.rift-env
source ${RIFT_CONFIG}
}
# Changes to the root directory
function rift-goto-root(){
cd ${RIFT_ROOT}
}
# SSH to remote host and automatically start in equivalent rift-shell
function rift-ssh(){
sudo=""
if [ $# -gt 0 -a $1 == "--sudo" ]; then
sudo="sudo"
shift
fi
include_build_dirs=""
if [ $RIFT_INCLUDE_BUILD_DIRS == 1 ]; then
include_build_dirs="--include-build-dirs"
fi
ssh $@ -t -t "cd ${RIFT_ROOT}; ${sudo} RIFT_ROOT_SAVE_OLDPWD=${PWD} ./rift-shell -e ${include_build_dirs}"
}
function cdtop() {
rift-goto-root
}
# Changes to the .install directory
function cdinstall() {
cd ${RIFT_ROOT}/.install
}
# function to switch to build directory from source dir
function cdbuild() {
OLDDIR=`pwd`
NEWDIR=${RIFT_ROOT}
[ "$NEWDIR" == "/" ] && return
RELATIVE_PATH=${OLDDIR:${#NEWDIR}+1}
if [[ $RELATIVE_PATH == .build* ]] ; then
echo "already in .build directory"
return
fi
array=(${RELATIVE_PATH//\// })
SUBMODULE=""
for i in "${!array[@]}"
do
if [[ $SUBMODULE != "" ]] ; then
SUBMODULE="$SUBMODULE/${array[i]}"
else
SUBMODULE=${array[i]}
fi
if [ -e ${NEWDIR}/${SUBMODULE}/.git ] ; then
break;
fi
done
SUBDIR=${SUBMODULE//\//_}
SUBDIR=${SUBDIR/modules_/}
PROJECTDIR=${RELATIVE_PATH:${#SUBMODULE}+1}
echo $NEWDIR/.build/${SUBMODULE}/src/${SUBDIR}-build/$PROJECTDIR
cd $NEWDIR/.build/${SUBMODULE}/src/${SUBDIR}-build/$PROJECTDIR
}
# function to switch to src directory from build directory
function cdsrc() {
OLDDIR=`pwd`
NEWDIR=${RIFT_ROOT}
[ "$NEWDIR" == "/" ] && return
RELATIVE_PATH=${OLDDIR:${#NEWDIR}+1}
if [[ $RELATIVE_PATH != .build* ]] ; then
echo "already in source directory"
return
fi
RELATIVE_PATH=${RELATIVE_PATH/.build\/}
array=(${RELATIVE_PATH//\// })
SUBMODULE=""
for i in "${!array[@]}"
do
if [[ $SUBMODULE != "" ]] ; then
SUBMODULE="$SUBMODULE/${array[i]}"
else
SUBMODULE=${array[i]}
fi
if [ -e ${NEWDIR}/${SUBMODULE}/.git ] ; then
break;
fi
done
SUBDIR=${SUBMODULE//\//_}
SUBDIR=${SUBDIR/modules_/}
PROJECTDIR=${RELATIVE_PATH:${#SUBMODULE}+1}
PROJECTDIR=${PROJECTDIR/src\/$SUBDIR-build\/}
echo $NEWDIR/${SUBMODULE}/$PROJECTDIR
cd $NEWDIR/${SUBMODULE}/$PROJECTDIR
}
######### PRIVATE FUNCTIONS ####################################################
#
# These are functions that should not be overwritten by the user. Prepend the
# function by a double underscore to mark it as a private function.
#
__rw_restore_saved_env_vars() {
# Iterate on all current environment variables
while read env_line; do
# Split the envvar key and value by =
IFS='=' read -a env_key_val <<< "${env_line}";
env_key="${env_key_val[0]}"
env_val="${env_key_val[1]}"
# If the key starts with the save prefix, then restore the
# original environment variable.
if [[ ${env_key} == RIFT_ROOT_SAVE_* ]]; then
# Strip the prefix
saved_key=${env_key#"RIFT_ROOT_SAVE_"}
# Restore the saved environment variable
export "${saved_key}"="${env_val}"
fi
done < <(env)
}
__rw_add_paths() {
# Add PATH for quick access to harness
export PATH="${PATH}:${RIFT_INSTALL}/usr/rift/systemtest/harness"
}
# Source the functions in rift-prompt so that they are available if anyone wants
# to use them from their .bashrc or .bash_profile
source ${RIFT_ROOT}/rift-prompt
# Set a make alias to run parallel builds.
alias rwmake="make -j16"
if [ -n "${PS1}" ]; then
if [ -f "${HOME}"/.bash_profile ]; then
source ${HOME}/.bash_profile
fi
else
# Source the user bashrc, if it is available
if [[ -f ${HOME}/.bashrc ]]; then
source ${HOME}/.bashrc
fi
fi
# Set a consistent umask across all environments.
# This was done because some installs (confd), use
# explicit install permissions. And if there install permissions
# conlifct with default umask, we get RPM install errors from
# build cache. See RIFT-2745
umask 002
# Prevent running as root from creating files in the workspace
# that the real user cannot delete
if [ $(id -u) == "0" ]; then
umask 000
fi
__rw_restore_saved_env_vars
if [ -z "${RIFT_CONFIG}" ]; then
rift-refresh-env
else
source ${RIFT_CONFIG}
fi
if [ $RIFT_INCLUDE_BUILD_DIRS == 0 ]; then
export GI_TYPELIB_PATH=$(echo $GI_TYPELIB_PATH | tr ':' '\n' | grep -v .build | tr '\n' ':')
export PLUGINDIR=$(echo $PLUGINDIR | tr ':' '\n' | grep -v .build | tr '\n' ':')
fi
if [ -f "${HOME}/.riftshell.rc" ]; then
source ${HOME}/.riftshell.rc
fi
__rw_add_paths