Compare commits

..

No commits in common. "d5ed3d209d110fa9e1f703370b370a1dcb65adff" and "1fb4bcac81400eea02fc875ac9aeed7c8f307cb8" have entirely different histories.

2 changed files with 22 additions and 112 deletions

View file

@ -28,12 +28,6 @@ bootstrap file :
dotinstall uninstall bootstrap dotinstall uninstall bootstrap
``` ```
Or update with `update` even in git mode
```
dotinstall update bootstrap
```
## Boostrap file syntax ## Boostrap file syntax
`bootstrap` is a simple bash script sourced by `dotinstall`. The `bootstrap` `bootstrap` is a simple bash script sourced by `dotinstall`. The `bootstrap`
@ -134,23 +128,6 @@ define_env "NOTMUCH_CONFIG" "~/.config/notmuch"
displayed. displayed.
- `OVERWRITE_FILE` : do the same with file - `OVERWRITE_FILE` : do the same with file
## Return code
This script return 0 if there is not error.
- **1** : no bootstrap specified.
- **2** : boostrap file not found
### Git relative error codes
- **20** : can't clone dotfile git repository.
- **24** : can't update dotfile git repository.
- **25** : local git repository does not exist.
### Script relative error code
- **128** : a binary checked by `chek_bin()` is not present
## Licence ## Licence
This software is licenced under the GNU-GPL 3 licence, you can found a copy of This software is licenced under the GNU-GPL 3 licence, you can found a copy of

View file

@ -2,12 +2,10 @@
# Personnal Dotfiles install script # Personnal Dotfiles install script
BIN_DIRECTORY="${HOME}/.local/bin" BIN_DIRECTORY="${HOME}/.local/bin/"
LIB_DIRECTORY="${HOME}/.local/lib" LIB_DIRECTORY="${HOME}/.local/lib/"
SYD_DIRECTORY="${HOME}/.config/systemd/user" SYD_DIRECTORY="${HOME}/.config/systemd/user"
CACHE_DIR="${HOME}/.cache/dotinstall" DOTREPO="${HOME}/.config/dotrepo/"
DOTREPO="${HOME}/.config/dotrepo"
ENV_FILE="${HOME}/.config/environment" ENV_FILE="${HOME}/.config/environment"
# DEFAULT VALUES # DEFAULT VALUES
@ -16,7 +14,6 @@ OVERWRITE_FILE=0
repository="" repository=""
install=1 install=1
update=0
usage () usage ()
{ {
@ -150,8 +147,7 @@ private:create_symblink ()
private:clone_repository () private:clone_repository ()
{ {
# Clone a git repository and test if it has a bootstrap file # Clone a git repository and test if it has a bootstrap file
# $1 url # $* url
# $2 local repository
# return : local directory # return : local directory
local ret local ret
@ -159,19 +155,6 @@ private:clone_repository ()
[[ $? -ne 0 ]] && die "Can't clone_repository : $ret" 20 0 [[ $? -ne 0 ]] && die "Can't clone_repository : $ret" 20 0
} }
private:update_repository ()
{
# Update a git repository
# $1 : local repository
[ ! -d "$1" ] && die "Git update : directory $1 does not exist" 25 0
local current_dir=$(pwd)
local ret
cd "$1"
ret=$(git pull 2>&1)
[[ $? -ne 0 ]] && die "Can't update repository : $ret" 24 0
}
process_dirs () { process_dirs () {
# Process a directory than contains subdir, create symblink from each subdir # Process a directory than contains subdir, create symblink from each subdir
@ -183,7 +166,7 @@ process_dirs () {
local dest="${repository}/$1" local dest="${repository}/$1"
printf "\nProcess directory %s\n" "$1" printf "\nProcess directory %s\n" "$1"
[ ! -d "$dest" ] && { error " -> source is not a directory $dest"; return; } [ ! -d "$dest" ] && { 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 d while read d
@ -326,82 +309,32 @@ define_env ()
## create bin directory ## create bin directory
[ ! -d $BIN_DIRECTORY ] && mkdir -p $BIN_DIRECTORY || printf "bin exist\n" [ ! -d $BIN_DIRECTORY ] && mkdir -p $BIN_DIRECTORY || printf "bin exist\n"
[ ! -d $CACHE_DIR ] && mkdir -p $CACHE_DIR || printf "cache exist\n"
# define mode : install, uninstall or update
case $1 in
"uninstall")
install=0
printf "Activate uninstall mode\n"
shift
;;
"update") # Test parameters : we need to know if it's a git repo or a file
update=1; [[ $1 == "uninstall" || $1 == "-u" ]] && { install=0; printf "Activate uninstall mode\n"; shift; }
printf "Activate update mode\n" [ "$*" = "" ] && die "You must specify a bootstrap file" 10 1
shift
;;
esac
[ "$*" = "" ] && die "You must specify a bootstrap file or repo" 1 1
if [[ $* =~ ^https://.*\.git$ || $* =~ ^ssh://.*\.git$ ]] if [[ $* =~ ^https://.*\.git$ || $* =~ ^ssh://.*\.git$ ]]
then then
check_bin "git" bin_check "git"
# Check # Check
localrepo="${DOTREPO}/$(basename $* .git)" localdir="${DOTREPO}/$(basename $* .git)"
if [ $update -eq 1 ] [ -d "$localdir" ] && die "destination folder for git repository already exist" 21 0
private:clone_repository "$*" "$localdir"
if [ -f "${localdir}/bootstrap" ]
then then
private:update_repository "$localrepo" $0 "${localdir}/bootstrap"
exit $?
else else
if [ $install -eq 1 ] die "Can't find a \`boostrap\` file in ${repo}" 22 0
then
private:clone_repository "$*" "$localrepo"
fi fi
fi
bootstrap_file="${localrepo}/bootstrap"
else else
bootstrap_file="$*" [ ! -f "$*" ] && die "$* does not exist" 10 1
private:get_bootstrap_path "$*"
# Include bootstrap
source $*
fi fi
[ ! -f "$bootstrap_file" ] && die "$bootstrap_file does not exist" 2 1
private:get_bootstrap_path "$bootstrap_file"
cache_file="${CACHE_DIR}/$(echo $repository | tr '/' '_')"
if [ $update -eq 1 ]
then
# Update mode
if [ -f "$cache_file" ]
then
if [ $(diff "$bootstrap_file" "$cache_file" > /dev/null; echo $?;) -eq 0 ]
then
printf "There is no difference between cached copy and the bootstrap file\n";
exit 0
else
# Uninstall old files
install=0
source "$cache_file"
rm "$cache_file"
install=1
fi
else
error "Can't found cached copy of bootstrap file, just install"
fi
fi
cp "$bootstrap_file" "$cache_file"
# Include bootstrap
source "$bootstrap_file"
# remove cached file and repo if uninstall
if [ $install -eq 0 ]
then
printf "\nRemove files for complete uninstall\n"
rm $cache_file
rm -rf $repository
fi
exit 0 exit 0