Compare commits

..

1 commit

Author SHA1 Message Date
b8d999d918 Replace check_bin() by reauired_commands in main 2019-11-24 23:59:38 +01:00
2 changed files with 84 additions and 180 deletions

View file

@ -57,7 +57,7 @@ This function check if binary file is avaible in the `PATH`.
required_commands "ls mv git" required_commands "ls mv git"
``` ```
#### link_dirs #### conf_process_dirs
Process a directory that contains others directories an symblink them to the Process a directory that contains others directories an symblink them to the
destination folder : destination folder :
@ -68,11 +68,10 @@ destination folder :
- **return** : no value, exit the funtion if there is an error on path - **return** : no value, exit the funtion if there is an error on path
``` ```
link_dirs "${repository}/config" "${HOME}/.config" conf_process_dirs "${repository}/config" "${HOME}/.config"
``` ```
Old function `conf_process_dirs` still avaiable for compatibility.
#### link_files #### conf_process_files
Process a directory than contains files and symblink them to the destination Process a directory than contains files and symblink them to the destination
folder : folder :
@ -83,11 +82,9 @@ folder :
- **return** : no value, exit the funtion if there is an error on path - **return** : no value, exit the funtion if there is an error on path
``` ```
link_files "${repository}/zshrc" "${HOME}" conf_process_dirs "${repository}/zshrc" "${HOME}"
``` ```
Old function `conf_process_files` still avaiable for compatibility
#### bin_install #### bin_install
Symblink an executable file to the `~/.local/bin` folder. Symblink an executable file to the `~/.local/bin` folder.

View file

@ -32,18 +32,11 @@ die ()
# $1 : error message before quit # $1 : error message before quit
# $2 : exit code - default 99 # $2 : exit code - default 99
# $3 : 1 if print usage # $3 : 1 if print usage
local message
local code
local usage
message="$1" [ -z $2 ] && $2=99
code="$2" printf "\e[31mFATAL : %s\e[0m\n" "$1"
usage="$3" [ $3 == 1 ] && usage
exit $2
[ -z "$code" ] && code=99
printf "\e[31mFATAL : %s\e[0m\n" "$message"
[ $usage -eq 1 ] && usage
exit $code
} }
error () error ()
@ -51,9 +44,7 @@ error ()
# print error message in red # print error message in red
# $@ : message # $@ : message
local message printf "\e[31m%s\e[0m\n" "$*"
message="$*"
printf "\e[31m%s\e[0m\n" "$message"
} }
private:get_bootstrap_path () private:get_bootstrap_path ()
@ -61,22 +52,15 @@ private:get_bootstrap_path ()
# this function return the absolute path of the bootstrap file # this function return the absolute path of the bootstrap file
# $* : path of bootstrap file # $* : path of bootstrap file
local path
path="$*"
# If the path begin with /, this is an absolute part # If the path begin with /, this is an absolute part
if [[ "$path" =~ ^/[[:graph:]]*$ ]] if [[ "$*" =~ ^/[[:graph:]]*$ ]]
then then
repository="$(dirname "$path")" repository="$(dirname $*)"
return return
fi fi
local relative_path local relative_path="$*"
local current_path local current_path="$(pwd)"
current_path="$(pwd)"
relative_path="$path"
while [[ $relative_path =~ ^../[[:graph:]]*$ ]] while [[ $relative_path =~ ^../[[:graph:]]*$ ]]
do do
printf "We found ..\n" printf "We found ..\n"
@ -91,21 +75,18 @@ private:remove_symblink()
# Remove a symblink # Remove a symblink
# $* source # $* source
local source
source="$*"
printf " -> Remove symblink %s : " "$symblink" printf " -> Remove symblink %s : " "$symblink"
if [ -L "$source" ] if [ -L "$*" ]
then then
local ret; local ret;
ret=$(rm "$*" 2>&1) ret=$(rm "$*" 2>&1)
[ $? -ne 0 ] && { error "can't remove : $ret"; return; } [ $? -ne 0 ] && { error "can't remove : $ret"; return; }
elif [ ! -f "$source" ] elif [ ! -f "$*" ]
then then
error "$source not exist" error "$* not exist"
return return
else else
error "$source is not a symblink" error "$* is not a symblink"
fi fi
printf "\e[32mdone\e[0m\n" printf "\e[32mdone\e[0m\n"
} }
@ -116,11 +97,8 @@ private:create_symblink ()
# $1: source # $1: source
# $2: destination # $2: destination
local source local source="$1"
local dest local dest="$2"
source="$1"
dest="$2"
printf " -> Create a symblink from %s : " "$source" printf " -> Create a symblink from %s : " "$source"
@ -138,11 +116,11 @@ private:create_symblink ()
error "can't overwrite destination" error "can't overwrite destination"
return return
else else
rm -rf "$dest" rm -rf $dest
fi fi
elif [ -e "$dest" ] elif [ -e $dest ]
then then
error "destin ation exist but is not a directory" error "destination exist but is not a directory"
return return
fi fi
@ -176,14 +154,8 @@ private:clone_repository ()
# $2 local repository # $2 local repository
# return : local directory # return : local directory
local url
local repo
local ret local ret
ret=$(git clone -q "$1" "${2}" 2>&1)
url="$1"
repo="$2"
ret=$(git clone -q "$url" "$repo" 2>&1)
[[ $? -ne 0 ]] && die "Can't clone_repository : $ret" 20 0 [[ $? -ne 0 ]] && die "Can't clone_repository : $ret" 20 0
} }
@ -192,53 +164,15 @@ private:update_repository ()
# Update a git repository # Update a git repository
# $1 : local repository # $1 : local repository
local repo [ ! -d "$1" ] && die "Git update : directory $1 does not exist" 25 0
repo="$1" local current_dir=$(pwd)
[ ! -d "$repo" ] && die "Git update : directory $1 does not exist" 25 0
local current_dir
local ret local ret
cd "$1"
current_dir=$(pwd)
cd "$repo" || die "Can't go to directory ${repo}"
ret=$(git pull 2>&1) ret=$(git pull 2>&1)
[[ $? -ne 0 ]] && die "Can't update repository : $ret" 24 0 [[ $? -ne 0 ]] && die "Can't update repository : $ret" 24 0
cd "$current_dir" || die "Can't return to directory $current_dir"
} }
link_directory () { process_dirs () {
# Create a symblink to directory inside an other directory
#
# $1: source directory
# $2: destination directory
local source
source="$1"
local dest
dest="$2"
printf "\nProcess directory %s\n" "$source"
if [[ ! $source =~ ^$repository ]]
then
echo "Add repo before source"
source="${repository}/$source"
fi
[ ! -d "$source" ] && { error " -> source is not a directory"; return; }
[ ! -d "$dest" ] && { error " -> destination is not a directory"; return; }
if [ $install -eq 1 ]
then
private:create_symblink "$source" "${dest}/$(basename "$d")"
else
local symblink="${dest}/$(basename "$d")"
private:remove_symblink "$symblink"
fi
}
link_directories () {
# Process a directory than contains subdir, create symblink from each subdir # Process a directory than contains subdir, create symblink from each subdir
# to the destination. # to the destination.
@ -246,60 +180,53 @@ link_directories () {
# $1: source directory # $1: source directory
# $2: destination directory # $2: destination directory
local source local source="${repository}/$1"
source="$1" local dest="$2"
local dest
dest="$2"
printf "\nProcess directory %s\n" "$source" printf "\nProcess directory %s\n" "$source"
while read -r d [ ! -d "$source" ] && { error " -> source is not a directory"; return; }
[ ! -d "$dest" ] && { error " -> destination is not a directory"; return; }
while read d
do do
link_directory "$d" "${dest}" if [ $install -eq 1 ]
done < <(ls -d -1 "${repository}/${source}"/*/) then
private:create_symblink "$d" "${dest}/$(basename "$d")"
else
local symblink="${dest}/$(basename ${d})"
private:remove_symblink "$symblink"
fi
done < <(ls -d -1 "${source}"/*/)
} }
process_dirs () { process_files () {
printf "This function is deprecated, use link_directories instead.\n"
link_directories $@
}
link_files () {
# Process a directory than contains config files, create symblink from each # Process a directory than contains config files, create symblink from each
# files to the destination. # files to the destination.
# $1: source directory # $1: source directory
# $2: destination directory # $2: destination directory
local source local source="${repository}/$1"
local dest local dest="$2"
printf "Process files from directory %s:\n" "$source"
dest="$2"
source="${repository}/$1"
printf "\nProcess files from directory %s:\n" "$source"
[ ! -d "$source" ] && { error " -> source is not a directory"; return; } [ ! -d "$source" ] && { error " -> source is not a directory"; return; }
[ ! -d "$dest" ] && { error " -> destination is not a directory"; return; } [ ! -d "$dest" ] && { error " -> destination is not a directory"; return; }
while read -r d while read d
do do
if [ $install -eq 1 ] if [ $install -eq 1 ]
then then
private:create_symblink "${source}/$d" "${dest}/$(basename "$d")" private:create_symblink "${source}/$d" "${dest}/$(basename "$d")"
else else
local symblink local symblink="${2}/$(basename ${d})"
symblink="${dest}/$(basename ${d})"
private:remove_symblink "$symblink" private:remove_symblink "$symblink"
fi fi
done < <(ls -A -1 "$source") done < <(ls -A -1 "$source")
} }
process_files () {
printf "process_files is deprecated, use link_files instead\n"
link_files $@
}
install_service () install_service ()
{ {
@ -307,43 +234,32 @@ install_service ()
# $1 file # $1 file
# $2 1 to Activate the service # $2 1 to Activate the service
local source local source="${repository}/$1"
local activate
source="${repository}/$1"
activate=$2
[ -z "$activate" ] && activate=0
local ret local ret
[ ! -f "$source" ] && { error "$1 not found"; return; } [ ! -f "$source" ] && { error "$1 not found"; return; }
local basename=$(basename "$source")
local basename
basename=$(basename "$source")
if [ $install -eq 1 ] if [ $install -eq 1 ]
then then
printf "\nInstall service %s :\n" "$source" printf "\nInstall service %s :\n" "$source"
private:create_symblink "$source" "${SYD_DIRECTORY}/${basename}" private:create_symblink "$source" "${SYD_DIRECTORY}/${basename}"
# activate service # activate service
if [ $activate -eq 1 ] if [ $2 ]
then then
printf " -> Activate %s :" "$basename" printf " -> Activate $basename : "
ret=$(systemctl --user enable "${basename}" 2>&1) ret=$(systemctl --user enable ${basename} 2>&1)
[[ $? -ne 0 || ! $(systemctl --user is-enabled "$basename") ]] && { error "$ret"; return; } [[ $? -ne 0 || ! $(systemctl --user is-enabled $basename) ]] && { error "$ret"; return; }
printf "\e[32mdone\e[0m\n" printf "\e[32mdone\e[0m\n"
fi fi
else else
printf "\nUninstall service %s :\n" "$source" printf "\nUninstall service %s :\n" "$source"
#Deactivate service #Deactivate service
if [ $activate -eq 1 ] if [ $1 ]
then then
printf " -> Deactivate %s : " "$basename" printf " -> Deactivate $basename : "
ret=$(systemctl --user disable "${basename}" 2>&1) ret=$(systemctl --user disable ${basename} 2>&1)
[[ $? -ne 0 ]] && { error "$ret"; return; } [[ $? -ne 0 ]] && { error "$ret"; return; }
printf "\e[32mdone\e[0m\n" printf "\e[32mdone\e[0m\n"
else
private:remove_symblink "${SYD_DIRECTORY}/${basename}"
fi fi
fi fi
@ -354,16 +270,13 @@ required_commands ()
# Check if an executable exist # Check if an executable exist
# $1 executables separated with spaces # $1 executables separated with spaces
local bins
bins="$*"
# if uninstall, we don't need to process required commands. # if uninstall, we don't need to process required commands.
[ $install -eq 0 ] && return [ $install -eq 0 ] && return
printf "Checking required programs :\n" printf "Checking required programs :\n"
for bin in $bins for p in $1
do do
printf " -> %s:" "$bin" printf " -> %s:" "$p"
command -v "$bin" >/dev/null 2>&1 || die "not found" 128 command -v $p >/dev/null 2>&1 || die "not found" 128
printf " \e[32mfound\e[0m\n" printf " \e[32mfound\e[0m\n"
done done
} }
@ -374,10 +287,8 @@ install_bin ()
# Via a symbolic link # Via a symbolic link
# $1 : path to script # $1 : path to script
local source local source="${repository}/${1}"
source="${repository}/${1}" local dest="${BIN_DIRECTORY}/$(basename $1)"
local dest
dest="${BIN_DIRECTORY}/$(basename "$1")"
printf "\nProcess executable :\n" printf "\nProcess executable :\n"
[ ! -f "$source" ] && { error "$source is not a file"; return; } [ ! -f "$source" ] && { error "$source is not a file"; return; }
@ -397,27 +308,21 @@ define_env ()
# on uninstall mode # on uninstall mode
# $1 variable name # $1 variable name
# $2 value # $2 value
local name
local value
name="$1"
value="$2"
[ -z "$name" ] && { error "You must define a name"; return; }
[ ! -f "$ENV_FILE" ] && touch "$ENV_FILE"
[ -z $1 ] && { error "You must define a name"; return; }
[ ! -f $ENV_FILE ] && touch $ENV_FILE
if [ $install -eq 1 ] if [ $install -eq 1 ]
then then
printf "\nCreate an environment variable %s : " "$name" printf "\nCreate an environment variable %s : " "$1"
[ $(grep -c -m 1 "$name" "$ENV_FILE") -eq 1 ] && { error "already exist"; return; } [ $(grep -c -m 1 $1 $ENV_FILE) -eq 1 ] && { error "already exist"; return; }
local line local line
line="export ${name}=\"${value}\"" line="export ${1}=\"${2}\""
echo "$line" >> "$ENV_FILE" echo "$line" >> $ENV_FILE
printf "\e[32mdone\e[0m\n" printf "\e[32mdone\e[0m\n"
else else
printf "\nRemove an environ ment variable %s : " "$1" printf "\nRemove an environment variable %s : " "$1"
[ $(grep -c -m 1 "$1" "$ENV_FILE") -eq 0 ] && { error "not exist"; return; } [ $(grep -c -m 1 $1 $ENV_FILE) -eq 0 ] && { error "not exist"; return; }
sed -i "/^export $1=*/d" "$ENV_FILE" sed -i "/^export $1=*/d" $ENV_FILE
printf "\e[32mdone\e[0m\n" printf "\e[32mdone\e[0m\n"
fi fi
@ -449,7 +354,7 @@ then
required_commands "git" required_commands "git"
# Check # Check
localrepo="${DOTREPO}/$(basename "$*" .git)" localrepo="${DOTREPO}/$(basename $* .git)"
if [ $update -eq 1 ] if [ $update -eq 1 ]
then then
private:update_repository "$localrepo" private:update_repository "$localrepo"
@ -467,22 +372,23 @@ fi
[ ! -f "$bootstrap_file" ] && die "$bootstrap_file does not exist" 2 1 [ ! -f "$bootstrap_file" ] && die "$bootstrap_file does not exist" 2 1
private:get_bootstrap_path "$bootstrap_file" private:get_bootstrap_path "$bootstrap_file"
cache_file="${CACHE_DIR}/$(echo "$repository" | tr '/' '_')" cache_file="${CACHE_DIR}/$(echo $repository | tr '/' '_')"
if [ $update -eq 1 ] if [ $update -eq 1 ]
then then
# Update mode # Update mode
if [ -f "$cache_file" ] if [ -f "$cache_file" ]
then then
if [ $(diff "$bootst rap_file" "$cache_file" > /dev/null; echo $?;) -eq 0 ] if [ $(diff "$bootstrap_file" "$cache_file" > /dev/null; echo $?;) -eq 0 ]
then then
printf "There is no difference between cached copy and the bootstrap file\n"; printf "There is no difference between cached copy and the bootstrap file\n";
exit 0 exit 0
else else
# for updating the dotfile repo, we need to uninstall it then # for updating the dotfile repo, we need to uninstall it then
# install it. We need the cached copy for unistall. # install it. We need the cached copy for unistall.
install=0 install=0
source "$cache_file" source "$cache_file"
rm "$cache_file"
install=1 install=1
fi fi
else else
@ -499,7 +405,8 @@ source "$bootstrap_file"
if [ $install -eq 0 ] if [ $install -eq 0 ]
then then
printf "\nRemove files for complete uninstall\n" printf "\nRemove files for complete uninstall\n"
rm "$cache_file" rm $cache_file
rm -rf $repository
fi fi
exit 0 exit 0