Adds better version getting. Adds better name getting. Adds more stable command options. Adds dry run option. Adds debug option. Adds local zip file override option.

This commit is contained in:
Llewellyn van der Merwe 2021-04-09 11:39:04 +02:00
parent 4f6ff8b2ff
commit 994dcb5527
Signed by: Llewellyn
GPG Key ID: EFC0C720A240551C
3 changed files with 625 additions and 310 deletions

110
README.md
View File

@ -14,14 +14,14 @@ $ sudo chmod +x /usr/local/bin/octozipo
**Options:**
```txt
VDM_ORG="octoleo"
VDM_ROOT_DIR="/home/user/path/to/zip/files/"
VDM_REMOTE_SYSTEM="git.vdm.dev"
VDM_ZIP_DIR="/home/user/path/to/zip/files"
VDM_GIT_URL="git.vdm.dev"
VDM_PUSH_CREATE=true
```
- VDM_ORG: git.vdm.dev/[ORG] in the repository path (default: octoleo)
- VDM_ROOT_DIR: the full path to where you have placed all the zipped files (default: current dir)
- VDM_REMOTE_SYSTEM: the base URI of your gitea system (default: git.vdm.dev)
- VDM_ORG: git.vdm.dev/[ORG] in the repository path (default: joomla)
- VDM_ZIP_DIR: the full path to where you have placed all the zipped files (default: current dir)
- VDM_GIT_URL: the base URI of your gitea system (default: git.vdm.dev)
- VDM_PUSH_CREATE: switch to push-create repositories that don't already exist (default: false)
## Usage
@ -40,42 +40,92 @@ $ octozipo --update
### Help Menu (Octozipo)
```txt
Usage: octozipo [OPTION...]
Options
======================================================
Options
======================================================
-o | --org=[ORG]
directory of the org/user repository
default: joomla
example: octozipo -o=joomla
example: octozipo --org=joomla
======================================================
-z | --zip-dir=<full-path-to-directory>
full path to directory of the zip files
default: $PWD
example: octozipo -z=/home/username/zipfiles
example: octozipo --zip-dir=/home/username/zipfiles
======================================================
-g | --git-url=<url>
git remote repository base url
default: git.vdm.dev
example: octozipo -g=git.vdm.dev
example: octozipo --git-url=git.vdm.dev
======================================================
-m | --mapper=<file>
load the mapping file
that convert zip names to repo names
example: octozipo --mapper=/src/.mapper
======================================================
load the mapping file
that convert zip names to repo names
example: octozipo --mapper=/src/.mapper
======================================================
-e | --env=<file>
load the environment variables file
example: octozipo --env=/src/.env
======================================================
load the environment variables file
example: octozipo --env=/src/.env
======================================================
-p | --push-create
switch to try push create new repositories
this may not work with github
example: octozipo -p
example: octozipo --push-create
======================================================
-s | --spacer=<char>
set the spacer used in repo name
default: -
example: octozipo -s _
example: octozipo --spacer=_
======================================================
--keep-repo
switch to keep the repository directory
example: octozipo --keep-repo
======================================================
--keep-zip
switch to keep the zip file
example: octozipo --keep-zip
======================================================
--use-xml-name
use the name found in the xml as the repository name
example: octozipo --use-xml-name
======================================================
-d | --dry
dry run of the program
example: octozipo --dry
======================================================
-q | --quiet
mute all output messages
example: octozipo --quiet
======================================================
mute all output messages
example: octozipo --quiet
======================================================
--debug
tp print out all config details
example: octozipo --debug
======================================================
--update
to update your install
example: octozipo --update
======================================================
to update your install
example: octozipo --update
======================================================
--uninstall
to uninstall this script
example: octozipo --uninstall
======================================================
to uninstall this script
example: octozipo --uninstall
======================================================
-h|--help
display this help menu
example: octozipo -h
example: octozipo --help
======================================================
Octozipo v1.0.1
======================================================
display this help menu
example: octozipo -h
example: octozipo --help
======================================================
Octozipo v1.1.0
======================================================
```
### Example
Execute the script in the directory where your zip files are found
```shell
$ octozipo joomla true
$ octozipo -o joomla -p
```
This will target the git.vdm.dev/joomla organization and if a package is unzipped and not found it will push to create that repository.

3
src/.gitignore vendored
View File

@ -1,2 +1 @@
.octozipo
.octozipo.mapper
test_dir

View File

