nushell-plugins/scripts/lib/cargo_toml_diff.nu
Jesús Pérez b99dcc83c3 feat: major repository modernization and tracking cleanup
## Summary

Comprehensive repository cleanup focusing on plugin dependency management, documentation improvements, and git tracking optimization.

## Key Changes

### 🔧 Core Infrastructure
- Synchronized all nu-* dependencies across plugins for version consistency
- Enhanced upstream tracking and automation systems
- Removed nushell directory from git tracking for cleaner repository management

### 📚 Documentation
- Significantly expanded README.md with comprehensive development guides
- Added detailed workflow documentation and command references
- Improved plugin collection overview and usage examples

### 🧹 Repository Cleanup
- Removed legacy bash scripts (build-all.sh, collect-install.sh, make_plugin.sh)
- Streamlined automation through unified justfile and nushell script approach
- Updated .gitignore with nushell directory and archive patterns
- Removed nushell directory from git tracking to prevent unwanted changes

### 🔌 Plugin Updates
- **nu_plugin_image**: Major refactoring with modular architecture improvements
- **nu_plugin_hashes**: Enhanced functionality and build system improvements
- **nu_plugin_highlight**: Updated for new plugin API compatibility
- **nu_plugin_clipboard**: Dependency synchronization
- **nu_plugin_desktop_notifications**: Version alignment
- **nu_plugin_port_extension & nu_plugin_qr_maker**: Consistency updates
- **nu_plugin_kcl & nu_plugin_tera**: Submodule synchronization

### 🏗️ Git Tracking Optimization
- Removed nushell directory from version control for cleaner repository management
- Added comprehensive .gitignore patterns for build artifacts and archives

## Statistics
- 2,082 files changed
- 2,373 insertions, 339,936 deletions
- Net reduction of 337,563 lines (primarily from removing nushell directory tracking)

## Benefits
- Complete version consistency across all plugins
- Cleaner repository with optimized git tracking
- Improved developer experience with streamlined workflows
- Enhanced documentation and automation
- Reduced repository size and complexity

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-20 15:18:58 +01:00

195 lines
6.4 KiB
Plaintext

