mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
Improve bash script logging with automatic indentation and script names
- Add automatic nesting detection using SHLVL and terminal detection - Indent log output when scripts call other scripts (log_action, log_warn, log_detail) - Add script filename to log_title for better traceability - Update documentation with indentation examples - Use portable approach that works across bash, zsh, and different platforms 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f0b5f67f1f
commit
64d55dde21
@ -5,6 +5,8 @@ dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
|
||||
# Source logging utilities
|
||||
source "$dir/logging/logging.sh"
|
||||
|
||||
log_title "Spine Runtimes Code Formatter"
|
||||
|
||||
# Default: format all languages
|
||||
FORMAT_JAVA=true
|
||||
FORMAT_TS=true
|
||||
|
||||
@ -54,4 +54,25 @@ Spine-C++ Build
|
||||
- Show errors prominently with `log_error_output`
|
||||
- Use inline results: `log_action` + `log_ok/fail`
|
||||
- Let sub-scripts handle their own logging, e.g. do not log "Building Spine-C++" when calling `spine-cpp/build.sh`
|
||||
- Do not capture output of sub-scripts like you do for "normal" commands. That would swallow their logging.
|
||||
- Do not capture output of sub-scripts like you do for "normal" commands. That would swallow their logging.
|
||||
|
||||
## Automatic Indentation
|
||||
|
||||
The logging system automatically detects when scripts call other scripts and indents the child script output to show the hierarchy:
|
||||
|
||||
- **Main script**: No extra indentation
|
||||
- **Child scripts**: Automatically indented based on nesting level
|
||||
- **Child script actions**: Further indented to show they're sub-operations
|
||||
|
||||
Example:
|
||||
```
|
||||
Spine Runtimes Code Formatter
|
||||
C/C++ Formatting
|
||||
Checking for formatters/.clang-format... ✓
|
||||
Formatting 908 C/C++ files... ✓
|
||||
Java Formatting
|
||||
Formatting 122 Java files... ✓
|
||||
✓ All formatting completed
|
||||
```
|
||||
|
||||
This happens automatically - no changes needed in your scripts. Each script detects its nesting level when `logging.sh` is sourced.
|
||||
@ -47,15 +47,54 @@ NC='\033[0m' # No Color
|
||||
# 3. Consistent spacing - clean vertical rhythm
|
||||
# 4. Accessible - readable without colors
|
||||
|
||||
# Detect script nesting level for automatic indentation
|
||||
# This runs once when logging.sh is sourced
|
||||
detect_nesting_level() {
|
||||
local nesting=0
|
||||
|
||||
# Check parent process for script execution
|
||||
if [ -n "$PPID" ]; then
|
||||
local parent_info=$(ps -p $PPID -o comm,args 2>/dev/null | tail -1)
|
||||
local parent_comm=$(echo "$parent_info" | awk '{print $1}')
|
||||
local parent_args=$(echo "$parent_info" | awk '{for(i=2;i<=NF;i++) printf "%s ", $i}')
|
||||
|
||||
case "$parent_comm" in
|
||||
*bash|*sh|bash|sh)
|
||||
if echo "$parent_args" | grep -q '\.sh\|\.bash' && ! echo "$parent_args" | grep -q 'claude\|snapshot\|/tmp/\|eval'; then
|
||||
nesting=1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Fallback to SHLVL-based detection if no parent script found
|
||||
if [ $nesting -eq 0 ] && [ $((SHLVL - 1)) -gt 0 ]; then
|
||||
# Check if non-interactive (likely scripted)
|
||||
if [ ! -t 0 ] && [ ! -t 1 ]; then
|
||||
nesting=$((SHLVL - 1))
|
||||
fi
|
||||
fi
|
||||
|
||||
echo $nesting
|
||||
}
|
||||
|
||||
# Calculate indentation spaces based on nesting level (local to this sourcing)
|
||||
SPINE_LOG_NESTING_LEVEL=$(detect_nesting_level)
|
||||
SPINE_LOG_INDENT_SPACES=$(printf "%*s" $((SPINE_LOG_NESTING_LEVEL * 2)) "")
|
||||
|
||||
# Main header for script/tool name
|
||||
log_title() {
|
||||
echo -e "${GREEN}${BOLD}$1${NC}"
|
||||
if [ $SPINE_LOG_NESTING_LEVEL -gt 0 ]; then
|
||||
echo -e "${SPINE_LOG_INDENT_SPACES}${GREEN}${BOLD}$1${NC}"
|
||||
else
|
||||
echo -e "${GREEN}${BOLD}$1${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
# Individual actions/steps - inline result format
|
||||
log_action() {
|
||||
echo -n " $1... "
|
||||
echo -n "${SPINE_LOG_INDENT_SPACES} $1... "
|
||||
}
|
||||
|
||||
# Results - success/failure/info (on same line)
|
||||
@ -68,7 +107,7 @@ log_fail() {
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e " ${YELLOW}!${NC} ${YELLOW}$1${NC}"
|
||||
echo -e "${SPINE_LOG_INDENT_SPACES} ${YELLOW}!${NC} ${YELLOW}$1${NC}"
|
||||
}
|
||||
|
||||
log_skip() {
|
||||
@ -87,5 +126,5 @@ log_summary() {
|
||||
|
||||
# Detailed output (errors, etc.)
|
||||
log_detail() {
|
||||
echo -e " ${GRAY}$1${NC}"
|
||||
echo -e "${SPINE_LOG_INDENT_SPACES} ${GRAY}$1${NC}"
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user