Patch pm-task for ash.
This commit is contained in:
65
pm-task
65
pm-task
@@ -38,29 +38,35 @@ function subBuild() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# List available projects in a workspace and let user choose one.
|
# List available projects in a workspace and let user choose one.
|
||||||
# Arguments: $1 = workspace path (optional, defaults to current host's workspace)
|
# Sets PROJECT_LIST (newline-separated) and PROJECT_COUNT globals
|
||||||
# Returns: Sets WORKSPACE_CHOICE var to selected project name or empty string
|
|
||||||
function subListProjects() {
|
function subListProjects() {
|
||||||
local workspace="$1"
|
workspace="$1"
|
||||||
local projects=()
|
PROJECT_LIST=""
|
||||||
|
PROJECT_COUNT=0
|
||||||
|
|
||||||
# Get list of subdirectories (excluding special dirs)
|
# Get list of subdirectories (excluding special dirs)
|
||||||
if [ -d "$workspace" ]; then
|
if [ -d "$workspace" ]; then
|
||||||
while IFS= read -r -d '' dir; do
|
for dir in "$workspace"/*/; do
|
||||||
local basename=$(basename "$dir")
|
[ -d "$dir" ] || continue
|
||||||
# Skip hidden dirs and common non-project dirs
|
bname=$(basename "$dir")
|
||||||
if [[ ! "$basename" =~ ^\. ]] && [[ "$basename" != "README"* ]]; then
|
# Skip hidden dirs and README* dirs
|
||||||
projects+=("$basename")
|
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
|
fi
|
||||||
done < <(find "$workspace" -mindepth 1 -maxdepth 1 -type d -print0 2>/dev/null)
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Store projects in a global array
|
|
||||||
PROJECTS=("${projects[@]}")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function subGotoWorkspace() {
|
function subGotoWorkspace() {
|
||||||
local workspace=""
|
workspace=""
|
||||||
|
|
||||||
# Determine workspace path based on hostname
|
# Determine workspace path based on hostname
|
||||||
case $HOSTNAME in
|
case $HOSTNAME in
|
||||||
@@ -90,29 +96,32 @@ function subGotoWorkspace() {
|
|||||||
|
|
||||||
# If no argument provided, list projects and let user choose
|
# If no argument provided, list projects and let user choose
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
PROJECTS=()
|
PROJECT_LIST=""
|
||||||
|
PROJECT_COUNT=0
|
||||||
subListProjects "$workspace"
|
subListProjects "$workspace"
|
||||||
|
|
||||||
if [ ${#PROJECTS[@]} -eq 0 ]; then
|
if [ "$PROJECT_COUNT" -eq 0 ]; then
|
||||||
echo "No projects found in $workspace"
|
echo "No projects found in $workspace"
|
||||||
cd "$workspace"
|
cd "$workspace"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Available projects in $workspace:"
|
echo "Available projects in $workspace:"
|
||||||
local i=1
|
count=1
|
||||||
for project in "${PROJECTS[@]}"; do
|
echo "$PROJECT_LIST" | while read -r project; do
|
||||||
echo " [$i] $project"
|
echo " [$count] $project"
|
||||||
((i++))
|
count=$((count + 1))
|
||||||
done
|
done
|
||||||
echo " [0] Cancel"
|
echo " [0] Cancel"
|
||||||
|
|
||||||
read -ei 1 -p "Choose a project [1-${#PROJECTS[@]}]: " choice
|
read -r choice
|
||||||
if [[ ! "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -lt 0 ] || [ "$choice" -gt ${#PROJECTS[@]} ]; then
|
case "$choice" in
|
||||||
|
''|*[!0-9]*)
|
||||||
echo "Invalid choice. Canceling."
|
echo "Invalid choice. Canceling."
|
||||||
cd "$workspace"
|
cd "$workspace"
|
||||||
return 0
|
return 0
|
||||||
fi
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
if [ "$choice" -eq 0 ]; then
|
if [ "$choice" -eq 0 ]; then
|
||||||
echo "Canceled."
|
echo "Canceled."
|
||||||
@@ -120,7 +129,15 @@ function subGotoWorkspace() {
|
|||||||
return 0
|
return 0
|
||||||
fi
|
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
|
else
|
||||||
workspace="$workspace/$1"
|
workspace="$workspace/$1"
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user