# Cargo.toml Diff Analyzer Library
# Provides functions to compare Cargo.toml files and categorize changes
# Parse a Cargo.toml file and extract dependency information
export def parse_cargo_toml [file_path: string] {
if not ($file_path | path exists) {
error make {msg: $"File not found: ($file_path)"}
}
let content = open $file_path
let dependencies = try {
$content | get dependencies? | default {}
} catch {
{}
}
let dev_dependencies = try {
$content | get dev-dependencies? | default {}
} catch {
{}
}
let build_dependencies = try {
$content | get build-dependencies? | default {}
} catch {
{}
}
{
package: ($content | get package? | default {}),
dependencies: $dependencies,
dev_dependencies: $dev_dependencies,
build_dependencies: $build_dependencies,
raw_content: $content
}
}
# Extract nu-* dependencies from parsed Cargo.toml
export def extract_nu_dependencies [parsed_cargo: record] {
let all_deps = ($parsed_cargo.dependencies | transpose key value)
$all_deps
| where $it.key =~ "^nu-"
| reduce -f {} {|dep, acc|
$acc | upsert $dep.key $dep.value
}
}
# Compare two Cargo.toml files and categorize differences
export def compare_cargo_tomls [local_path: string, upstream_path: string] {
let local = parse_cargo_toml $local_path
let upstream = parse_cargo_toml $upstream_path
let local_nu_deps = extract_nu_dependencies $local
let upstream_nu_deps = extract_nu_dependencies $upstream
# Find all dependency differences
let all_local_deps = $local.dependencies | transpose key value
let all_upstream_deps = $upstream.dependencies | transpose key value
# Dependencies only in local
let local_only = $all_local_deps
| where {|dep|
not ($all_upstream_deps | any {|up| $up.key == $dep.key})
}
# Dependencies only in upstream
let upstream_only = $all_upstream_deps
| where {|dep|
not ($all_local_deps | any {|loc| $loc.key == $dep.key})
}
# Dependencies with different versions
let version_diffs = $all_local_deps
| where {|local_dep|
let upstream_dep = $all_upstream_deps | where key == $local_dep.key | first
if ($upstream_dep | is-empty) {
false
} else {
$local_dep.value != $upstream_dep.value
}
}
| each {|dep|
let upstream_ver = $all_upstream_deps | where key == $dep.key | first | get value
{
dependency: $dep.key,
local_version: $dep.value,
upstream_version: $upstream_ver,
is_nu_dependency: ($dep.key =~ "^nu-")
}
}
# Check if only nu-* dependencies differ
let non_nu_changes = $version_diffs | where not $it.is_nu_dependency
let only_nu_deps_changed = (($local_only | length) == 0) and (($upstream_only | length) == 0) and (($non_nu_changes | length) == 0)
# Package version comparison
let package_diff = if ($local.package.version? != null) and ($upstream.package.version? != null) {
if $local.package.version != $upstream.package.version {
{
local_version: $local.package.version,
upstream_version: $upstream.package.version
}
} else {
null
}
} else {
null
}
{
dependencies: {
local_only: $local_only,
upstream_only: $upstream_only,
version_differences: $version_diffs
},
package: {
version_diff: $package_diff
},
analysis: {
only_nu_deps_changed: $only_nu_deps_changed,
nu_deps_changed: ($version_diffs | where $it.is_nu_dependency),
non_nu_deps_changed: $non_nu_changes,
has_changes: ((($version_diffs | length) > 0) or (($local_only | length) > 0) or (($upstream_only | length) > 0) or ($package_diff != null))
}
}
}
# Check if changes are safe for auto-OK based on nu dependencies only
export def is_safe_for_auto_ok [diff_result: record, nu_managed_deps: list<string>] {
let analysis = $diff_result.analysis
# Must have changes to be relevant
if not $analysis.has_changes {
return false
}
# Check if all changed dependencies are in the managed list
let all_changed_deps = $analysis.nu_deps_changed | get dependency
let all_managed = $all_changed_deps | all {|dep| $dep in $nu_managed_deps}
# Safe if only nu deps changed AND all changed deps are managed
$analysis.only_nu_deps_changed and $all_managed
}
# Generate a human-readable diff summary
export def generate_diff_summary [diff_result: record] {
let analysis = $diff_result.analysis
if not $analysis.has_changes {
return "No changes detected"
}
mut summary = []
# Package version changes
if ($diff_result.package.version_diff != null) {
let pkg_diff = $diff_result.package.version_diff
$summary = ($summary | append $"Package version: ($pkg_diff.local_version) → ($pkg_diff.upstream_version)")
}
# Nu dependency changes
if ($analysis.nu_deps_changed | length) > 0 {
let nu_changes = $analysis.nu_deps_changed
| each {|dep| $" ($dep.dependency): ($dep.local_version) → ($dep.upstream_version)"}
| str join "\n"
$summary = ($summary | append $"Nu dependencies:\n($nu_changes)")
}
# Non-nu dependency changes
if ($analysis.non_nu_deps_changed | length) > 0 {
let other_changes = $analysis.non_nu_deps_changed
| each {|dep| $" ($dep.dependency): ($dep.local_version) → ($dep.upstream_version)"}
| str join "\n"
$summary = ($summary | append $"Other dependencies:\n($other_changes)")
}
# New dependencies
if ($diff_result.dependencies.upstream_only | length) > 0 {
let new_deps = $diff_result.dependencies.upstream_only
| each {|dep| $" ($dep.key): ($dep.value)"}
| str join "\n"
$summary = ($summary | append $"New dependencies:\n($new_deps)")
}
# Removed dependencies
if ($diff_result.dependencies.local_only | length) > 0 {
let removed_deps = $diff_result.dependencies.local_only
| each {|dep| $" ($dep.key): ($dep.value)"}
| str join "\n"
$summary = ($summary | append $"Removed dependencies:\n($removed_deps)")
}
$summary | str join "\n\n"
}