Skip to content

Commit 2459de8

Browse files
committed
Release v2.0.22: Conflict Impact Analysis, package count, and optional impact analysis
- Added Conflict Impact Analysis (optional with --show-impact flag) - Added --save-impact flag to save impact analysis to composer-update-impact.txt - Added outdated packages count display - Improved progress indicators for verification types - Impact analysis now optional by default (less verbose) - 14 fully supported use cases (previously 13) - Code coverage: 99.58% lines, 90.91% methods - All tests passing (140 tests, 689 assertions) - Complete translations in all 31 supported languages - Updated documentation (CHANGELOG, UPGRADING, USAGE) - composer-update-impact.txt automatically added to .gitignore
1 parent f46a76b commit 2459de8

62 files changed

Lines changed: 5845 additions & 2055 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,5 @@ coverage.xml
3232
.env.local
3333
.env.*.local
3434

35+
# Impact analysis output
36+
composer-update-impact.txt

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ The script uses a lightweight architecture for better maintainability:
6262
- Displaying formatted output from PHP
6363
- Extracting and executing commands for `--run` flag
6464

65-
- **`process-updates.php`** (in vendor): Contains all the complex logic (~710 lines) including:
65+
- **`process-updates.php`** (in vendor): Contains all the complex logic (~643 lines) including:
6666
- Package processing and filtering
6767
- Framework detection and version constraints
6868
- Release information fetching
@@ -178,12 +178,12 @@ All documentation is available in the [`docs/`](docs/) directory:
178178
### Project Documentation
179179
- **[CHANGELOG.md](docs/CHANGELOG.md)** - Version history and all notable changes
180180
- **[UPGRADING.md](docs/UPGRADING.md)** - Upgrade instructions and migration notes
181+
- **[Testing Documentation](docs/TESTING.md)** - Comprehensive testing guide including tests for new features
182+
- **[Implementation Roadmap](docs/IMPLEMENTATION_ROADMAP.md)** - Action plan for implementing not-yet-supported features, ordered by complexity and feasibility
181183
- **[Development Guide](docs/DEVELOPMENT.md)** - Development setup, testing, and CI/CD
182184
- **[CONTRIBUTING.md](docs/CONTRIBUTING.md)** - Guidelines for contributing to the project
183185
- **[BRANCHING.md](docs/BRANCHING.md)** - Branching strategy and workflow
184186
- **[I18N_STRATEGY.md](docs/I18N_STRATEGY.md)** - Internationalization (i18n) implementation strategy
185-
- **[LANGUAGES_PROPOSAL.md](docs/LANGUAGES_PROPOSAL.md)** - Additional languages proposal for future implementation
186-
- **[VERIFICATION.md](docs/VERIFICATION.md)** - Verification and testing documentation
187187

188188
## Contributing
189189

bin/generate-composer-require.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,15 @@ EOF
126126
}
127127

128128
# Parse arguments
129-
RUN_FLAG=""; SHOW_RELEASE_DETAIL=false; SHOW_RELEASE_INFO=false; VERBOSE=false; DEBUG=false
129+
RUN_FLAG=""; SHOW_RELEASE_DETAIL=false; SHOW_RELEASE_INFO=false; SHOW_IMPACT_ANALYSIS=false; SAVE_IMPACT_TO_FILE=false; VERBOSE=false; DEBUG=false
130130
for arg in "$@"; do
131131
case "$arg" in
132132
-h|--help) show_help; exit 0 ;;
133133
--run) RUN_FLAG="--run" ;;
134134
--release-info|--releases) SHOW_RELEASE_INFO=true ;;
135135
--release-detail|--release-full|--detail) SHOW_RELEASE_INFO=true; SHOW_RELEASE_DETAIL=true ;;
136+
--show-impact|--impact) SHOW_IMPACT_ANALYSIS=true ;;
137+
--save-impact) SAVE_IMPACT_TO_FILE=true; SHOW_IMPACT_ANALYSIS=true ;;
136138
-v|--verbose) VERBOSE=true ;;
137139
--debug) DEBUG=true; VERBOSE=true ;;
138140
--no-release-info|--skip-releases|--no-releases) SHOW_RELEASE_INFO=false ;;
@@ -222,10 +224,12 @@ rm -f /tmp/composer-outdated-$$.json
222224
[ "$DEBUG" = "true" ] && echo "🔍 $(get_msg debug_prefix)$(get_msg debug_passing_to_php)" >&2
223225
[ "$DEBUG" = "true" ] && echo " - CONFIG_FILE: ${CONFIG_FILE:-none}" >&2
224226
[ "$DEBUG" = "true" ] && echo " - SHOW_RELEASE_INFO: $SHOW_RELEASE_INFO" >&2
227+
[ "$DEBUG" = "true" ] && echo " - SHOW_IMPACT_ANALYSIS: $SHOW_IMPACT_ANALYSIS" >&2
228+
[ "$DEBUG" = "true" ] && echo " - SAVE_IMPACT_TO_FILE: $SAVE_IMPACT_TO_FILE" >&2
225229
[ "$DEBUG" = "true" ] && echo " - DEBUG: $DEBUG" >&2
226230
[ "$DEBUG" = "true" ] && echo " - PROCESSOR_PHP: $PROCESSOR_PHP" >&2
227231

