[ANN] Introducing Upgradathon Fridays


You need master GitHub.jl for Checks I believe.


FemtoCleaner is working for me. I confirm I am on master GitHub, which is tagged v4.1.0


I tried to upgrade Ipopt.jl . Femtocleaner did not find anything.
Warning when using Ipopt:

julia> @time using Ipopt
WARNING: importing deprecated binding Base.Libdl into Sys.
WARNING: Base.Libdl is deprecated, run `using Libdl` instead
 in module Ipopt
in __init__ at /home/ufechner/.julia/packages/Ipopt/udV2/src/Ipopt.jl
┌ Warning: `contains(haystack, needle)` is deprecated, use `occursin(needle, haystack)` instead.
│   caller = (::getfield(Ipopt, Symbol("##1#2")))(::String) at Ipopt.jl:26
└ @ Ipopt Ipopt.jl:26
  1.425591 seconds (2.26 M allocations: 118.443 MiB, 4.80% gc time) 

The last warning was easy to fix. But how can I fix the first two warnings regarding Base.Libdl? I did not find where this depreciated code is used. It does not seam to happen in Ipopt.jl, but in some dependency.
Any idea?


Pkg3 question: if I want to keep up with the new package developments generally, do I have to

pkg> activate . 
pkg> up

separately in each package/project I am working on? My understanding is that unless I do this, the manifest in each project just remains fixed.

In contrast to v0.6, where the package state was global and a single Pkg.update() would update everything. Note that I am not complaining, I think the new way makes more sense, just asking a clarifying question.


No the package manifests are ignored on the global level AFAICT, so up in the top level environment is enough.


I found Base.Libdl in Ipopt.jl and replaced it with Libdl.

In addition I added at the top:

if VERSION >= v"0.7.0-DEV.3382"
    using Libdl

Is it suggested to use such an if statement?


Sure, or you can include using Compat.Libdl, which should work on both 0.6 and 0.7.


I started to fix the depreciations in the tests of Ipopt, but I realized that most of the depreciations appear in MathProgBase.jl, which is used by Ipopt. Unfortunately the tests of MathProgBase.jl fail, and fixing them is beyond my skills.
Have a look:

Any hints welcome!


Is there a standardized way of telling where a given package is in this upgrade process? For example, Trying to use Distributions.jl led me to problems with Arpack.jl, which were quickly fixed. Distributions still isn’t working. There a a few commits mentioning v0.7, but strangely there’s not a single issue mentioning it. Still, I can’t imagine I’m the only one trying to use it with 0.7 - is that possible?

I’m happy to learn the upgrade process and try to do a couple. But the uncertainty makes it really hard to judge what the road ahead looks like before I can get started on my own project. Any suggestions?


Just create an issue “Update Distributions.jl for Julia 0.7” and discuss the needed work with collaborators. :sunny:


Fair enough, maybe others are wondering the same as me. Thanks :slight_smile:


I was able to install FemtoCleaner as instructed (had to run Pkg.update() a few times). Now, when running the FemtoCleaner, I get an error:

julia> import FemtoCleaner

julia> FemtoCleaner.cleanrepo("home/tim/.julia/dev/Discretizers"; show_diff=true, delete_local=false)
INFO: Cloning home/tim/.julia/dev/Discretizers to /tmp/tmpArNh0h...
ERROR: GitError(Code:ERROR, Class:Net, Unsupported URL protocol)
 [1] macro expansion at ./libgit2/error.jl:99 [inlined]
 [2] clone(::String, ::String, ::Base.LibGit2.CloneOptions) at ./libgit2/repository.jl:276
 [3] #clone#100(::String, ::Bool, ::Ptr{Void}, ::Nullable{Base.LibGit2.AbstractCredentials}, ::Function, ::String, ::String) at ./libgit2/libgit2.jl:562
 [4] #cleanrepo#23(::Bool, ::Bool, ::Function, ::String) at /home/tim/.julia/v0.6/FemtoCleaner/src/FemtoCleaner.jl:301
 [5] (::FemtoCleaner.#kw##cleanrepo)(::Array{Any,1}, ::FemtoCleaner.#cleanrepo, ::String) at ./<missing>:0
fatal: Not a git repository (or any of the parent directories): .git
ERROR: failed process: Process(`git status`, ProcessExited(128)) [128]
 [1] pipeline_error(::Base.Process) at ./process.jl:682
 [2] run(::Cmd) at ./process.jl:651
 [3] #24 at /home/tim/.julia/v0.6/FemtoCleaner/src/FemtoCleaner.jl:313 [inlined]
 [4] cd(::FemtoCleaner.##24#25, ::String) at ./file.jl:70
 [5] #cleanrepo#23(::Bool, ::Bool, ::Function, ::String) at /home/tim/.julia/v0.6/FemtoCleaner/src/FemtoCleaner.jl:312
 [6] (::FemtoCleaner.#kw##cleanrepo)(::Array{Any,1}, ::FemtoCleaner.#cleanrepo, ::String) at ./<missing>:0

Any suggestions on how to overcome this?


Try using an absolute path.


Thanks, looks like I blindly followed the example code without thinking. Needed a ‘/’ before “home”.