From 994dcb55276ab8b2f20ac559392dab7dfc4fc4f1 Mon Sep 17 00:00:00 2001 From: Llewellyn van der Merwe Date: Fri, 9 Apr 2021 11:39:04 +0200 Subject: [PATCH] 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. --- README.md | 110 +++++-- src/.gitignore | 3 +- src/octozipo | 822 ++++++++++++++++++++++++++++++++----------------- 3 files changed, 625 insertions(+), 310 deletions(-) diff --git a/README.md b/README.md index 292b4ec..55bc400 100644 --- a/README.md +++ b/README.md @@ -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 of the zip files + default: $PWD + example: octozipo -z=/home/username/zipfiles + example: octozipo --zip-dir=/home/username/zipfiles + ====================================================== + -g | --git-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= - 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= - 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= + 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. diff --git a/src/.gitignore b/src/.gitignore index a40bd2e..4317866 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1,2 +1 @@ -.octozipo -.octozipo.mapper \ No newline at end of file +test_dir \ No newline at end of file diff --git a/src/octozipo b/src/octozipo index ff3279b..2866330 100755 --- a/src/octozipo +++ b/src/octozipo @@ -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 '' "$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 '(?<=\).*?(?=\)' "$file") + # get the name + n=$(grep -o -P '(?<=\).*?(?=\)' "$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/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 < + 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= + 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= 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= + 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 < + VALUE: $VDM_ZIP_DIR + ====================================================== + -g | --git-url= + VALUE: $VDM_GIT_URL + ====================================================== + -m | --mapper= + VALUE: $VDM_MAPPER_FILE_PATH + ====================================================== + -e | --env= + VALUE: $VDM_ENV_FILE_PATH + ====================================================== + -p | --push-create + VALUE: $VDM_PUSH_CREATE + ====================================================== + -s | --spacer= + 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