2 Commits

Author SHA1 Message Date
50f53d3a35 Fix REMOTE HOST in new clone for host in ssh config check 2026-01-09 14:07:30 +09:00
4fc2c7f009 Update new clone.sh usage and argument parsing
Use proper arguments for new clone
2026-01-09 11:30:44 +09:00
2 changed files with 98 additions and 12 deletions

View File

@@ -48,12 +48,14 @@ create_ssh_config.sh [repo url full] ([jump proxy])
Create a new clone
```sh
new_clone.sh [repository] [branch] ([host]) ([remote name])
new_clone.sh -r <Repository URL> -b <Branch Name> [-H <Host name>] [-f <Folder name>] [-n <Remote name>]
```
The [host] is the SSH Host name entry, this will replace any "[host]:" in the [repository]. If the [host] is not set the host set in the [repository] will be used. If nothing found the script will abort
The [host (-H)] is the SSH Host name entry, this will replace any "[host]:" in the [repository]. If the [host (-H)] is not set the host set in the [repository] will be used. If nothing found the script will abort. Note that if [host (-H)] is not set the host name will be the Repository name which has to match the SSH config setting.
A [branch] name must be set all the time.
A [branch (-B)] name must be set all the time.
An override folder naem can be set with `-f`
An optional [remote name] can be set, if not set "origin" will be used.

View File

@@ -6,15 +6,99 @@
# COMMAND: new_clone.sh <Repo.git> <branch> [<host>] [<Repo Target Name>] [<remote name>]
REPOSITORY="$1";
BRANCH="$2";
REMOTE_HOST="$3";
REPOSITORY_FOLDER="$4"
REMOTE_NAME="$5";
if [ "${REPOSITORY}" == "--help" ]; then
echo "$0 <Repo.git> <branch> [<override host>] [<target folder>] [<remote name, defaults to origin>]";
function error() {
if [ -t 1 ]; then echo "[MAK] ERROR: $*" >&2; fi; exit 0;
}
usage() {
cat <<EOF
Usage: $(basename "${BASH_SOURCE[0]}") [-h | --help] -r | --repository <Repository URL> -b | --branch <Branch Name> [-H | --host <Host name>] [-f | --folder <Folder name>] [-n | --remote <Remote name>]
New clone a git repository via ssh into the clone folder.
Available options:
-h, --help Print this help and exit
-r, --repository <Repository URL> Repository path (e.g. user/repo.git)
-b, --branch <Branch Name> Branch to clone (e.g. main)
-H, --host <Host name> Override SSH host from ssh config (e.g. my-ssh-host)
-f, --folder <Folder name> Target folder name for the repository (e.g. repo-name)
-n, --remote <Remote name> Remote name (defaults to origin)
EOF
exit
}
# REPOSITORY="$1";
# BRANCH="$2";
# REMOTE_HOST="$3";
# REPOSITORY_FOLDER="$4"
# REMOTE_NAME="$5";
# if [ "${REPOSITORY}" == "--help" ]; then
# echo "$0 <Repo.git> <branch> [<override host>] [<target folder>] [<remote name, defaults to origin>]";
# exit;
# fi;
REPOSITORY="";
BRANCH="";
REMOTE_HOST="";
REPOSITORY_FOLDER="";
REMOTE_NAME="origin";
while [ -n "${1-}" ]; do
case "${1}" in
-r | --repository)
REPOSITORY="${2-}";
shift
;;
-b | --branch)
BRANCH="${2-}";
shift
;;
-H | --host)
REMOTE_HOST="${2-}";
shift
;;
-f | --folder)
REPOSITORY_FOLDER="${2-}";
shift
;;
-n | --remote)
REMOTE_NAME="${2-}";
shift
;;
-h | --help)
usage
;;
# invalid option
-?*)
error "[!] Unknown option: '$1'."
;;
esac
shift;
done;
# if no repository or banch name given, show error
error=0
if [ -z "${REPOSITORY}" ]; then
echo "[!] Must set a repository full url, ssh only";
error=1;
fi;
if [ -z "${BRANCH}" ]; then
echo "[!] Must set a branch name";
error=1;
fi;
# further checks that repository folder if set can only by alphanumeric, -, _ or .
if [ -n "${REPOSITORY_FOLDER}" ]; then
if ! [[ "${REPOSITORY_FOLDER}" =~ ^[a-zA-Z0-9._-]+$ ]]; then
echo "[!] Repository folder name can only contain alphanumeric characters, dots, dashes or underscores";
error=1;
fi;
fi;
if [ $error -eq 1 ]; then
exit;
fi;
if [ -z "${REMOTE_NAME}" ]; then
REMOTE_NAME="origin"
fi;
@@ -38,7 +122,7 @@ else
fi;
# set remote host if not set to the ssh config name
if [ -z "${REMOTE_HOST}" ]; then
REMOTE_HOST="${GIT_REPOSITORY_NAME}";
REMOTE_HOST="$(basename "${REPOSITORY}" .git)";
fi;
if [ $error -eq 1 ]; then
exit;
@@ -47,7 +131,7 @@ fi;
error=0
echo "* Validate SSH PEM Key exist and SSH config";
if ! grep "Host ${REMOTE_HOST}" "${GIT_WEBHOOK_BASE_FOLDER}"/.ssh/config; then
echo "[!] ssh config entry for Host ${REMOTE_HOST} is missing";
echo "[!] ssh config entry for Host ${REMOTE_HOST} is missing in ${GIT_WEBHOOK_BASE_FOLDER}/.ssh/config";
error=1;
else
# make sure the identiy file is there