Patch pm-task for ash.

This commit is contained in:
Ali
2026-04-09 12:51:21 +08:00
parent 3fe2d7abfc
commit 4034114d4d

65
pm-task
View File

@@ -38,29 +38,35 @@ function subBuild() {
}
# 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
# Sets PROJECT_LIST (newline-separated) and PROJECT_COUNT globals
function subListProjects() {
local workspace="$1"
local projects=()
workspace="$1"
PROJECT_LIST=""
PROJECT_COUNT=0
# 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")
for dir in "$workspace"/*/; do
[ -d "$dir" ] || continue
bname=$(basename "$dir")
# Skip hidden dirs and README* dirs
case "$bname" in
.*) continue ;;
README*) continue ;;
esac
PROJECT_COUNT=$((PROJECT_COUNT + 1))
if [ -z "$PROJECT_LIST" ]; then
PROJECT_LIST="$bname"
else
PROJECT_LIST="$PROJECT_LIST
$bname"
fi
done < <(find "$workspace" -mindepth 1 -maxdepth 1 -type d -print0 2>/dev/null)
done
fi
# Store projects in a global array
PROJECTS=("${projects[@]}")
}
function subGotoWorkspace() {
local workspace=""
workspace=""
# Determine workspace path based on hostname
case $HOSTNAME in
@@ -90,29 +96,32 @@ function subGotoWorkspace() {
# If no argument provided, list projects and let user choose
if [ -z "$1" ]; then
PROJECTS=()
PROJECT_LIST=""
PROJECT_COUNT=0
subListProjects "$workspace"
if [ ${#PROJECTS[@]} -eq 0 ]; then
if [ "$PROJECT_COUNT" -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++))
count=1
echo "$PROJECT_LIST" | while read -r project; do
echo " [$count] $project"
count=$((count + 1))
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
read -r choice
case "$choice" in
''|*[!0-9]*)
echo "Invalid choice. Canceling."
cd "$workspace"
return 0
fi
;;
esac
if [ "$choice" -eq 0 ]; then
echo "Canceled."
@@ -120,7 +129,15 @@ function subGotoWorkspace() {
return 0
fi
workspace="$workspace/${PROJECTS[$((choice-1))]}"
if [ "$choice" -gt "$PROJECT_COUNT" ]; then
echo "Invalid choice. Canceling."
cd "$workspace"
return 0
fi
# Get the selected project
selected=$(echo "$PROJECT_LIST" | sed -n "${choice}p")
workspace="$workspace/$selected"
else
workspace="$workspace/$1"
fi