Updated pm-task.

This commit is contained in:
Ali
2026-04-09 11:40:03 +08:00
parent 2fb0219552
commit 3fe2d7abfc

106
pm-task
View File

@@ -37,54 +37,95 @@ function subBuild() {
fi fi
} }
# List available projects in a workspace and let user choose one.
# Arguments: $1 = workspace path (optional, defaults to current host's workspace)
# Returns: Sets WORKSPACE_CHOICE var to selected project name or empty string
function subListProjects() {
local workspace="$1"
local projects=()
# Get list of subdirectories (excluding special dirs)
if [ -d "$workspace" ]; then
while IFS= read -r -d '' dir; do
local basename=$(basename "$dir")
# Skip hidden dirs and common non-project dirs
if [[ ! "$basename" =~ ^\. ]] && [[ "$basename" != "README"* ]]; then
projects+=("$basename")
fi
done < <(find "$workspace" -mindepth 1 -maxdepth 1 -type d -print0 2>/dev/null)
fi
# Store projects in a global array
PROJECTS=("${projects[@]}")
}
function subGotoWorkspace() { function subGotoWorkspace() {
local workspace=""
# Determine workspace path based on hostname
case $HOSTNAME in case $HOSTNAME in
Eighty) Eighty)
if [ $1 ]; then workspace="$HOME/docker"
cd $HOME/docker/$1
else
cd $HOME/docker
fi
;; ;;
HiveDC) HiveDC)
if [ $1 ]; then workspace="/mnt/workspace/docker"
cd /mnt/workspace/docker/$1
else
cd /mnt/workspace/docker
fi
;; ;;
hivegcp) hivegcp)
if [ $1 ]; then workspace="$HOME/docker"
cd $HOME/docker/$1
else
cd $HOME/docker
fi
;; ;;
Podman) Podman)
if [ $1 ]; then workspace="/mnt/workspace/podman"
cd /mnt/workspace/podman/$1
else
cd /mnt/workspace/podman
fi
;; ;;
HivePM) HivePM)
if [ $1 ]; then workspace="/mnt/workspace/podman"
cd /mnt/workspace/podman/$1
else
cd /mnt/workspace/podman
fi
;; ;;
libpodman) libpodman)
if [ $1 ]; then workspace="/podman"
cd /podman/$1
else
cd /podman
fi
;; ;;
*) *)
echo Unrecognized host: $HOSTNAME echo "Unrecognized host: $HOSTNAME"
return 1
;; ;;
esac esac
# If no argument provided, list projects and let user choose
if [ -z "$1" ]; then
PROJECTS=()
subListProjects "$workspace"
if [ ${#PROJECTS[@]} -eq 0 ]; then
echo "No projects found in $workspace"
cd "$workspace"
return 0
fi
echo "Available projects in $workspace:"
local i=1
for project in "${PROJECTS[@]}"; do
echo " [$i] $project"
((i++))
done
echo " [0] Cancel"
read -ei 1 -p "Choose a project [1-${#PROJECTS[@]}]: " choice
if [[ ! "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -lt 0 ] || [ "$choice" -gt ${#PROJECTS[@]} ]; then
echo "Invalid choice. Canceling."
cd "$workspace"
return 0
fi
if [ "$choice" -eq 0 ]; then
echo "Canceled."
cd "$workspace"
return 0
fi
workspace="$workspace/${PROJECTS[$((choice-1))]}"
else
workspace="$workspace/$1"
fi
cd "$workspace"
} }
# Application logs streaming (single log). # Application logs streaming (single log).
@@ -151,6 +192,7 @@ function subHelp() {
echo " stats Display container resource usage statistics." echo " stats Display container resource usage statistics."
echo " up, start Start the Docker Compose project." echo " up, start Start the Docker Compose project."
echo " bash|rsh|sh Access a shell in the running container." echo " bash|rsh|sh Access a shell in the running container."
echo " (no command) List available projects and choose one to navigate to."
} }
# Task # Task