Patch pm-task for ash.
This commit is contained in:
73
pm-task
73
pm-task
@@ -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"
|
||||
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
|
||||
read -r choice
|
||||
case "$choice" in
|
||||
''|*[!0-9]*)
|
||||
echo "Invalid choice. Canceling."
|
||||
cd "$workspace"
|
||||
return 0
|
||||
;;
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user