Files
Odoo-Build/images/odoo/bin/parse-url
T
Janik von Rotz 069648b278 feat(images/odoo): enforce bash coding conventions and improve git config handling
- Enforce bash coding conventions across all scripts as outlined in new AGENTS.md
- Convert local variables to lowercase and use proper quoting
- Update conditionals to use `[[ ... ]]` and remove `function` keyword
- Add support for setting git author name and email via env vars
- Improve SSH key handling and git operations
- Update documentation and changelog to reflect changes
2025-10-29 19:03:23 +01:00

111 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
# Get script name
script=$(basename "$0")
version="1.0.0"
# Display Help
help() {
echo
echo "$script"
echo
echo "Description: Parse and output segements."
echo "Syntax: $script <url> [url|proto|user|pass|hostname|subdomain|port|path]"
echo "Example: $script https://www.example.com subdomain,hostname"
echo " $script git@github.com:OCA/server-tools.git user,hostname,path"
echo
}
# Show help and exit
if [[ "$1" == "help" ]]; then
help
exit
fi
# Check params
if [[ -z "$2" ]]; then
echo "Parameter filter is empty."
exit 1
fi
# Initialize variables
proto=""
user=""
pass=""
hostname=""
port=""
path=""
subdomain=""
# Check if the URL is in SSH format (e.g., git@github.com:OCA/server-tools.git)
if [[ "$1" == *:* && "$1" != *://* ]]; then
proto="ssh://"
user="$(echo "$1" | cut -d@ -f1)"
hostname="$(echo "$1" | cut -d@ -f2 | cut -d: -f1)"
path="$(echo "$1" | cut -d: -f2)"
else
# Extract protocol
proto="$(echo "$1" | grep :// | sed -e's,^\(.*://\).*,\1,g')"
# Remove the protocol
url="$(echo "${1/$proto/}")"
# Extract the user (if any)
userpass="$(echo "$url" | grep @ | cut -d@ -f1)"
pass="$(echo "$userpass" | grep : | cut -d: -f2)"
if [[ -n "$pass" ]]; then
user="$(echo "$userpass" | grep : | cut -d: -f1)"
else
user=$userpass
fi
# Extract the hostname
hostname="$(echo "${url/$user@/}" | cut -d/ -f1)"
# Try to extract the port
port="$(echo "$hostname" | sed -e 's,^.*:,:,g' -e 's,.*:\([0-9]*\).*,\1,g' -e 's,[^0-9],,g')"
# Extract the path
path="$(echo "$url" | grep / | cut -d/ -f2-)"
# Extract subdomain (if any)
if [[ "$hostname" == *.* ]]; then
levels=$(echo "$hostname" | grep -o "\." | wc -l)
if (( levels == 2 )); then
subdomain=$(echo "$hostname" | awk -F"." '{print $1}')
fi
fi
fi
# Process the requested filters
for f in $(echo "$2" | sed "s/,/ /g")
do
case $f in
url)
echo "$1"
;;
proto)
echo "$proto"
;;
user)
echo "$user"
;;
pass)
echo "$pass"
;;
hostname)
echo "$hostname"
;;
subdomain)
echo "$subdomain"
;;
port)
echo "$port"
;;
path)
echo "$path"
;;
esac
done