mirror of
https://github.com/Karmaz95/Snake_Apple.git
synced 2026-03-30 14:00:16 +02:00
149 lines
4.6 KiB
Bash
149 lines
4.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# Check if the correct number of arguments provided
|
|
if [ $# -ne 2 ]; then
|
|
echo "Usage: $0 OLD_APP NEW_APP"
|
|
echo "Example: $0 OLD/Fantastical.app NEW/Fantastical.app"
|
|
exit 1
|
|
fi
|
|
|
|
OLD_APP="$1"
|
|
NEW_APP="$2"
|
|
|
|
# Check if directories exist
|
|
if [ ! -d "$OLD_APP" ]; then
|
|
echo "Error: Old app directory '$OLD_APP' does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -d "$NEW_APP" ]; then
|
|
echo "Error: New app directory '$NEW_APP' does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
echo "=========================================="
|
|
echo "APP PATCHING ANALYSIS"
|
|
echo "=========================================="
|
|
echo "Old App: $OLD_APP"
|
|
echo "New App: $NEW_APP"
|
|
echo "=========================================="
|
|
|
|
# Run diff with -r for recursive and -q for brief output
|
|
DIFF_OUTPUT=$(diff -rq "$OLD_APP" "$NEW_APP" 2>/dev/null)
|
|
|
|
# Process new files
|
|
echo -e "\n🆕 NEW FILES:"
|
|
echo "----------------------------------------"
|
|
NEW_LIST=$(echo "$DIFF_OUTPUT" | grep "Only in $NEW_APP" | sed "s|Only in $NEW_APP/||" | sed 's|: | → |')
|
|
if [ -n "$NEW_LIST" ]; then
|
|
echo "$NEW_LIST" | while read -r line; do
|
|
echo " + $line"
|
|
done
|
|
else
|
|
echo " (No new files)"
|
|
fi
|
|
|
|
# Process deleted files
|
|
echo -e "\n❌ DELETED FILES:"
|
|
echo "----------------------------------------"
|
|
DELETED_LIST=$(echo "$DIFF_OUTPUT" | grep "Only in $OLD_APP" | sed "s|Only in $OLD_APP/||" | sed 's|: | → |')
|
|
if [ -n "$DELETED_LIST" ]; then
|
|
echo "$DELETED_LIST" | while read -r line; do
|
|
echo " - $line"
|
|
done
|
|
else
|
|
echo " (No deleted files)"
|
|
fi
|
|
|
|
# Process modified files
|
|
echo -e "\n📝 MODIFIED FILES:"
|
|
echo "----------------------------------------"
|
|
MODIFIED_LIST=$(echo "$DIFF_OUTPUT" | grep "^Files.*differ$" | sed "s|Files $OLD_APP/||" | sed "s| and $NEW_APP/.*differ$||")
|
|
if [ -n "$MODIFIED_LIST" ]; then
|
|
echo "$MODIFIED_LIST" | while read -r line; do
|
|
echo " ~ $line"
|
|
done
|
|
else
|
|
echo " (No modified files)"
|
|
fi
|
|
|
|
# Find and report symlink changes
|
|
echo -e "\n🔗 SYMLINK CHANGES:"
|
|
echo "----------------------------------------"
|
|
SYMLINK_CHANGES=""
|
|
|
|
# Find all symlinks in OLD_APP
|
|
while IFS= read -r old_symlink; do
|
|
rel_path="${old_symlink#$OLD_APP/}"
|
|
new_symlink="$NEW_APP/$rel_path"
|
|
|
|
if [ ! -L "$new_symlink" ]; then
|
|
# Symlink was removed or converted to regular file
|
|
SYMLINK_CHANGES="${SYMLINK_CHANGES} - Removed: $rel_path\n"
|
|
else
|
|
# Check if symlink target changed
|
|
old_target=$(readlink "$old_symlink")
|
|
new_target=$(readlink "$new_symlink")
|
|
if [ "$old_target" != "$new_target" ]; then
|
|
SYMLINK_CHANGES="${SYMLINK_CHANGES} ~ Modified: $rel_path\n"
|
|
SYMLINK_CHANGES="${SYMLINK_CHANGES} Old target: $old_target\n"
|
|
SYMLINK_CHANGES="${SYMLINK_CHANGES} New target: $new_target\n"
|
|
fi
|
|
fi
|
|
done < <(find "$OLD_APP" -type l)
|
|
|
|
# Find new symlinks in NEW_APP
|
|
while IFS= read -r new_symlink; do
|
|
rel_path="${new_symlink#$NEW_APP/}"
|
|
old_symlink="$OLD_APP/$rel_path"
|
|
|
|
if [ ! -L "$old_symlink" ]; then
|
|
# New symlink added
|
|
new_target=$(readlink "$new_symlink")
|
|
SYMLINK_CHANGES="${SYMLINK_CHANGES} + Added: $rel_path → $new_target\n"
|
|
fi
|
|
done < <(find "$NEW_APP" -type l)
|
|
|
|
if [ -n "$SYMLINK_CHANGES" ]; then
|
|
echo -e "$SYMLINK_CHANGES"
|
|
else
|
|
echo " (No symlink changes)"
|
|
fi
|
|
|
|
# Count totals
|
|
NEW_COUNT=$(echo "$DIFF_OUTPUT" | grep -c "Only in $NEW_APP" 2>/dev/null || echo "0")
|
|
DELETED_COUNT=$(echo "$DIFF_OUTPUT" | grep -c "Only in $OLD_APP" 2>/dev/null || echo "0")
|
|
MODIFIED_COUNT=$(echo "$DIFF_OUTPUT" | grep -c "^Files.*differ$" 2>/dev/null || echo "0")
|
|
|
|
# Ensure counts are single integers
|
|
NEW_COUNT=$(echo "$NEW_COUNT" | head -n1 | tr -d '\n')
|
|
DELETED_COUNT=$(echo "$DELETED_COUNT" | head -n1 | tr -d '\n')
|
|
MODIFIED_COUNT=$(echo "$MODIFIED_COUNT" | head -n1 | tr -d '\n')
|
|
|
|
# Summary
|
|
echo -e "\n📊 SUMMARY:"
|
|
echo "=========================================="
|
|
echo "New files: $NEW_COUNT"
|
|
echo "Deleted files: $DELETED_COUNT"
|
|
echo "Modified files: $MODIFIED_COUNT"
|
|
echo "Total changes: $((NEW_COUNT + DELETED_COUNT + MODIFIED_COUNT))"
|
|
echo "=========================================="
|
|
|
|
# Binary file detection
|
|
BINARY_CHANGES=""
|
|
while IFS= read -r file; do
|
|
if [ -n "$file" ]; then
|
|
full_path="$NEW_APP/$file"
|
|
if [ -f "$full_path" ] && [ ! -L "$full_path" ]; then
|
|
file_type=$(file -b "$full_path" 2>/dev/null)
|
|
if echo "$file_type" | grep -qE "(executable|shared library)"; then
|
|
BINARY_CHANGES="$BINARY_CHANGES$file\n"
|
|
fi
|
|
fi
|
|
fi
|
|
done <<< "$MODIFIED_LIST"
|
|
|
|
if [ -n "$BINARY_CHANGES" ]; then
|
|
echo "⚠️ Binary files modified:"
|
|
echo -e "$BINARY_CHANGES" | sed 's/^/ /'
|
|
fi |