@ -3,8 +3,8 @@
# Program name
PROGRAM_NAME="Octozipo"
PROGRAM_CODE="octozipo"
PROGRAM_VERSION="1.0.1"
PROGRAM_V="1.0"
PROGRAM_VERSION="2.0.0"
PROGRAM_V="2.0"
# PROGRAM_URL="https://git.vdm.dev/octoleo/${PROGRAM_CODE}"
# Do some prep work
@ -24,179 +24,148 @@ command -v curl >/dev/null 2>&1 || {
# main function ˘Ô≈ôﺣ
main() {
# make sure the root dir exist
if [ -d "$VDM_ROOT_DIR" ]; then
if [ -d "$VDM_ZIP_DIR" ]; then
# go to folder where zip files are placed
cd "$VDM_ROOT_DIR" || exit 3
cd "$VDM_ZIP_DIR" || exit 3
# check that the folder has zip files
# shellcheck disable=SC2012
[ "$(ls -1 ./*.zip 2>/dev/null | wc -l)" == 0 ] && showError "looking for zip files, since no zip files in the folder $VDM_ROOT_DIR ERROR-NR" 6
[ "$(ls -1 ./*.zip 2>/dev/null | wc -l)" == 0 ] && showError "looking for zip files, since no zip files in the folder $VDM_ZIP_DIR ERROR-NR" 6
# get all zip files
for z in *.zip; do
# get folder and repo name
repo=$(getRepoName "$z")
# check if the repo exist on our system
if git ls-remote "git@${VDM_REMOTE_SYSTEM}:${VDM_ORG}/${repo}.git" -q >/dev/null 2>&1; then
setExistingRepository "$repo" "$z" || showError "Update Repo:(${repo}) ERROR-NR" 7
for zip_name in *.zip; do
# get a random folder name
folder_name=$( getRandomName 7 )
# unzip this zip file
_unzip "${zip_name}" "${folder_name}" || {
_echo "[error] We encountered and error, we could not unzip ($VDM_ZIP_DIR/$zip_name) in to ($VDM_ZIP_DIR/$folder_name) ERROR-NR 6"
# so we skip this package
continue
}
# check if we have a path
if [ -d "${VDM_ZIP_DIR}/${folder_name}" ]; then
# we change into the unzipped folder
cd "${VDM_ZIP_DIR}/${folder_name}" || exit 1
# get the package details
getPackageDetails "${zip_name}" "${folder_name}"
# check if the repo exist on our system
if git ls-remote "git@${VDM_GIT_URL}:${VDM_ORG}/${VDM_REPO_NAME}.git" -q >/dev/null 2>&1; then
# check if repo is locally found
cd "${VDM_PATH_REPO}" >/dev/null 2>&1 || {
git clone "git@${VDM_GIT_URL}:${VDM_ORG}/${VDM_REPO_NAME}.git" "${VDM_PATH_REPO}" -q >/dev/null 2>&1
_echo "[info] Cloned git@${VDM_GIT_URL}:${VDM_ORG}/${VDM_REPO_NAME}.git"
}
# set the new files in place
setNewFiles || showError "Opening Folder:(${VDM_PATH_REPO}) ERROR-NR" 7
# update the existing repo
setExistingRepository || showError "Update Repo:(${VDM_REPO_NAME}) ERROR-NR" 7
else
# create the new folder
mkdir -p "${VDM_PATH_REPO}"
# set the new files in place
setNewFiles || showError "Create Folder:(${VDM_PATH_REPO}) ERROR-NR" 7
# setup the new repository
setNewRepository || showError "Setup Repo:(${VDM_REPO_NAME}) ERROR-NR" 7
fi
# remove the random folder
rm -fr "${VDM_ZIP_DIR:?}/${folder_name:?}"
# remove the zip file
if $VDM_KEEP_ZIP || $VDM_KEEP_THIS_ONE; then
_echo "[info] Did not remove ${VDM_ZIP_DIR}/${zip_name}"
else
rm -fr "${VDM_ZIP_DIR:?}/${zip_name:?}"
fi
# do not remove repo folder when (KEEP) (DRY) (ONE)
if $VDM_KEEP_REPO || $DRY || $VDM_KEEP_THIS_ONE; then
_echo "[info] Did not remove ${VDM_PATH_REPO}"
else
# remove the repo directory (we are done)
rm -fr "${VDM_PATH_REPO:?}"
fi
# switch the one back
if $VDM_KEEP_THIS_ONE; then
VDM_KEEP_THIS_ONE=false
fi
_echo "================================"
else
setNewRepository "$repo" "$z" || showError "Setup Repo:(${repo}) ERROR-NR" 7
showError "opening of folder $VDM_ZIP_DIR/$VDM_FOLDER_NAME as it does not exist ERROR-NR" 5
fi
done
else
showError "opening of folder $VDM_ROOT_DIR as it does not exist ERROR-NR" 5
showError "opening of folder $VDM_ZIP_DIR as it does not exist ERROR-NR" 5
fi
}
# get repository name
getRepoName() {
local name
name=$(rightStrip "$1" "-v*")
name=$(rightStrip "$name" "_v*")
name=$(rightStrip "$name" ".zip")
# shellcheck disable=SC2001
name=$(echo "$name" | sed 's/[0-9.]//g')
name=$(rightStrip "$name" "_")
name=$(rightStrip "$name" "-")
name=$(getMapped "$name")
echo "$name"
}
# get current version
getVersion() {
local version
version=$(leftStrip "$1" "*-v")
version=$(leftStrip "$version" "*_v")
version=$(rightStrip "$version" ".zip")
version=${version//-/\.}
version=${version//_/\.}
version=$(rightStrip "$version" "..*")
# shellcheck disable=SC2001
version=$(echo "$version" | sed 's/[^0-9.]//g')
version=$(leftStrip "$version" "..")
# if we have numbers
[[ "$version" =~ [0-9] ]] && echo "$version"
}
# check that we are in the root folder
function getVersionPath() {
# some locals
local filename="$1"
local main_path
local version
local len=100
# get all xml (to get version)
find . -type f -name '*.xml' > tmp
# now loop the files
while IFS= read -r file
do
# get the version
v=$(grep -i '<version>' "$file" | sed 's/[^0-9.]//g')
# when we have a version we have a xml that could match
if [ -n "$v" ]; then
# count the folder depth
# shellcheck disable=SC2001
p=$(echo "$file" | sed 's|[^/]||g')
# keep the value of the shortest path
if [[ "${#p}" -lt $len ]]; then
# set the directory name
main_path="$(dirname "${file}")"
# update the length
len="${#p}"
# set the version
version="$v"
fi
fi
done < tmp
# remove the tmp file
rm tmp
# set the root path of the extension
VDM_PATH_TO_GO="${2}${main_path#.}"
# return the version if found
if [ -z "$version" ]; then
VDM_PATH_VERSION_GO=$(getVersion "$filename")
else
VDM_PATH_VERSION_GO="$version"
fi
# we export this path
export VDM_PATH_TO_GO
# we export the version
export VDM_PATH_VERSION_GO
}
# Strip pattern from end of string
rightStrip() {
# Usage: rightStrip "string" "pattern"
printf '%s\n' "${1%%$2}"
}
# Strip pattern from start of string
leftStrip() {
# Usage: leftStrip "string" "pattern"
printf '%s\n' "${1##$2}"
}
#####################################################################################################################VDM
######################################## Setters
# setup new repository
setNewRepository() {
# some locals
local repo_path
local zip_path
local version
# give heads up of the new repo
_echo "[info] New repository (${VDM_REMOTE_SYSTEM}:${VDM_ORG}/$1)"
# set repo path
repo_path="$VDM_ROOT_DIR/$1"
# set zip path
zip_path="$VDM_ROOT_DIR/$2"
# we creat the repo dir
mkdir -p "$repo_path"
# change to this directory and make sure its empty
if cd "$repo_path" >/dev/null 2>&1; then
rm -rf ./*
else
return 1
fi
# we unzip the data to this new folder
if unzip "$zip_path" -d "$repo_path" >/dev/null 2>&1; then
_echo "[info] Successfully unzipped the package"
else
return 1
fi
# set version and correct dir
getVersionPath "${2}" "${repo_path}"
# check if we have a path
# shellcheck disable=SC2164
[ -d "${VDM_PATH_TO_GO}" ] && cd "${VDM_PATH_TO_GO}"
# set the version
[ -n "${VDM_PATH_VERSION_GO}" ] && version="${VDM_PATH_VERSION_GO}"
# remove the global values
unset VDM_PATH_TO_GO
unset VDM_PATH_VERSION_GO
_echo "[info] New repository (${VDM_GIT_URL}:${VDM_ORG}/$VDM_REPO_NAME)"
# we initialize the git repo locally
setGitInit "$1" "$version" || return 1
setGitInit || return 1
# check if push create is allowed
if ($VDM_PUSH_CREATE); then
# we push to create this repo
git push -u origin master >/dev/null 2>&1
# check if we have tags to push
git push --tags >/dev/null 2>&1
# always move back to root folder
cd "$VDM_ROOT_DIR" || return 1
# we remove the ZIP file
rm "${zip_path:?}"
# we can also remove the folder
rm -rf "${repo_path:?}"
if $VDM_PUSH_CREATE; then
# if dry we dont touch remote repo
if $DRY; then
_echo "[dry run] git push -u origin master"
_echo "[dry run] git push --tags"
else
# we push to create this repo
git push -u origin master >/dev/null 2>&1
# check if we have tags to push
git push --tags >/dev/null 2>&1
fi
# pushed create
_echo "[info] Push created ($1-v$version) repository"
_echo "[info] Push created ($VDM_REPO_NAME v$VDM_VERSION) repository"
else
# give action info
echo "[info] When ready link and push changes to remote"
# always move back to root folder
cd "$VDM_ROOT_DIR" || return 1
# we remove the ZIP file
# rm "$zip_path" (don't remove since we may need to run this again if a name of the zip has changed)
_echo "[info] When ready link and push changes to remote"
# keep this one REPO
VDM_KEEP_THIS_ONE=true
fi
return 0
}
# update repository repository
setExistingRepository() {
# give heads up of the update repo
_echo "[info] Update ($VDM_REPO_NAME) existing repository"
# lets check if there are changes
if [[ -z $(git status --porcelain) ]]; then
_echo "[info] No changes found in ($VDM_REPO_NAME v$VDM_VERSION) repository"
else
if [ "$(git tag -l "v$VDM_VERSION")" ]; then
setGitCommit "$VDM_VERSION" "update" || return 4
else
setGitCommit "$VDM_VERSION" "update - v$VDM_VERSION" || return 4
fi
# push the changes
setPushChanges || return 1
# updated the repository
_echo "[info] Pushed update to ($VDM_REPO_NAME v$VDM_VERSION) repository"
fi
# success
return 0
}
# setup new repository
setNewFiles() {
# make sure we are in the correct dir
if cd "$VDM_PATH_REPO" >/dev/null 2>&1; then
# empty the repo except for dot folders
rm -rf "${VDM_PATH_REPO:?}/"*
# move all files from unzipped folder to repo folder
mv "${VDM_PATH_ZIP}/"* "${VDM_PATH_REPO}"
# updated the repository
_echo "[info] Files moved to (${VDM_PATH_REPO})"
else
# we change to this new repository folder
return 1
fi
# success
return 0
}
# make git commit of the update and set the new tag
setGitInit() {
# check if this is an existing local repo
@ -204,21 +173,22 @@ setGitInit() {
if [[ -z $(git status --porcelain) ]]; then
_echo "[info] No changes found in repository"
else
if [ -z "$2" ] || [ "$(git tag -l "v$2")" ]; then
setGitCommit "$2" "update" || return 4
if [ -z "$VDM_VERSION" ] || [ "$(git tag -l "v$VDM_VERSION")" ]; then
setGitCommit "$VDM_VERSION" "update" || return 4
else
setGitCommit "$2" "update - v$2" || return 4
setGitCommit "$VDM_VERSION" "update - v$VDM_VERSION" || return 4
fi
fi
else
# new repo so we initialize it
git init >/dev/null 2>&1 || return 4
# check if we have a version number
if [ -z "$2" ]; then
setGitCommit "$2" "first commit" || return 4
if [ -z "$VDM_VERSION" ]; then
setGitCommit "$VDM_VERSION" "first commit" || return 4
else
setGitCommit "$2" "first commit - v$2" || return 4
setGitCommit "$VDM_VERSION" "first commit - v$VDM_VERSION" || return 4
fi
git remote add origin "git@${VDM_REMOTE_SYSTEM}:${VDM_ORG}/${1}.git"
git remote add origin "git@${VDM_GIT_URL}:${VDM_ORG}/${VDM_REPO_NAME}.git"
fi
return 0
}
@ -233,6 +203,8 @@ setGitCommit() {
return 0
else
git tag "v$1" >/dev/null 2>&1 || return 1
# updated the repository
_echo "[info] Added v$1 tag"
fi
fi
return 0
@ -240,93 +212,203 @@ setGitCommit() {
# make git commit of the update and set the new tag
setPushChanges() {
git push >/dev/null 2>&1 || return 1
git push --tags >/dev/null 2>&1 || return 1
# if dry we dont touch remote repo
if $DRY; then
_echo "[dry run] git push"
_echo "[dry run] git push --tags"
else
git push >/dev/null 2>&1 || return 1
git push --tags >/dev/null 2>&1 || return 1
fi
return 0
}
# update repository repository
setExistingRepository() {
#####################################################################################################################VDM
######################################## Getters
# check that we are in the root folder
function getPackageDetails() {
# some locals
local repo_path
local zip_path
local zip_name="${1}"
local folder_name="${2}"
local path_repo
local version
# give heads up of the update repo
_echo "[info] Update ($1) repository"
# set repo path
repo_path="$VDM_ROOT_DIR/$1"
# set zip path
zip_path="$VDM_ROOT_DIR/$2"
# check if repo is locally found
cd "$repo_path" >/dev/null 2>&1 || git clone "git@${VDM_REMOTE_SYSTEM}:${VDM_ORG}/${1}.git"
# make sure we are in the correct dir
if cd "$repo_path" >/dev/null 2>&1; then
rm -rf ./*
else
return 1
fi
# now lets unzip the new data to this repo
if unzip "$zip_path" -d "$repo_path" >/dev/null 2>&1; then
_echo "[info] Successfully unzipped the package"
else
# break out
return 1
fi
# set version and correct dir
getVersionPath "${2}" "${repo_path}"
# check if we have a path
# shellcheck disable=SC2164
[ -d "${VDM_PATH_TO_GO}" ] && cd "${VDM_PATH_TO_GO}"
# set the version
[ -n "${VDM_PATH_VERSION_GO}" ] && version="${VDM_PATH_VERSION_GO}"
# remove the global values
unset VDM_PATH_TO_GO
unset VDM_PATH_VERSION_GO
# lets check if there are changes
if [[ -z $(git status --porcelain) ]]; then
_echo "[info] No changes found in ($1-v$version) repository"
else
if [ "$(git tag -l "v$version")" ]; then
setGitCommit "$version" "update" || return 4
else
setGitCommit "$version" "update - v$version" || return 4
local name
local len=100
# get all xml
find . -type f -name '*.xml' > tmp
# now loop the files
while IFS= read -r file
do
# only use xml that are not called: config.xml or access.xml or default.xml
if [[ "$file" == *"config.xml" ]] || [[ "$file" == *"access.xml" ]] || [[ "$file" == *"default.xml" ]]; then
continue
fi
# push the changes
setPushChanges || return 1
# updated the repository
_echo "[info] Pushed update to ($1-v$version) repository"
# get the version
v=$(grep -o -P '(?<=\<version>).*?(?=\</version>)' "$file")
# get the name
n=$(grep -o -P '(?<=\<name>).*?(?=\</name>)' "$file")
# when we have a version we have a xml that could match
if [ -n "$v" ] && [ -n "$n" ]; then
# count the folder depth
# shellcheck disable=SC2001
p=$(echo "$file" | sed 's|[^/]||g')
# keep the value of the shortest path
if [[ "${#p}" -lt $len ]]; then
# set the directory name
path_repo="$(dirname "${file}")"
# update the length
len="${#p}"
# set the version
version="$v"
# set the name
name="$n"
fi
fi
# clear on each loop
unset v
unset n
done < tmp
# remove the tmp file
rm tmp
# set the repo path of the extension
VDM_PATH_ZIP="${VDM_ZIP_DIR}/${folder_name}${path_repo#.}"
# return the version if found
if [ -z "$version" ]; then
VDM_VERSION=$(getVersionNumberByFile "$zip_name")
else
VDM_VERSION="$version"
fi
# always move back to root folder
cd "$VDM_ROOT_DIR" || return 1
# we remove the ZIP file
rm "${zip_path:?}"
# we can also remove the folder
rm -rf "${repo_path:?}"
# success
return 0
# return the name if found
if $VDM_USE_XML_NAME && [ -n "$name" ]; then
name=$(getRepoName "${name}")
else
name=$(getRepoName "${zip_name}")
fi
# possible in package mapper
env_file="${VDM_ZIP_DIR}/${folder_name}/.${PROGRAM_CODE}"
# check if we have a file
if [ -f "${env_file}" ]; then
# get the repository name
env_name=$( grep "repo_name=" "${env_file}" | cut -d'=' -f2)
fi
# check if we have a mapped repo name
VDM_REPO_NAME=$(getMapped "${env_name:-$name}")
# always clear the evn_name
unset env_name
# set the repo path of the extension
VDM_PATH_REPO="${VDM_ZIP_DIR}/${VDM_REPO_NAME}"
}
# get mapped name
function getMapped() {
local PROP_KEY="$1"
local PROP_VALUE
local prop_key="${1}"
local prop_value
if [ -f "${VDM_MAPPER_FILE_PATH}" ]; then
# get the value if set
PROP_VALUE=$( grep "$PROP_KEY" "${VDM_MAPPER_FILE_PATH}" | cut -d'=' -f2)
prop_value=$( grep "$prop_key" "${VDM_MAPPER_FILE_PATH}" | cut -d'=' -f2)
fi
echo "${PROP_VALUE:-$PROP_KEY}"
echo "${prop_value:-$prop_key}"
}
# return a random name
function getRandomName() {
# simple basic random
# shellcheck disable=SC2046
# shellcheck disable=SC2005
echo $(tr -dc 'A-HJ-NP-Za-km-z' </dev/urandom | dd bs="${1:-128}" count=1 status=none)
}
# get repository name
getRepoName() {
local name="${1}"
# be sure to first remove the Joomla
# version from the file name if set
name="${name//__J3/}"
name="${name//__J4/}"
# make all lower
name="${name,,}"
# trim away the .zip
name="${name%%.zip}"
# get version variation
tmp_v_underscore="${VDM_VERSION//./_}"
tmp_v_dash="${VDM_VERSION//./\-}"
# remove the version
name="${name//v$VDM_VERSION/ }"
name="${name//v$tmp_v_underscore/ }"
name="${name//v$tmp_v_dash/ }"
# remove all none safe URL characters
name="${name//[^a-z0-9_\- ]/ }"
# convert all _ to space
name="${name//_/ }"
# convert a - to space
name="${name//\-/ }"
# remove all double spaces
name=$(echo "${name}" | tr -s "[:blank:]" | xargs)
# convert all space to -
name="${name//[[:space:]]/$VDM_SPACER}"
# done (we have our name)
echo "${name}"
}
# get current version
getVersionNumberByFile() {
local version="${1}"
version=$(leftStrip "$version" "*-v")
version=$(leftStrip "$version" "*_v")
version=$(rightStrip "$version" ".zip")
version=${version//-/\.}
version=${version//_/\.}
version=$(rightStrip "$version" "..*")
# shellcheck disable=SC2001
version=$(echo "$version" | sed 's/[^0-9.]//g')
version=$(leftStrip "$version" "..")
# if we have numbers
if [[ "$version" =~ [0-9] ]]; then
echo "$version"
else
echo "1.0.0"
fi
}
#####################################################################################################################VDM
######################################## General Methods
# Strip pattern from end of string
function rightStrip() {
# Usage: rightStrip "string" "pattern"
printf '%s\n' "${1%%$2}"
}
# Strip pattern from start of string
function leftStrip() {
# Usage: leftStrip "string" "pattern"
printf '%s\n' "${1##$2}"
}
# to unzip
function _unzip() {
# set some locals
local zip_name="${1}"
local folder_name="${2}"
# we unzip the data to this new folder
if unzip "$VDM_ZIP_DIR/$zip_name" -d "$VDM_ZIP_DIR/$folder_name" >/dev/null 2>&1; then
_echo "[info] Successfully unzipped the package ($zip_name)"
return 0
fi
return 1
}
# only if not set to be quiet
function _echo() {
if (("$QUIET" == 0)); then
if ! $QUIET; then
echo "$1"
fi
}
# show an error
showError() {
echo "[error] We encountered and error on $1:$2"
_echo "[error] We encountered and error on $1:$2"
exit "$2"
}
@ -335,7 +417,7 @@ function runUninstall() {
# now remove the script
if [ -f "/usr/local/bin/${PROGRAM_CODE}" ]; then
sudo rm -f "/usr/local/bin/${PROGRAM_CODE}"
echo "[info] ${PROGRAM_NAME} v${PROGRAM_VERSION} has been completely uninstalled."
_echo "[info] ${PROGRAM_NAME} v${PROGRAM_VERSION} has been completely uninstalled."
else
echo "[info] ${PROGRAM_NAME} v${PROGRAM_VERSION} is not installed."
fi
@ -375,12 +457,44 @@ function runUpdate() {
exit 0
}
# set the defaults
VDM_ZIP_DIR="$PWD"
VDM_ORG="joomla"
VDM_GIT_URL="git.vdm.dev"
VDM_PUSH_CREATE=false
VDM_USE_XML_NAME=false
VDM_KEEP_ZIP=false
VDM_KEEP_REPO=false
VDM_KEEP_THIS_ONE=false
VDM_SPACER='-'
DRY=false
QUIET=false
DEBUG=false
# help message ʕ•ᴥ•ʔ
function show_help() {
cat <<EOF
Usage: ${PROGRAM_CODE} [OPTION...]
Options
======================================================
-o | --org=[ORG]
directory of the org/user repository
default: joomla
example: ${PROGRAM_CODE} -o=joomla
example: ${PROGRAM_CODE} --org=joomla
======================================================
-z | --zip-dir=<full-path-to-directory>
full path to directory of the zip files
default: $PWD
example: ${PROGRAM_CODE} -z=/home/username/zipfiles
example: ${PROGRAM_CODE} --zip-dir=/home/username/zipfiles
======================================================
-g | --git-url=<url>
git remote repository base url
default: git.vdm.dev
example: ${PROGRAM_CODE} -g=git.vdm.dev
example: ${PROGRAM_CODE} --git-url=git.vdm.dev
======================================================
-m | --mapper=<file>
load the mapping file
that convert zip names to repo names
@ -390,10 +504,42 @@ Usage: ${PROGRAM_CODE} [OPTION...]
load the environment variables file
example: ${PROGRAM_CODE} --env=/src/.env
======================================================
-p | --push-create
switch to try push create new repositories
this may not work with github
example: ${PROGRAM_CODE} -p
example: ${PROGRAM_CODE} --push-create
======================================================
-s | --spacer=<char>
set the spacer used in repo name
default: -
example: ${PROGRAM_CODE} -s _
example: ${PROGRAM_CODE} --spacer=_
======================================================
--keep-repo
switch to keep the repository directory
example: ${PROGRAM_CODE} --keep-repo
======================================================
--keep-zip
switch to keep the zip file
example: ${PROGRAM_CODE} --keep-zip
======================================================
--use-xml-name
use the name found in the xml as the repository name
example: ${PROGRAM_CODE} --use-xml-name
======================================================
-d | --dry
dry run of the program
example: ${PROGRAM_CODE} --dry
======================================================
-q | --quiet
mute all output messages
example: ${PROGRAM_CODE} --quiet
======================================================
--debug
tp print out all config details
example: ${PROGRAM_CODE} --debug
======================================================
--update
to update your install
example: ${PROGRAM_CODE} --update
@ -412,13 +558,6 @@ Usage: ${PROGRAM_CODE} [OPTION...]
EOF
}
# set the defaults
VDM_ORG="octoleo"
VDM_ROOT_DIR="$PWD"
VDM_REMOTE_SYSTEM="git.vdm.dev"
VDM_PUSH_CREATE=false
QUIET=0
# check if we have options
while :; do
case $1 in
@ -427,7 +566,121 @@ while :; do
exit
;;
-q | --quiet)
QUIET=1
QUIET=true
;;
-d | --dry)
DRY=true
;;
--keep-zip)
VDM_KEEP_ZIP=true
;;
--keep-repo)
VDM_KEEP_REPO=true
;;
--use-xml-name)
VDM_USE_XML_NAME=true
;;
-p | --push-create)
VDM_PUSH_CREATE=true
;;
-z | --zip-dir) # Takes an option argument; ensure it has been specified.
if [ "$2" ]; then
VDM_ZIP_DIR=$2
shift
else
_echo '[error] "--zip-dir" requires a non-empty option argument.'
exit 17
fi
;;
-z=?* | --zip-dir=?*)
VDM_ZIP_DIR=${1#*=} # Delete everything up to "=" and assign the remainder.
;;
-z= | --zip-dir=) # Handle the case of an empty --packages=
_echo '[error] "--zip-dir=" requires a non-empty option argument.'
exit 17
;;
-g | --git-url) # Takes an option argument; ensure it has been specified.
if [ "$2" ]; then
VDM_GIT_URL=$2
shift
else
_echo '[error] "--git-url" requires a non-empty option argument.'
exit 17
fi
;;
-g=?* | --git-url=?*)
VDM_GIT_URL=${1#*=} # Delete everything up to "=" and assign the remainder.
;;
-g= | --git-url=) # Handle the case of an empty --packages=
_echo '[error] "--git-url=" requires a non-empty option argument.'
exit 17
;;
-o | --org) # Takes an option argument; ensure it has been specified.
if [ "$2" ]; then
VDM_ORG=$2
shift
else
_echo '[error] "--org" requires a non-empty option argument.'
exit 17
fi
;;
-o=?* | --org=?*)
VDM_ORG=${1#*=} # Delete everything up to "=" and assign the remainder.
;;
-o= | --org=) # Handle the case of an empty --packages=
_echo '[error] "--org=" requires a non-empty option argument.'
exit 17
;;
-s | --spacer) # Takes an option argument; ensure it has been specified.
if [ "$2" ]; then
VDM_SPACER=$2
shift
else
_echo '[error] "--spacer" requires a non-empty option argument.'
exit 17
fi
;;
-s=?* | --spacer=?*)
VDM_SPACER=${1#*=} # Delete everything up to "=" and assign the remainder.
;;
-s= | --spacer=) # Handle the case of an empty --packages=
_echo '[error] "--spacer=" requires a non-empty option argument.'
exit 17
;;
-e | --env) # Takes an option argument; ensure it has been specified.
if [ "$2" ]; then
VDM_ENV_FILE_PATH=$2
shift
else
_echo '[error] "--env" requires a non-empty option argument.'
exit 17
fi
;;
-e=?* | --env=?*)
VDM_ENV_FILE_PATH=${1#*=} # Delete everything up to "=" and assign the remainder.
;;
-e= | --env=) # Handle the case of an empty --packages=
_echo '[error] "--env=" requires a non-empty option argument.'
exit 17
;;
-m | --mapper) # Takes an option argument; ensure it has been specified.
if [ "$2" ]; then
VDM_MAPPER_FILE_PATH=$2
shift
else
_echo '[error] "--mapper" requires a non-empty option argument.'
exit 17
fi
;;
-m=?* | --mapper=?*)
VDM_MAPPER_FILE_PATH=${1#*=} # Delete everything up to "=" and assign the remainder.
;;
-m= | --mapper=) # Handle the case of an empty --packages=
_echo '[error] "--mapper=" requires a non-empty option argument.'
exit 17
;;
--debug)
DEBUG=true
;;
--uninstall)
runUninstall
@ -437,38 +690,6 @@ while :; do
runUpdate
shift
;;
-e | --env) # Takes an option argument; ensure it has been specified.
if [ "$2" ]; then
VDM_ENV_FILE_PATH=$2
shift
else
echo '[error] "--env" requires a non-empty option argument.'
exit 17
fi
;;
-e=?* | --env=?*)
VDM_ENV_FILE_PATH=${1#*=} # Delete everything up to "=" and assign the remainder.
;;
-e= | --env=) # Handle the case of an empty --packages=
echo '[error] "--env=" requires a non-empty option argument.'
exit 17
;;
-m | --mapper) # Takes an option argument; ensure it has been specified.
if [ "$2" ]; then
VDM_MAPPER_FILE_PATH=$2
shift
else
echo '[error] "--mapper" requires a non-empty option argument.'
exit 17
fi
;;
-m=?* | --mapper=?*)
VDM_MAPPER_FILE_PATH=${1#*=} # Delete everything up to "=" and assign the remainder.
;;
-m= | --mapper=) # Handle the case of an empty --packages=
echo '[error] "--mapper=" requires a non-empty option argument.'
exit 17
;;
*) # Default case: No more options, so break out of the loop.
break ;;
esac
@ -476,34 +697,79 @@ while :; do
done
# the environment variables path
tmp_path="$VDM_ROOT_DIR/.${PROGRAM_CODE}"
tmp_path="$VDM_ZIP_DIR/.${PROGRAM_CODE}"
# if path not set try global path
[ -f "$tmp_path" ] || tmp_path="/home/$USER/.config/${PROGRAM_CODE}/.env"
tmp_path="${VDM_ENV_FILE_PATH:-$tmp_path}"
: "${VDM_ENV_FILE_PATH:=$tmp_path}"
# add env to system
if [ -f "${tmp_path}" ]; then
if [ -f "${VDM_ENV_FILE_PATH}" ]; then
# shellcheck disable=SC1090
source "${tmp_path}"
source "${VDM_ENV_FILE_PATH}"
fi
# the mapper path
tmp_path="$VDM_ROOT_DIR/.${PROGRAM_CODE}.mapper"
tmp_path="$VDM_ZIP_DIR/.${PROGRAM_CODE}.mapper"
# if path not set try global path
[ -f "$tmp_path" ] || tmp_path="/home/$USER/.config/${PROGRAM_CODE}/.mapper"
VDM_MAPPER_FILE_PATH="${VDM_MAPPER_FILE_PATH:-$tmp_path}"
: "${VDM_MAPPER_FILE_PATH:=$tmp_path}"
# done with the tmp_path
unset tmp_path
# catch the values passed
VDM_ORG="${1:-$VDM_ORG}"
VDM_PUSH_CREATE="${2:-$VDM_PUSH_CREATE}"
VDM_ROOT_DIR="${3:-$VDM_ROOT_DIR}"
VDM_REMOTE_SYSTEM="${4:-$VDM_REMOTE_SYSTEM}"
# dynamic defaults
VDM_PATH_REPO=''
VDM_PATH_ZIP=''
VDM_VERSION=''
VDM_REPO_NAME=''
# show globals if DEBUG
# echo "$VDM_ORG"
# echo "$VDM_ROOT_DIR"
# echo "$VDM_REMOTE_SYSTEM"
# exit
# debug config values
if $DEBUG; then
# show globals
cat <<EOF
Options: VALUES
======================================================
-o | --org=[ORG]
VALUE: $VDM_ORG
======================================================
-z | --zip-dir=<full-path-to-directory>
VALUE: $VDM_ZIP_DIR
======================================================
-g | --git-url=<url>
VALUE: $VDM_GIT_URL
======================================================
-m | --mapper=<file>
VALUE: $VDM_MAPPER_FILE_PATH
======================================================
-e | --env=<file>
VALUE: $VDM_ENV_FILE_PATH
======================================================
-p | --push-create
VALUE: $VDM_PUSH_CREATE
======================================================
-s | --spacer=<char>
VALUE: $VDM_SPACER
======================================================
--keep-repo
VALUE: $VDM_KEEP_REPO
======================================================
--keep-zip
VALUE: $VDM_KEEP_ZIP
======================================================
--use-xml-name
VALUE: $VDM_USE_XML_NAME
======================================================
-d | --dry
VALUE: $DRY
======================================================
-q | --quiet
VALUE: $QUIET
======================================================
--debug
VALUE: $DEBUG
======================================================
${PROGRAM_NAME} v${PROGRAM_VERSION}
======================================================
EOF
exit 0
fi
# run main
main