228-
(OUTDATED_JSON="$OUTDATED_JSON" COMPOSER_BIN="$COMPOSER_BIN" PHP_BIN="$PHP_BIN" CONFIG_FILE="$CONFIG_FILE" SHOW_RELEASE_INFO="$SHOW_RELEASE_INFO" DEBUG="$DEBUG" VERBOSE="$VERBOSE" "$PHP_BIN" -d date.timezone=UTC "$PROCESSOR_PHP" 2>&1 | grep -v '^Warning:' || true) > /tmp/composer-process-$$.out &
232+
(OUTDATED_JSON="$OUTDATED_JSON" COMPOSER_BIN="$COMPOSER_BIN" PHP_BIN="$PHP_BIN" CONFIG_FILE="$CONFIG_FILE" SHOW_RELEASE_INFO="$SHOW_RELEASE_INFO" SHOW_IMPACT_ANALYSIS="$SHOW_IMPACT_ANALYSIS" SAVE_IMPACT_TO_FILE="$SAVE_IMPACT_TO_FILE" DEBUG="$DEBUG" VERBOSE="$VERBOSE" "$PHP_BIN" -d date.timezone=UTC "$PROCESSOR_PHP" 2>&1 | grep -v '^Warning:' || true) > /tmp/composer-process-$$.out &
229233
PROCESS_PID=$!
230234

231235
if [ "${DEBUG:-false}" = "true" ]; then

bin/generate-composer-require.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717
# Default: true
1818
check-dependencies: true
1919

20+
# Note: The following features are automatically enabled when check-dependencies is true:
21+
# - Abandoned Package Detection: Automatically detects and warns about abandoned packages
22+
# when they are filtered due to conflicts. Shows replacement package if available.
23+
# - Fallback Version Suggestions: When a package update conflicts with dependencies,
24+
# the tool automatically searches for compatible older versions that satisfy all
25+
# conflicting constraints and shows them as "Alternative solutions".
26+
# These features require no configuration and work automatically.
27+
2028
# List of packages to ignore during update
2129
# Ignored packages will still be displayed in the output with their available versions,
2230
# but won't be included in the composer require commands.

bin/i18n/ar.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@
3131
'packages_passed_check' => 'الحزم التي اجتازت فحص التبعيات:',
3232
'none' => '(لا شيء)',
3333
'conflicts_with' => 'يتعارض مع:',
34+
'package_abandoned' => 'الحزمة مهجورة',
35+
'replaced_by' => 'استبدلت بـ: %s',
36+
'alternative_solutions' => 'حلول بديلة:',
37+
'compatible_with_conflicts' => 'متوافق مع التبعيات المتعارضة',
38+
'alternative_packages' => 'الحزم البديلة:',
39+
'recommended_replacement' => 'استبدال موصى به',
40+
'similar_functionality' => 'وظائف مماثلة',
3441

3542
// Debug messages
3643
'debug_show_release_info' => 'showReleaseInfo = %s',
@@ -52,5 +59,16 @@
5259
'release_info' => 'معلومات الإصدار',
5360
'release_changelog' => 'سجل التغييرات',
5461
'release_view_on_github' => 'عرض على GitHub',
62+
63+
// Progress messages
64+
'checking_dependency_conflicts' => '⏳ التحقق من تعارضات التبعيات...',
65+
'checking_abandoned_packages' => '⏳ التحقق من الحزم المهجورة...',
66+
'searching_fallback_versions' => '⏳ البحث عن إصدارات احتياطية...',
67+
'searching_alternative_packages' => '⏳ البحث عن حزم بديلة...',
68+
'checking_maintainer_info' => '⏳ التحقق من معلومات المطور...',
69+
70+
// Impact analysis
71+
'impact_analysis' => 'تحليل التأثير: تحديث {package} إلى {version} سيؤثر على:',
72+
'found_outdated_packages' => 'تم العثور على %d حزمة قديمة',
5573
];
5674

bin/i18n/bg.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@
3131
'packages_passed_check' => 'Пакети, които преминаха проверката на зависимости:',
3232
'none' => '(няма)',
3333
'conflicts_with' => 'конфликтира с:',
34+
'package_abandoned' => 'Пакетът е изоставен',
35+
'replaced_by' => 'заменен с: %s',
36+
'alternative_solutions' => 'Алтернативни решения:',
37+
'compatible_with_conflicts' => 'съвместим с конфликтни зависимости',
38+
'alternative_packages' => 'Алтернативни пакети:',
39+
'recommended_replacement' => 'препоръчана замяна',
40+
'similar_functionality' => 'подобна функционалност',
3441

3542
// Debug messages
3643
'debug_show_release_info' => 'showReleaseInfo = %s',
@@ -52,5 +59,16 @@
5259
'release_info' => 'Информация за изданието',
5360
'release_changelog' => 'Дневник на промените',
5461
'release_view_on_github' => 'Преглед в GitHub',
62+
63+
// Progress messages
64+
'checking_dependency_conflicts' => '⏳ Проверка на конфликти на зависимости...',
65+
'checking_abandoned_packages' => '⏳ Проверка на изоставени пакети...',
66+
'searching_fallback_versions' => '⏳ Търсене на резервни версии...',
67+
'searching_alternative_packages' => '⏳ Търсене на алтернативни пакети...',
68+
'checking_maintainer_info' => '⏳ Проверка на информация за поддръжка...',
69+
70+
// Impact analysis
71+
'impact_analysis' => 'Анализ на въздействието: Актуализирането на {package} до {version} ще засегне:',
72+
'found_outdated_packages' => 'Намерени %d остарели пакета',
5573
];
5674

bin/i18n/cs.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@
3131
'packages_passed_check' => 'Balíčky, které prošly kontrolou závislostí:',
3232
'none' => '(žádné)',
3333
'conflicts_with' => 'konfliktuje s:',
34+
'package_abandoned' => 'Balíček je opuštěn',
35+
'replaced_by' => 'nahrazen: %s',
36+
'alternative_solutions' => 'Alternativní řešení:',
37+
'compatible_with_conflicts' => 'kompatibilní s konfliktními závislostmi',
38+
'alternative_packages' => 'Alternativní balíčky:',
39+
'recommended_replacement' => 'doporučená náhrada',
40+
'similar_functionality' => 'podobná funkcionalita',
3441

3542
// Debug messages
3643
'debug_show_release_info' => 'showReleaseInfo = %s',
@@ -52,5 +59,16 @@
5259
'release_info' => 'Informace o verzi',
5360
'release_changelog' => 'Seznam změn',
5461
'release_view_on_github' => 'Zobrazit na GitHubu',
62+
63+
// Progress messages
64+
'checking_dependency_conflicts' => '⏳ Kontrola konfliktů závislostí...',
65+
'checking_abandoned_packages' => '⏳ Kontrola opuštěných balíčků...',
66+
'searching_fallback_versions' => '⏳ Vyhledávání záložních verzí...',
67+
'searching_alternative_packages' => '⏳ Vyhledávání alternativních balíčků...',
68+
'checking_maintainer_info' => '⏳ Kontrola informací o správci...',
69+
70+
// Impact analysis
71+
'impact_analysis' => 'Analýza dopadu: Aktualizace {package} na {version} by ovlivnila:',
72+
'found_outdated_packages' => 'Nalezeno %d zastaralých balíčků',
5573
];
5674

bin/i18n/da.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@
3131
'packages_passed_check' => 'Pakker, der bestod afhængighedstjekket:',
3232
'none' => '(ingen)',
3333
'conflicts_with' => 'konflikt med:',
34+
'package_abandoned' => 'Pakken er forladt',
35+
'replaced_by' => 'erstattet af: %s',
36+
'alternative_solutions' => 'Alternative løsninger:',
37+
'compatible_with_conflicts' => 'kompatibel med konflikterende afhængigheder',
38+
'alternative_packages' => 'Alternative pakker:',
39+
'recommended_replacement' => 'anbefalet erstatning',
40+
'similar_functionality' => 'lignende funktionalitet',
3441

3542
// Debug messages
3643
'debug_show_release_info' => 'showReleaseInfo = %s',
@@ -52,5 +59,16 @@
5259
'release_info' => 'Versionsinformation',
5360
'release_changelog' => 'Ændringslog',
5461
'release_view_on_github' => 'Se på GitHub',
62+
63+
// Progress messages
64+
'checking_dependency_conflicts' => '⏳ Tjekker afhængighedskonflikter...',
65+
'checking_abandoned_packages' => '⏳ Tjekker forladte pakker...',
66+
'searching_fallback_versions' => '⏳ Søger efter fallback-versioner...',
67+
'searching_alternative_packages' => '⏳ Søger efter alternative pakker...',
68+
'checking_maintainer_info' => '⏳ Tjekker maintainer-information...',
69+
70+
// Impact analysis
71+
'impact_analysis' => 'Påvirkningsanalyse: Opdatering af {package} til {version} ville påvirke:',
72+
'found_outdated_packages' => 'Fundet %d forældede pakker',
5573
];
5674

bin/i18n/de.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@
3131
'packages_passed_check' => 'Pakete, die die Abhängigkeitsprüfung bestanden haben:',
3232
'none' => '(keine)',
3333
'conflicts_with' => 'Konflikt mit:',
34+
'package_abandoned' => 'Paket ist eingestellt',
35+
'replaced_by' => 'ersetzt durch: %s',
36+
'alternative_solutions' => 'Alternative Lösungen:',
37+
'compatible_with_conflicts' => 'kompatibel mit widersprüchlichen Abhängigkeiten',
38+
'alternative_packages' => 'Alternative Pakete:',
39+
'recommended_replacement' => 'empfohlene Ersetzung',
40+
'similar_functionality' => 'ähnliche Funktionalität',
3441

3542
// Debug messages
3643
'debug_show_release_info' => 'showReleaseInfo = %s',
@@ -52,5 +59,16 @@
5259
'release_info' => 'Versionsinformationen',
5360
'release_changelog' => 'Änderungsprotokoll',
5461
'release_view_on_github' => 'Auf GitHub anzeigen',
62+
63+
// Progress messages
64+
'checking_dependency_conflicts' => '⏳ Überprüfung von Abhängigkeitskonflikten...',
65+
'checking_abandoned_packages' => '⏳ Überprüfung auf eingestellte Pakete...',
66+
'searching_fallback_versions' => '⏳ Suche nach Fallback-Versionen...',
67+
'searching_alternative_packages' => '⏳ Suche nach alternativen Paketen...',
68+
'checking_maintainer_info' => '⏳ Überprüfung der Maintainer-Informationen...',
69+
70+
// Impact analysis
71+
'impact_analysis' => 'Auswirkungsanalyse: Aktualisierung von {package} auf {version} würde beeinflussen:',
72+
'found_outdated_packages' => '%d veraltete Paket(e) gefunden',
5573
];
5674

bin/i18n/el.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@
3131
'packages_passed_check' => 'Πακέτα που πέρασαν τον έλεγχο εξαρτήσεων:',
3232
'none' => '(κανένα)',
3333
'conflicts_with' => 'σύγκρουση με:',
34+
'package_abandoned' => 'Το πακέτο έχει εγκαταλειφθεί',
35+
'replaced_by' => 'αντικαταστάθηκε από: %s',
36+
'alternative_solutions' => 'Εναλλακτικές λύσεις:',
37+
'compatible_with_conflicts' => 'συμβατό με συγκρουόμενες εξαρτήσεις',
38+
'alternative_packages' => 'Εναλλακτικά πακέτα:',
39+
'recommended_replacement' => 'συνιστώμενη αντικατάσταση',
40+
'similar_functionality' => 'παρόμοια λειτουργικότητα',
3441

3542
// Debug messages
3643
'debug_show_release_info' => 'showReleaseInfo = %s',
@@ -52,5 +59,16 @@
5259
'release_info' => 'Πληροφορίες Έκδοσης',
5360
'release_changelog' => 'Αρχείο Αλλαγών',
5461
'release_view_on_github' => 'Προβολή στο GitHub',
62+
63+
// Progress messages
64+
'checking_dependency_conflicts' => '⏳ Έλεγχος συγκρούσεων εξαρτήσεων...',
65+
'checking_abandoned_packages' => '⏳ Έλεγχος εγκαταλελειμμένων πακέτων...',
66+
'searching_fallback_versions' => '⏳ Αναζήτηση εφεδρικών εκδόσεων...',
67+
'searching_alternative_packages' => '⏳ Αναζήτηση εναλλακτικών πακέτων...',
68+
'checking_maintainer_info' => '⏳ Έλεγχος πληροφοριών συντηρητή...',
69+
70+
// Impact analysis
71+
'impact_analysis' => 'Ανάλυση αντίκτυπου: Η ενημέρωση του {package} στην {version} θα επηρέαζε:',
72+
'found_outdated_packages' => 'Βρέθηκαν %d ξεπερασμένα πακέτα',
5573
];
5674

0 commit comments

Comments
 (0)