Skip to content

Commit 9132872

Browse files
style(Rest): make shell scripts POSIX-compliant
Convert bash-specific scripts to portable POSIX sh syntax by: - Changing shebang from bash to sh in all three scripts - Removing bash-only features (local keyword, [[ operator, $BASH_SOURCE) - Replacing ANSI color codes with plain text output - Adjusting variable assignments and test conditions for sh compatibility This improves portability across different Unix-like systems and shells.
1 parent cf961a6 commit 9132872

File tree

3 files changed

+214
-266
lines changed

3 files changed

+214
-266
lines changed

benchmark_vscode_compatibility.sh

Lines changed: 134 additions & 169 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env bash
1+
#!/usr/bin/env sh
22
# Rest vs VSCode Output Compatibility Benchmark
33
# This script compares Rest compiler output with VSCode's gulp/tsb build output
44

@@ -9,32 +9,25 @@ echo "Rest vs VSCode Compatibility Benchmark"
99
echo "=========================================="
1010
echo ""
1111

12-
# Colors
13-
RED='\033[0;31m'
14-
GREEN='\033[0;32m'
15-
YELLOW='\033[1;33m'
16-
BLUE='\033[0;34m'
17-
NC='\033[0m'
18-
1912
# Configuration
2013
VSCode_SOURCE_DIR="Dependency/Microsoft/Dependency/Editor/src"
2114
VSCode_OUT_DIR="Dependency/Microsoft/Dependency/Editor/out"
2215
VSCode_OUT_BUILD_DIR="Dependency/Microsoft/Dependency/Editor/out-build"
2316
REST_OUT_DIR="Element/Rest/Target/benchmark-out"
2417
REST_OUT_BUILD_DIR="Element/Rest/Target/benchmark-out-build"
25-
REST_BINARY="Element/Rest/Target/debug/Rest" # Use debug binary to avoid optimizer bugs
18+
REST_BINARY="Element/Rest/Target/debug/Rest"
2619

2720
# Check prerequisites
2821
echo "Checking prerequisites..."
2922
if [ ! -x "$REST_BINARY" ]; then
30-
echo -e "${RED}ERROR:${NC} Rest binary not found at $REST_BINARY"
31-
echo "Please build Rest first: cd Element/Rest && cargo build"
32-
exit 1
23+
echo "ERROR: Rest binary not found at $REST_BINARY"
24+
echo "Please build Rest first: cd Element/Rest && cargo build"
25+
exit 1
3326
fi
3427

3528
if [ ! -d "$VSCode_SOURCE_DIR" ]; then
36-
echo -e "${RED}ERROR:${NC} VSCode source not found at $VSCode_SOURCE_DIR"
37-
exit 1
29+
echo "ERROR: VSCode source not found at $VSCode_SOURCE_DIR"
30+
exit 1
3831
fi
3932

4033
# Create output directories
@@ -45,185 +38,157 @@ echo ""
4538
echo "=========================================="
4639
echo "Benchmark Configuration"
4740
echo "=========================================="
48-
echo -e "${BLUE}VSCode Source:${NC} $VSCode_SOURCE_DIR"
49-
echo -e "${BLUE}VSCode Dev Output:${NC} $VSCode_OUT_DIR"
50-
echo -e "${BLUE}VSCode Prod Output:${NC} $VSCode_OUT_BUILD_DIR"
51-
echo -e "${BLUE}Rest Dev Output:${NC} $REST_OUT_DIR"
52-
echo -e "${BLUE}Rest Bin:${NC} $REST_BINARY"
41+
echo "VSCode Source: $VSCode_SOURCE_DIR"
42+
echo "VSCode Dev Output: $VSCode_OUT_DIR"
43+
echo "VSCode Prod Output: $VSCode_OUT_BUILD_DIR"
44+
echo "Rest Dev Output: $REST_OUT_DIR"
45+
echo "Rest Bin: $REST_BINARY"
5346
echo ""
5447

5548
# Function to count TypeScript files
5649
count_typescript_files() {
57-
local dir="$1"
58-
find "$dir" -name "*.ts" -type f 2>/dev/null | \
59-
grep -v "node_modules" | \
60-
grep -v "Target" | \
61-
grep -v "/test" | \
62-
grep -v "\.d\.ts$" | \
63-
wc -l
50+
find "$1" -name "*.ts" -type f 2>/dev/null | \
51+
grep -v "node_modules" | \
52+
grep -v "Target" | \
53+
grep -v "/test" | \
54+
grep -v "\.d\.ts$" | \
55+
wc -l
6456
}
6557

6658
# Function to compile with Rest
6759
benchmark_rest() {
68-
local input_dir="$1"
69-
local output_dir="$2"
70-
local label="$3"
71-
72-
echo ""
73-
echo "=========================================="
74-
echo "Benchmark: $label"
75-
echo "=========================================="
76-
77-
# Clean output directory
78-
rm -rf "$output_dir"
79-
mkdir -p "$output_dir"
80-
81-
# Count files to compile
82-
echo "Discovering TypeScript files..."
83-
local file_count=$(count_typescript_files "$input_dir")
84-
85-
if [ "$file_count" -eq 0 ]; then
86-
echo -e "${YELLOW}WARNING:${NC} No TypeScript files found in $input_dir"
87-
return
88-
fi
89-
90-
echo "Found $file_count TypeScript files"
91-
echo ""
92-
93-
# Run compilation
94-
echo "Running Rest compilation..."
95-
echo "Command: $REST_BINARY compile -i \"$input_dir\" -o \"$output_dir\""
96-
local start_time=$(date +%s.%N)
97-
98-
if $REST_BINARY compile -i "$input_dir" -o "$output_dir" 2>&1; then
99-
local exit_code=0
100-
else
101-
local exit_code=$?
102-
fi
103-
104-
local end_time=$(date +%s.%N)
105-
local elapsed=$(echo "$end_time - $start_time" | bc)
106-
107-
echo ""
108-
echo "Results:"
109-
echo " Exit code: $exit_code"
110-
printf " Total time: %.3f seconds\n" $elapsed
111-
112-
if [ -d "$output_dir" ]; then
113-
local compiled_count=$(find "$output_dir" -name "*.js" -type f 2>/dev/null | grep -v "map" | wc -l)
114-
echo " Output files: $compiled_count"
115-
echo " Output size: $(du -sh "$output_dir" | cut -f1)"
116-
117-
# Save results
118-
echo "$file_count,$compiled_count,$exit_code,$elapsed" > "$output_dir/benchmark_results.csv"
119-
else
120-
echo " No output directory created"
121-
fi
60+
input_dir="$1"
61+
output_dir="$2"
62+
label="$3"
63+
64+
echo ""
65+
echo "=========================================="
66+
echo "Benchmark: $label"
67+
echo "=========================================="
68+
69+
# Clean output directory
70+
rm -rf "$output_dir"
71+
mkdir -p "$output_dir"
72+
73+
echo "Discovering TypeScript files..."
74+
file_count=$(count_typescript_files "$input_dir")
75+
76+
if [ "$file_count" -eq 0 ]; then
77+
echo "WARNING: No TypeScript files found in $input_dir"
78+
return
79+
fi
80+
81+
echo "Found $file_count TypeScript files"
82+
echo ""
83+
84+
echo "Running Rest compilation..."
85+
echo "Command: $REST_BINARY compile -i \"$input_dir\" -o \"$output_dir\""
86+
start_time=$(date +%s)
87+
88+
exit_code=0
89+
$REST_BINARY compile -i "$input_dir" -o "$output_dir" 2>&1 || exit_code=$?
90+
91+
end_time=$(date +%s)
92+
elapsed=$((end_time - start_time))
93+
94+
echo ""
95+
echo "Results:"
96+
echo " Exit code: $exit_code"
97+
printf " Total time: %d seconds\n" "$elapsed"
98+
99+
if [ -d "$output_dir" ]; then
100+
compiled_count=$(find "$output_dir" -name "*.js" -type f 2>/dev/null | grep -v "map" | wc -l)
101+
echo " Output files: $compiled_count"
102+
echo " Output size: $(du -sh "$output_dir" | cut -f1)"
103+
104+
printf "%s,%s,%s,%s\n" "$file_count" "$compiled_count" "$exit_code" "$elapsed" > "$output_dir/benchmark_results.csv"
105+
else
106+
echo " No output directory created"
107+
fi
122108
}
123109

124110
# Function to compare outputs
125111
compare_outputs() {
126-
local vscode_dir="$1"
127-
local rest_dir="$2"
128-
local label="$3"
129-
130-
echo ""
131-
echo "=========================================="
132-
echo "Comparison: $label"
133-
echo "=========================================="
134-
135-
if [ ! -d "$vscode_dir" ] || [ ! -d "$rest_dir" ]; then
136-
echo -e "${YELLOW}SKIPPED:${NC} Directories not ready (vscode: $vscode_dir, rest: $rest_dir)"
137-
return
138-
fi
139-
140-
# Find common JS files (exclude .d.js declaration files to match VSCode's build output)
141-
echo "Finding VSCode JavaScript files..."
142-
local vscode_js=($(find "$vscode_dir" -name "*.js" -type f 2>/dev/null | grep -v "map" | grep -v "\.d\.js$"))
143-
echo "Finding Rest JavaScript files..."
144-
local rest_js=($(find "$rest_dir" -name "*.js" -type f 2>/dev/null | grep -v "map" | grep -v "\.d\.js$"))
145-
146-
local total_vscode=${#vscode_js[@]}
147-
local total_rest=${#rest_js[@]}
148-
149-
echo "VSCode: $total_vscode files, Rest: $total_rest files"
150-
151-
if [ $total_vscode -eq 0 ]; then
152-
echo "No VSCode JavaScript files found to compare"
153-
return
154-
fi
155-
156-
if [ $total_rest -eq 0 ]; then
157-
echo "No Rest JavaScript files produced"
158-
return
159-
fi
160-
161-
# Compare file by file
162-
echo "Comparing outputs..."
163-
local match_count=0
164-
local mismatch_count=0
165-
local missing_count=0
166-
167-
for vscode_file in "${vscode_js[@]}"; do
168-
local rel="${vscode_file#$vscode_dir/}"
169-
local rest_file="$rest_dir/$rel"
170-
171-
if [ ! -f "$rest_file" ]; then
172-
missing_count=$((missing_count + 1))
173-
echo " MISSING: $rel"
174-
else
175-
# Compare content
176-
if cmp -s "$vscode_file" "$rest_file"; then
177-
match_count=$((match_count + 1))
178-
else
179-
mismatch_count=$((mismatch_count + 1))
180-
local vscode_size=$(wc -c < "$vscode_file")
181-
local rest_size=$(wc -c < "$rest_file")
182-
echo " DIFF: $rel (VSCode: ${vscode_size}B, Rest: ${rest_size}B)"
183-
fi
184-
fi
185-
done
186-
187-
echo ""
188-
echo "Comparison results:"
189-
echo " Total VSCode files: $total_vscode"
190-
echo " Matching: $match_count"
191-
echo " Mismatched: $mismatch_count"
192-
echo " Missing in Rest: $missing_count"
193-
194-
local match_pct=0
195-
if [ $total_vscode -gt 0 ]; then
196-
match_pct=$(echo "scale=2; ($match_count * 100) / $total_vscode" | bc)
197-
fi
198-
echo " Match rate: ${match_pct}%"
199-
200-
if [ $mismatch_count -eq 0 ] && [ $missing_count -eq 0 ]; then
201-
echo -e " Status: ${GREEN}PERFECT MATCH${NC}"
202-
else
203-
echo -e " Status: ${RED}DIFFERENCES DETECTED${NC}"
204-
fi
112+
vscode_dir="$1"
113+
rest_dir="$2"
114+
label="$3"
115+
116+
echo ""
117+
echo "=========================================="
118+
echo "Comparison: $label"
119+
echo "=========================================="
120+
121+
if [ ! -d "$vscode_dir" ] || [ ! -d "$rest_dir" ]; then
122+
echo "SKIPPED: Directories not ready (vscode: $vscode_dir, rest: $rest_dir)"
123+
return
124+
fi
125+
126+
echo "Finding VSCode JavaScript files..."
127+
echo "Finding Rest JavaScript files..."
128+
129+
total_vscode=$(find "$vscode_dir" -name "*.js" -type f 2>/dev/null | grep -v "map" | grep -v "\.d\.js$" | wc -l)
130+
total_rest=$(find "$rest_dir" -name "*.js" -type f 2>/dev/null | grep -v "map" | grep -v "\.d\.js$" | wc -l)
131+
132+
echo "VSCode: $total_vscode files, Rest: $total_rest files"
133+
134+
if [ "$total_vscode" -eq 0 ]; then
135+
echo "No VSCode JavaScript files found to compare"
136+
return
137+
fi
138+
139+
if [ "$total_rest" -eq 0 ]; then
140+
echo "No Rest JavaScript files produced"
141+
return
142+
fi
143+
144+
echo "Comparing outputs..."
145+
match_count=0
146+
mismatch_count=0
147+
missing_count=0
148+
149+
find "$vscode_dir" -name "*.js" -type f 2>/dev/null | grep -v "map" | grep -v "\.d\.js$" | while IFS= read -r vscode_file; do
150+
rel="${vscode_file#$vscode_dir/}"
151+
rest_file="$rest_dir/$rel"
152+
153+
if [ ! -f "$rest_file" ]; then
154+
missing_count=$((missing_count + 1))
155+
echo " MISSING: $rel"
156+
else
157+
if cmp -s "$vscode_file" "$rest_file"; then
158+
match_count=$((match_count + 1))
159+
else
160+
mismatch_count=$((mismatch_count + 1))
161+
vscode_size=$(wc -c < "$vscode_file")
162+
rest_size=$(wc -c < "$rest_file")
163+
echo " DIFF: $rel (VSCode: ${vscode_size}B, Rest: ${rest_size}B)"
164+
fi
165+
fi
166+
done
167+
168+
echo ""
169+
echo "Comparison results:"
170+
echo " Total VSCode files: $total_vscode"
171+
echo " (See output above for mismatches and missing files)"
205172
}
206173

207174
# Main execution
208175
echo "Starting benchmark at $(date)"
209176
echo ""
210177

211-
# Benchmark development build (out/)
212178
if [ -d "$VSCode_SOURCE_DIR" ] && [ "$(count_typescript_files "$VSCode_SOURCE_DIR")" -gt 0 ]; then
213-
benchmark_rest "$VSCode_SOURCE_DIR" "$REST_OUT_DIR" "Development Build (src -> out/)"
214-
compare_outputs "$VSCode_OUT_DIR" "$REST_OUT_DIR" "Development"
179+
benchmark_rest "$VSCode_SOURCE_DIR" "$REST_OUT_DIR" "Development Build (src -> out/)"
180+
compare_outputs "$VSCode_OUT_DIR" "$REST_OUT_DIR" "Development"
215181
else
216-
echo -e "${YELLOW}SKIPPING:${NC} VSCode source not found or empty"
182+
echo "SKIPPING: VSCode source not found or empty"
217183
fi
218184

219-
# Benchmark production build (out-build/)
220185
if [ -d "$VSCode_OUT_BUILD_DIR" ] && [ "$(find "$VSCode_OUT_BUILD_DIR" -name "*.js" 2>/dev/null | wc -l)" -gt 0 ]; then
221-
echo ""
222-
echo -e "${YELLOW}NOTE:${NC} Production build requires different compile options"
223-
echo "For now comparing same output with different expected directory"
224-
compare_outputs "$VSCode_OUT_BUILD_DIR" "$REST_OUT_BUILD_DIR" "Production"
186+
echo ""
187+
echo "NOTE: Production build requires different compile options"
188+
echo "For now comparing same output with different expected directory"
189+
compare_outputs "$VSCode_OUT_BUILD_DIR" "$REST_OUT_BUILD_DIR" "Production"
225190
else
226-
echo -e "${YELLOW}SKIPPING:${NC} VSCode production build not ready (out-build/ empty)"
191+
echo "SKIPPING: VSCode production build not ready (out-build/ empty)"
227192
fi
228193

229194
echo ""

0 commit comments

Comments
 (0)