Dev: clean, little bugfixes, rewrites

This commit is contained in:
mrjk 2018-02-26 23:37:11 -05:00
parent e2c5939b12
commit 47da7fb7e0
5 changed files with 161 additions and 75 deletions

View File

@ -112,8 +112,8 @@ idm_core__enable ()
#set -x #set -x
# Local checks # Local checks
idm_validate id $id || idm_exit 1 ERR "You must provide an id" #idm_validate id $id || idm_exit 1 ERR "You must provide an id"
idm_validate id_config $id || idm_exit 1 ERR "Configuration '$id' does not exists" lib_id_has_config $id || idm_exit 1 ERR "Configuration '$id' does not exists"
# Check if workspace is enabled # Check if workspace is enabled
#idm_validate is_enabled $id #idm_validate is_enabled $id
@ -399,6 +399,7 @@ idm_exit_trap () {
idm_is_enabled () idm_is_enabled ()
{ {
lib_log DEPRECATED "call: idm_is enabled $@, use lib_id_is_enabled ${1-} instead" lib_log DEPRECATED "call: idm_is enabled $@, use lib_id_is_enabled ${1-} instead"
lib_trace
local id=${1} local id=${1}
idm_validate is_enabled $id idm_validate is_enabled $id
{ {
@ -411,7 +412,8 @@ idm_is_enabled ()
# DEPRECATRED, replaced by lib_id # DEPRECATRED, replaced by lib_id
idm_get () idm_get ()
{ {
lib_log DEPRECATED "all: idm_get $@, use lib_id_has_config instead" lib_log DEPRECATED "call: idm_get $@, use lib_id_has_config instead"
lib_trace
local item=$1 local item=$1
local value=${2-} local value=${2-}

View File

@ -148,7 +148,7 @@ lib_log ()
{ {
set +x set +x
[[ "${1-}" =~ ERR|WARN|TIP|NOTICE|INFO|DEBUG|RUN|CODE|DUMP ]] || [[ "${1-}" =~ ERR|WARN|TIP|NOTICE|INFO|DEBUG|RUN|CODE|DUMP|DEPRECATED|ASK ]] ||
{ {
lib_log ERR "Wrong message level while calling '${1-}'" lib_log ERR "Wrong message level while calling '${1-}'"
return 1 return 1
@ -178,7 +178,7 @@ lib_log ()
ERR) ERR)
color='\033[0;31m' color='\033[0;31m'
;; ;;
WARN|TIP) WARN|TIP|DEPRECATED)
color='\033[0;33m' color='\033[0;33m'
;; ;;
NOTICE) NOTICE)

View File

@ -16,8 +16,8 @@ idm_git_header ()
git_id_dir=$git_dir git_id_dir=$git_dir
git_id_work_tree=$git_work_tree git_id_work_tree=$git_work_tree
mkdir -p $git_id_dir $git_id_work_tree || mkdir -p $(dirname $git_dir) $(dirname $git_id_config) ||
idm_exit 1 ERR "Could not create dir: $git_id_dir $git_id_work_tree" idm_exit 1 ERR "Could not create dir: $(dirname $git_dir) $(dirname $git_id_config)"
} }
@ -128,7 +128,7 @@ idm_git__scan ()
lib_log INFO "There are the files we could add:" lib_log INFO "There are the files we could add:"
lib_git id status -s lib_git id status -s
lib_log PROMPT "Do you want to add these files to your repo?" lib_log ASK "Do you want to add these files to your repo?"
if idm_cli_timeout 1; then if idm_cli_timeout 1; then
lib_git id commit --file=- <<< "Add: Import $(hostname) data" || lib_git id commit --file=- <<< "Add: Import $(hostname) data" ||
@ -156,11 +156,12 @@ idm_git__ls ()
idm_git_header $id idm_git_header $id
# Check if it is a valid repo # Check if it is a valid repo
lib_git_is_repo id || if lib_git_is_repo id &> /dev/null; then
return 1 # Show files
lib_git id ls-files | sort | sed 's/^/ /'
# Show files else
lib_git id ls-files | sort | sed 's/^/ /' echo " Repository is absent"
fi
} }
idm_git__enable () idm_git__enable ()

View File

@ -109,10 +109,10 @@ idm_id__ls ()
local active local active
#set -x #set -x
for id in $(idm_get all_id); do for id in $(lib_id_get_all_id); do
# Check if id is valid # Check if id is valid
idm_validate id_config $id || continue lib_id_has_config $id || continue
# Detect if it is enalbed or not # Detect if it is enalbed or not
if [ "$id" == "${SHELL_ID-}" ]; then if [ "$id" == "${SHELL_ID-}" ]; then
@ -123,7 +123,7 @@ idm_id__ls ()
# Parse the config # Parse the config
echo $( echo $(
eval "$(idm_get id_config $id)" eval "$(lib_id_get_config $id)"
echo "$active:$id::::${common_name-} (${email-})" echo "$active:$id::::${common_name-} (${email-})"
) )
done | column -t -s: -o' ' #| lib_log DUMP - done | column -t -s: -o' ' #| lib_log DUMP -

View File

@ -85,20 +85,20 @@ idm_tomb__ls ()
# Get status of tomb file # Get status of tomb file
if [ -f "$git_tomb_enc" ]; then if [ -f "$git_tomb_enc" ]; then
tomb_status=open tomb_status=present
tomb_date=$( lib_date_diff_human $(find $git_tomb_enc -printf "%Ts") ) tomb_date=$( lib_date_diff_human $(find $git_tomb_enc -printf "%Ts") )
tomb_date=", $tomb_date old" tomb_date=", $tomb_date old"
else else
tomb_status=closed tomb_status=absent
fi fi
# Get status of git repo # Get status of git repo
if [ -d "$git_tomb_dir" ]; then if [ -d "$git_tomb_dir" ]; then
git_status=present git_status=open
#git_date=$( lib_date_diff_human $(find $git_tomb_dir -maxdepth 0 -printf "%Ts") ) #git_date=$( lib_date_diff_human $(find $git_tomb_dir -maxdepth 0 -printf "%Ts") )
#git_date=" $git_date" #git_date=" $git_date"
else else
git_status=absent git_status=closed
fi fi
# Display # Display
@ -109,7 +109,7 @@ idm_tomb__ls ()
printf " %-20s: %s\n" "tomb git dir" "$git_tomb_dir" printf " %-20s: %s\n" "tomb git dir" "$git_tomb_dir"
# Show git remotes # Show git remotes
if lib_git_is_repo id; then if lib_git_is_repo id &>/dev/null ; then
echo " Git remotes:" echo " Git remotes:"
lib_git id remote -v | sed 's/^/ /' lib_git id remote -v | sed 's/^/ /'
echo " Last commits:" echo " Last commits:"
@ -131,15 +131,11 @@ idm_tomb__rm ()
idm_tomb_header $id idm_tomb_header $id
# Delete local remote branch # Delete local remote branch
if lib_git id remote show $git_id_tomb_repo_name &>/dev/null ; then idm_tomb_remote_rm $git_id_tomb_repo_name ||
lib_git id remote rm $git_id_tomb_repo_name || {
{ lib_log INFO "Could not remote tomb remote"
lib_log INFO "Could not remote tomb remote" return 1
return 1 }
}
else
lib_log INFO "Tomb remote is already absent"
fi
# Delete git repo # Delete git repo
if [ -d "$git_tomb_dir" ] ; then if [ -d "$git_tomb_dir" ] ; then
@ -156,13 +152,6 @@ idm_tomb__init ()
{ {
local id=$1 local id=$1
# Check if local repo is not empty
lib_git_is_repo_with_commits id ||
{
lib_log INFO "Local repository must be present first"
return 0
}
# Load tomb variables # Load tomb variables
idm_tomb_header $id idm_tomb_header $id
@ -177,7 +166,7 @@ idm_tomb__init ()
lib_log WARN "An encrypted tomb has been found. Do you want to decrypt it? ($git_tomb_enc)" lib_log WARN "An encrypted tomb has been found. Do you want to decrypt it? ($git_tomb_enc)"
if idm_cli_timeout 1 || false ; then if idm_cli_timeout 1 || false ; then
lib_log "Extracting existing tomb ..." lib_log INFO "Extracting existing tomb ..."
idm_tomb__decrypt $id || idm_tomb__decrypt $id ||
idm_exit 1 ERR "Failed to create tomb repo" idm_exit 1 ERR "Failed to create tomb repo"
else else
@ -189,18 +178,25 @@ idm_tomb__init ()
# Create tomb: from other file #TODO # Create tomb: from other file #TODO
# Create tomb: from other host #TODO # Create tomb: from other host #TODO
# Create tomb: from scratch # Create tomb: from scratch (last resort, as we want to avoid to much variants)
if [ -f "$git_tomb_enc" ]; then if [ ! -f "$git_tomb_enc" ]; then
# Check if local repo is not empty
lib_git_is_repo_with_commits id ||
{
lib_log INFO "Local repository must be present first"
return 1
}
# Create a NEW tomb
mkdir -p "$git_tomb_dir" mkdir -p "$git_tomb_dir"
_git_tomb clone --bare $git_id_dir $git_tomb_dir || \ _git_tomb clone --bare $git_id_dir $git_tomb_dir || \
idm_exit 1 ERR "Could not create tomb repo" idm_exit 1 ERR "Could not create tomb repo"
lib_log NOTICE "Tomb repository has been created" lib_log NOTICE "Tomb repository has been created"
fi fi
# Add tomb remote to local repo idm_tomb_remote_add $git_id_tomb_repo_name $git_tomb_dir
lib_git id remote | grep -q $git_id_tomb_repo_name ||
lib_git id remote add $git_id_tomb_repo_name $git_tomb_dir ||
idm_exit 1 ERR "Failed to add tomb remote to local git"
# Syncrhonise with tomb # Syncrhonise with tomb
#if lib_git_is_repo_with_commits id ; then #if lib_git_is_repo_with_commits id ; then
@ -227,26 +223,26 @@ idm_tomb__sync ()
} }
# Work on local # Work on local
idm_tomb_remote_add $git_id_tomb_repo_name $git_tomb_dir
{ {
lib_git id fetch --all --tags && lib_git id fetch --all --tags &&
lib_git id push -u $git_id_tomb_repo_name --all && lib_git id push -u $git_id_tomb_repo_name --all &&
lib_git id push -u $git_id_tomb_repo_name --tags lib_git id push -u $git_id_tomb_repo_name --tags
} >/dev/null || idm_exit 1 ERR "Something where wrong while syncinc" } || idm_exit 1 ERR "Something where wrong while syncing"
# Notify user # Notify user
lib_log NOTICE "Tomb and local repository are now synced" lib_log NOTICE "Tomb and local repository are now synced"
} }
#### THIS PART BELOW NEED REFACTOOOORRRR
idm_tomb__encrypt () idm_tomb__encrypt ()
{ {
local id=$1 local id=$1
#set -x
idm_tomb_header $id idm_tomb_header $id
lib_git_is_all_commited id #set -x
# We check local repo
idm_tomb_require_valid_local_repo
# We check tomb repo here # We check tomb repo here
lib_git_is_repo tomb || lib_git_is_repo tomb ||
@ -264,30 +260,31 @@ idm_tomb__encrypt ()
lib_gpg_encrypt_dir $git_tomb_dir $git_tomb_enc _PASS || \ lib_gpg_encrypt_dir $git_tomb_dir $git_tomb_enc _PASS || \
idm_exit 1 ERR "Failed to create tomb" idm_exit 1 ERR "Failed to create tomb"
## Encrypt local data # Encrypt local data
lib_gpg_encrypt_dir $git_id_dir $git_id_enc $GIT_AUTHOR_EMAIL || \ lib_gpg_encrypt_dir $git_id_dir $git_id_enc $GIT_AUTHOR_EMAIL || \
idm_exit 1 ERR "Could not create local repo data" idm_exit 1 ERR "Could not create local repo data"
# Clean tomb # Clean tomb
rm -rf $git_tomb_dir #idm_tomb__rm $id
lib_log NOTICE "Tomb has been closed into: $git_tomb_enc" lib_log NOTICE "Tomb has been closed into: $git_tomb_enc"
} }
#### THIS PART BELOW NEED REFACTOOOORRRR
idm_tomb__decrypt () idm_tomb__decrypt ()
{ {
local id=$1 local id=$1
shift || true
local opt=${@-}
# Sanity check idm_tomb_header $id
idm_tomb_require_enabled $id
# Check if tomb repo is absent # Check if tomb repo is absent
if lib_git_is_repo $git_tomb_dir $git_id_work_tree ; then if lib_git_is_repo tomb; then
lib_log WARN "A local repo is already present, we will overwrite it. Do you want to continue?" lib_log WARN "A local tomb repo is already present, we will overwrite it. Do you want to continue?"
idm_cli_timeout 0 || idm_exit 1 ERR "Refuse to override existing repo" idm_cli_timeout 0 ||
idm_exit 1 ERR "Refuse to override existing repo"
# Let's not delete existing repo, just for fun and wee how git react :p # Let's not delete existing repo, just for fun and wee how git react :p
fi fi
@ -295,6 +292,12 @@ idm_tomb__decrypt ()
lib_gpg_decrypt_dir $git_tomb_enc $git_tomb_dir || \ lib_gpg_decrypt_dir $git_tomb_enc $git_tomb_dir || \
idm_exit 1 ERR "Could not extract tomb" idm_exit 1 ERR "Could not extract tomb"
# Check local repo
idm_tomb_require_valid_local_repo
# Add tomb to known remotes
idm_tomb_remote_add $git_id_tomb_repo_name $git_tomb_dir
# Extract local repo # Extract local repo
if lib_git_is_repo id ; then if lib_git_is_repo id ; then
# Local repo always win !, so we just sync # Local repo always win !, so we just sync
@ -310,11 +313,7 @@ idm_tomb__decrypt ()
fi fi
# Sync :D
#idm_tomb__sync $id
lib_log NOTICE "Your tomb has been decrypted" lib_log NOTICE "Your tomb has been decrypted"
} }
@ -432,6 +431,67 @@ _git_tomb ()
## Module functions ## Module functions
############################## ##############################
idm_tomb_local_enc_is_present ()
{
[ -f "$git_id_enc" ]
}
idm_tomb_tomb_enc_is_present ()
{
[ -f "$git_tomb_enc" ]
}
idm_tomb_local_git_is_present ()
{
[ -d "$git_id_dir" ] || return 1
if ! lib_git_is_repo_with_commits id &>/dev/null ; then
idm_exit 1 ERR "You need to commit something into your repo !!!"
fi
if ! lib_git_is_all_commited id &>/dev/null ; then
idm_exit 1 ERR "You need to commit all your changes!"
fi
}
idm_tomb_tomb_git_is_present ()
{
[ -d "$git_tomb_dir" ] || return 1
}
################
# Add tomb remote to local repo
idm_tomb_remote_add ()
{
local name=$1
local url=$2
if lib_git id remote | grep -q $name; then
lib_log INFO "The remote '$name' is already present"
else
lib_git id remote add $name $url ||
idm_exit 1 ERR "Failed to add '$name' remote to local git"
fi
}
idm_tomb_remote_rm ()
{
local name=$1
if lib_git id remote show $name &>/dev/null ; then
lib_git id remote rm $name ||
{
lib_log INFO "Could not remove '$name' remote from local git"
return 1
}
else
lib_log INFO "The remote '$name' is already absent"
fi
}
idm_tomb_ssh_sync () idm_tomb_ssh_sync ()
{ {
local host=$1 local host=$1
@ -480,14 +540,37 @@ EOF
# } # }
# DEPRECATED, use: lib_git_is_repo_with_commits id instead # DEPRECATED, use: lib_git_is_repo_with_commits id instead
# idm_tomb_require_valid_local_repo () idm_tomb_require_valid_local_repo ()
# { {
#
# if ! lib_git_is_repo id ; then # Check if local repo is present
# lib_log NOTICE "You need to have a local repo first" if ! lib_git_is_repo id ; then #&>/dev/null ; then
# return 1
# elif ! lib_git_is_repo_with_commits id ; then echo "YOOOOOOOOOOOOOOOO"
# lib_log NOTICE "You need to commit all your changes"
# return 1 if [ -f "$git_tomb_enc" ]; then
# fi lib_gpg_decrypt_dir $git_tomb_enc $git_tomb_dir ||
# } {
lib_log ERR "Could not extract tomb"
return 1
}
else
lib_log ERR "You need to have a local repo first"
return 1
fi
fi
# Check if local repo is valid
if ! lib_git_is_repo_with_commits id &>/dev/null ; then
lib_log ERR "You need to commit something into your repo !!!"
return 1
fi
if ! lib_git_is_all_commited id; then
lib_log ERR "You need to commit all your changes!"
return 1
fi
}