From 3fe2d7abfc5a38356a4b5ccfd5149ee7f4392413 Mon Sep 17 00:00:00 2001 From: Ali Date: Thu, 9 Apr 2026 11:40:03 +0800 Subject: [PATCH] Updated pm-task. --- pm-task | 106 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 74 insertions(+), 32 deletions(-) diff --git a/pm-task b/pm-task index 2a828c8..80a4777 100755 --- a/pm-task +++ b/pm-task @@ -37,54 +37,95 @@ function subBuild() { 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() { + local workspace="" + + # Determine workspace path based on hostname case $HOSTNAME in Eighty) - if [ $1 ]; then - cd $HOME/docker/$1 - else - cd $HOME/docker - fi + workspace="$HOME/docker" ;; HiveDC) - if [ $1 ]; then - cd /mnt/workspace/docker/$1 - else - cd /mnt/workspace/docker - fi + workspace="/mnt/workspace/docker" ;; hivegcp) - if [ $1 ]; then - cd $HOME/docker/$1 - else - cd $HOME/docker - fi + workspace="$HOME/docker" ;; Podman) - if [ $1 ]; then - cd /mnt/workspace/podman/$1 - else - cd /mnt/workspace/podman - fi + workspace="/mnt/workspace/podman" ;; HivePM) - if [ $1 ]; then - cd /mnt/workspace/podman/$1 - else - cd /mnt/workspace/podman - fi + workspace="/mnt/workspace/podman" ;; libpodman) - if [ $1 ]; then - cd /podman/$1 - else - cd /podman - fi + workspace="/podman" ;; *) - 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). @@ -151,6 +192,7 @@ function subHelp() { echo " stats Display container resource usage statistics." echo " up, start Start the Docker Compose project." echo " bash|rsh|sh Access a shell in the running container." + echo " (no command) List available projects and choose one to navigate to." } # Task