From 6c3cafaffa288a7fc8667d09bf510674c272517e Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Sun, 6 Sep 2020 12:10:25 +0200 Subject: [PATCH] fix some issues with buildbot path not updating in stacktraces / method errors --- base/errorshow.jl | 22 ++++++++++++++-------- stdlib/InteractiveUtils/test/runtests.jl | 24 ++++++++++++++++++++++++ test/errorshow.jl | 5 +++-- test/worlds.jl | 4 +++- 4 files changed, 44 insertions(+), 11 deletions(-) diff --git a/base/errorshow.jl b/base/errorshow.jl index 6cd94cbed371a6..7199a24edd3f9a 100644 --- a/base/errorshow.jl +++ b/base/errorshow.jl @@ -362,6 +362,13 @@ function showerror_nostdio(err, msg::AbstractString) ccall(:jl_printf, Cint, (Ptr{Cvoid},Cstring), stderr_stream, "\n") end +stacktrace_expand_basepaths()::Bool = + tryparse(Bool, get(ENV, "JULIA_STACKTRACE_EXPAND_BASEPATHS", "false")) === true +stacktrace_contract_userdir()::Bool = + tryparse(Bool, get(ENV, "JULIA_STACKTRACE_CONTRACT_HOMEDIR", "true")) === true +stacktrace_linebreaks()::Bool = + tryparse(Bool, get(ENV, "JULIA_STACKTRACE_LINEBREAKS", "false")) === true + function show_method_candidates(io::IO, ex::MethodError, @nospecialize kwargs=()) is_arg_types = isa(ex.args, DataType) arg_types = is_arg_types ? ex.args : typesof(ex.args...) @@ -489,7 +496,12 @@ function show_method_candidates(io::IO, ex::MethodError, @nospecialize kwargs=() end print(iob, ")") show_method_params(iob0, tv) - print(iob, " at ", method.file, ":", method.line) + file, line = functionloc(method) + if file === nothing + file = string(method.file) + end + stacktrace_contract_userdir() && (file = contractuser(file)) + print(iob, " at ", file, ":", line) if !isempty(kwargs)::Bool unexpected = Symbol[] if isempty(kwords) || !(any(endswith(string(kword), "...") for kword in kwords)) @@ -549,13 +561,6 @@ const update_stackframes_callback = Ref{Function}(identity) const STACKTRACE_MODULECOLORS = [:magenta, :cyan, :green, :yellow] const STACKTRACE_FIXEDCOLORS = IdDict(Base => :light_black, Core => :light_black) -stacktrace_expand_basepaths()::Bool = - tryparse(Bool, get(ENV, "JULIA_STACKTRACE_EXPAND_BASEPATHS", "false")) === true -stacktrace_contract_userdir()::Bool = - tryparse(Bool, get(ENV, "JULIA_STACKTRACE_CONTRACT_HOMEDIR", "true")) === true -stacktrace_linebreaks()::Bool = - tryparse(Bool, get(ENV, "JULIA_STACKTRACE_LINEBREAKS", "false")) === true - function show_full_backtrace(io::IO, trace::Vector; print_linebreaks::Bool) num_frames = length(trace) ndigits_max = ndigits(num_frames) @@ -684,6 +689,7 @@ end # Print a stack frame where the module color is set manually with `modulecolor`. function print_stackframe(io, i, frame::StackFrame, n::Int, digit_align_width, modulecolor) file, line = string(frame.file), frame.line + file = fixup_stdlib_path(file) stacktrace_expand_basepaths() && (file = something(find_source_file(file), file)) stacktrace_contract_userdir() && (file = contractuser(file)) diff --git a/stdlib/InteractiveUtils/test/runtests.jl b/stdlib/InteractiveUtils/test/runtests.jl index 8258881f567110..697ac3741ef3a8 100644 --- a/stdlib/InteractiveUtils/test/runtests.jl +++ b/stdlib/InteractiveUtils/test/runtests.jl @@ -564,6 +564,30 @@ file, ln = functionloc(versioninfo, Tuple{}) @test isfile(pathof(InteractiveUtils)) @test isdir(pkgdir(InteractiveUtils)) +@testset "buildbot path updating" begin + file, ln = functionloc(versioninfo, Tuple{}) + @test isfile(file) + + e = try versioninfo("wat") + catch e + e + end + @test e isa MethodError + s = sprint(showerror, e) + m = match(r"at (.*?):[0-9]*", s) + @test isfile(expanduser(m.captures[1])) + + g() = x + e, bt = try code_llvm(g, Tuple{Int}) + catch e + e, catch_backtrace() + end + @test e isa Exception + s = sprint(showerror, e, bt) + m = match(r"(\S*InteractiveUtils[\/\\]src\S*):", s) + @test isfile(expanduser(m.captures[1])) +end + @testset "Issue #34434" begin io = IOBuffer() code_native(io, eltype, Tuple{Int}) diff --git a/test/errorshow.jl b/test/errorshow.jl index 24d0241049da04..95b606c555762f 100644 --- a/test/errorshow.jl +++ b/test/errorshow.jl @@ -48,8 +48,9 @@ include("testenv.jl") end end - -cfile = " at $(@__FILE__):" +file = @__FILE__ +Base.stacktrace_contract_userdir() && (file = Base.contractuser(file)) +cfile = " at $file:" c1line = @__LINE__() + 1 method_c1(x::Float64, s::AbstractString...) = true diff --git a/test/worlds.jl b/test/worlds.jl index 2b4f575e1905ae..c542851d591fdb 100644 --- a/test/worlds.jl +++ b/test/worlds.jl @@ -136,7 +136,9 @@ f265(::Int) = 1 # test for method errors h265() = true -loc_h265 = "$(@__FILE__):$(@__LINE__() - 1)" +file = @__FILE__ +Base.stacktrace_contract_userdir() && (file = Base.contractuser(file)) +loc_h265 = "$file:$(@__LINE__() - 3)" @test h265() @test_throws TaskFailedException(t265) put_n_take!(h265, ()) @test_throws TaskFailedException(t265) fetch(t265)