Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Autocompat #2382

Merged
merged 1 commit into from
Aug 15, 2024
Merged

Autocompat #2382

merged 1 commit into from
Aug 15, 2024

Conversation

ChrisRackauckas
Copy link
Member

Using:

function autocompat(ctx=Pkg.Types.Context(); io=nothing)
    io = something(io, ctx.io)
    updated_deps = String[]
    for dep_list in (ctx.env.project.deps, ctx.env.project.weakdeps, ctx.env.project.extras),
        (dep, uuid) in dep_list

        compat_str = Pkg.Operations.get_compat_str(ctx.env.project, dep)
        isnothing(compat_str) || continue
        if uuid in ctx.env.manifest
            v = ctx.env.manifest[uuid].version
            v === nothing && (v = "<0.0.1, 1")
        else
            try
                pkg_versions = Pkg.Versions.VersionSpec([Pkg.Operations.get_all_registered_versions(
                    ctx, uuid)...])
                if isempty(pkg_versions)
                    @warn "No versions of $(dep) are registered. Possibly a Standard Library package."
                    v = "<0.0.1, 1"
                else
                    latest_version = Pkg.Operations.get_latest_compatible_version(
                        ctx, uuid, pkg_versions)
                    v = latest_version
                end
            catch err
                @error "Encountered Error $(err) while processing $(dep). Skipping."
                continue
            end
        end
        Pkg.Operations.set_compat(ctx.env.project, dep, string(v)) ||
            Pkg.Types.pkgerror("invalid compat version specifier \"$(string(v))\"")
        push!(updated_deps, dep)
    end
    if isempty(updated_deps)
        Pkg.printpkgstyle(io, :Info, "no misssing compat entries found. No changes made.";
            color=Base.info_color())
    elseif length(updated_deps) == 1
        Pkg.printpkgstyle(io, :Info,
            "new entry set for $(only(updated_deps)) based on its current version";
            color=Base.info_color())
    else
        Pkg.printpkgstyle(io,
            :Info,
            "new entries set for $(join(updated_deps, ", ", " and ")) based on their current versions";
            color=Base.info_color())
    end
    Pkg.Types.write_env(ctx.env)
    return Pkg.Operations.print_compat(ctx; io)
end

for x in readdir("/Users/chrisrackauckas/.julia/dev/OrdinaryDiffEq/lib")
    Pkg.activate("/Users/chrisrackauckas/.julia/dev/OrdinaryDiffEq/lib/$x")
    autocompat()
end

Using:

```julia
function autocompat(ctx=Pkg.Types.Context(); io=nothing)
    io = something(io, ctx.io)
    updated_deps = String[]
    for dep_list in (ctx.env.project.deps, ctx.env.project.weakdeps, ctx.env.project.extras),
        (dep, uuid) in dep_list

        compat_str = Pkg.Operations.get_compat_str(ctx.env.project, dep)
        isnothing(compat_str) || continue
        if uuid in ctx.env.manifest
            v = ctx.env.manifest[uuid].version
            v === nothing && (v = "<0.0.1, 1")
        else
            try
                pkg_versions = Pkg.Versions.VersionSpec([Pkg.Operations.get_all_registered_versions(
                    ctx, uuid)...])
                if isempty(pkg_versions)
                    @warn "No versions of $(dep) are registered. Possibly a Standard Library package."
                    v = "<0.0.1, 1"
                else
                    latest_version = Pkg.Operations.get_latest_compatible_version(
                        ctx, uuid, pkg_versions)
                    v = latest_version
                end
            catch err
                @error "Encountered Error $(err) while processing $(dep). Skipping."
                continue
            end
        end
        Pkg.Operations.set_compat(ctx.env.project, dep, string(v)) ||
            Pkg.Types.pkgerror("invalid compat version specifier \"$(string(v))\"")
        push!(updated_deps, dep)
    end
    if isempty(updated_deps)
        Pkg.printpkgstyle(io, :Info, "no misssing compat entries found. No changes made.";
            color=Base.info_color())
    elseif length(updated_deps) == 1
        Pkg.printpkgstyle(io, :Info,
            "new entry set for $(only(updated_deps)) based on its current version";
            color=Base.info_color())
    else
        Pkg.printpkgstyle(io,
            :Info,
            "new entries set for $(join(updated_deps, ", ", " and ")) based on their current versions";
            color=Base.info_color())
    end
    Pkg.Types.write_env(ctx.env)
    return Pkg.Operations.print_compat(ctx; io)
end

for x in readdir("/Users/chrisrackauckas/.julia/dev/OrdinaryDiffEq/lib")
    Pkg.activate("/Users/chrisrackauckas/.julia/dev/OrdinaryDiffEq/lib/$x")
    autocompat()
end
```
@ChrisRackauckas
Copy link
Member Author

This would have been much easier if JuliaLang/Pkg.jl#3266 existed!

@ChrisRackauckas ChrisRackauckas merged commit e98b7d4 into master Aug 15, 2024
57 of 61 checks passed
@ChrisRackauckas ChrisRackauckas deleted the autocompat branch August 15, 2024 06:07
Comment on lines +28 to +32
OrdinaryDiffEqCore = "<0.0.1, 1"
OrdinaryDiffEqDifferentiation = "<0.0.1, 1"
OrdinaryDiffEqSDIRK = "<0.0.1, 1"
OrdinaryDiffEqTsit5 = "<0.0.1, 1"
OrdinaryDiffEqVerner = "<0.0.1, 1"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Forgot to mention this on slack, for packages without a registered version it assumes stdlib and puts this in compat

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That compat actually works fine though since the first version for everything is 1.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants