Skip to content

Commit 3ea0729

Browse files
committed
Clear artifact / library spinner on finish + add quiet mode to silence them
1 parent 34cfac0 commit 3ea0729

2 files changed

Lines changed: 27 additions & 12 deletions

File tree

ext/TerminalSpinners.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ Base.@kwdef mutable struct Spinner{IO_t <: IO}
5353
color::Symbol = Base.info_color()
5454
nlines::Int=0
5555
first::Bool=false
56+
clear_on_finish::Bool=false # on success, erase the spinner output instead of leaving a final line
5657
end
5758

5859
getframe(s::Spinner) = s.frames[s.frame_idx]
@@ -144,11 +145,18 @@ function stop!(s::Spinner)
144145
println(s.stream)
145146
end
146147

148+
# Erase the spinner's current output, returning the cursor to where it began.
149+
function clear!(s::Spinner)
150+
s.first || erase_and_reset(s.stream, s.nlines)
151+
s.hidecursor && show_cursor!(s.stream)
152+
end
153+
147154
function success!(s)
148155
# Stop the timer before the final render so a pending tick can't
149156
# overwrite the ✔ line with a spinner frame.
150157
close_timer!(s)
151158
if s.enabled && !s.silent
159+
s.clear_on_finish && return clear!(s)
152160
render(s, "", :light_green)
153161
end
154162
stop!(s)

src/PackageCompiler.jl

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -928,7 +928,8 @@ function create_app(package_dir::String,
928928
sysimage_build_args::Cmd=``,
929929
include_transitive_dependencies::Bool=true,
930930
include_preferences::Bool=true,
931-
script::Union{Nothing, String}=nothing)
931+
script::Union{Nothing, String}=nothing,
932+
quiet::Bool=false)
932933
if filter_stdlibs && incremental
933934
error("must use `incremental=false` to use `filter_stdlibs=true`")
934935
end
@@ -948,14 +949,14 @@ function create_app(package_dir::String,
948949
if !filter_stdlibs
949950
stdlibs = unique(vcat(stdlibs, map(pkg -> pkg.name, stdlibs_in_default_sysimage())))
950951
end
951-
library_info = bundle_julia_libraries(app_dir, stdlibs)
952-
artifact_info = bundle_artifacts(ctx, app_dir; include_lazy_artifacts)
952+
library_info = bundle_julia_libraries(app_dir, stdlibs; quiet)
953+
artifact_info = bundle_artifacts(ctx, app_dir; include_lazy_artifacts, quiet)
953954
bundle_julia_libexec(ctx, app_dir)
954955
bundle_julia_executable(app_dir)
955956
bundle_project(ctx, app_dir)
956957
include_preferences && bundle_preferences(ctx, app_dir)
957958
bundle_cert(app_dir)
958-
print_bundle_info(library_info, artifact_info)
959+
quiet || print_bundle_info(library_info, artifact_info)
959960

960961
# Sysimage always goes in lib/julia/ (this is hardcoded in the Julia binary)
961962
sysimage_path = joinpath(app_dir, "lib", "julia", "sys." * Libdl.dlext)
@@ -1135,7 +1136,8 @@ function create_library(package_or_project::String,
11351136
include_transitive_dependencies::Bool=true,
11361137
include_preferences::Bool=true,
11371138
script::Union{Nothing,String}=nothing,
1138-
base_sysimage::Union{Nothing, String}=nothing
1139+
base_sysimage::Union{Nothing, String}=nothing,
1140+
quiet::Bool=false
11391141
)
11401142

11411143
# Add init header files to list of bundled header files if not already present
@@ -1167,14 +1169,14 @@ function create_library(package_or_project::String,
11671169
if !filter_stdlibs
11681170
stdlibs = unique(vcat(stdlibs, map(pkg -> pkg.name, stdlibs_in_default_sysimage())))
11691171
end
1170-
library_info = bundle_julia_libraries(dest_dir, stdlibs)
1171-
artifact_info = bundle_artifacts(ctx, dest_dir; include_lazy_artifacts)
1172+
library_info = bundle_julia_libraries(dest_dir, stdlibs; quiet)
1173+
artifact_info = bundle_artifacts(ctx, dest_dir; include_lazy_artifacts, quiet)
11721174
bundle_julia_libexec(ctx, dest_dir)
11731175
bundle_headers(dest_dir, header_files)
11741176
bundle_project(ctx, dest_dir)
11751177
include_preferences && bundle_preferences(ctx, dest_dir)
11761178
bundle_cert(dest_dir)
1177-
print_bundle_info(library_info, artifact_info)
1179+
quiet || print_bundle_info(library_info, artifact_info)
11781180

11791181
lib_dir = Sys.iswindows() ? joinpath(dest_dir, "bin") : joinpath(dest_dir, "lib")
11801182

@@ -1395,7 +1397,7 @@ struct BundledArtifacts
13951397
groups::Vector{BundledArtifactGroup}
13961398
end
13971399

1398-
function bundle_julia_libraries(dest_dir, stdlibs)
1400+
function bundle_julia_libraries(dest_dir, stdlibs; quiet::Bool=false)
13991401
app_lib_dir = joinpath(dest_dir, Sys.isunix() ? "lib" : "bin")
14001402
app_libjulia_dir = Sys.isunix() ? joinpath(app_lib_dir, "julia") : app_lib_dir
14011403
lib_dir = julia_libdir()
@@ -1414,7 +1416,7 @@ function bundle_julia_libraries(dest_dir, stdlibs)
14141416
Sys.isunix() && mkpath(joinpath(app_lib_dir, "julia"))
14151417

14161418
# Returns bundled destination paths for reporting later
1417-
spinner = TerminalSpinners.Spinner(msg = "PackageCompiler: bundling libraries")
1419+
spinner = TerminalSpinners.Spinner(msg = "PackageCompiler: bundling libraries", silent = quiet, clear_on_finish = true)
14181420
return TerminalSpinners.@spin spinner _copy_julia_libraries(
14191421
stdlibs, lib_dir, libjulia_dir, app_lib_dir, app_libjulia_dir)
14201422
end
@@ -1450,6 +1452,7 @@ function _copy_julia_libraries(stdlibs, lib_dir, libjulia_dir, app_lib_dir, app_
14501452
isfile(dest) && continue
14511453
cp(match, dest; force=true)
14521454
push!(base_dests, dest)
1455+
yield() # give the spinner a chance to render
14531456
end
14541457
end
14551458

@@ -1481,6 +1484,7 @@ function _copy_julia_libraries(stdlibs, lib_dir, libjulia_dir, app_lib_dir, app_
14811484
isfile(dest) && continue
14821485
cp(match, dest)
14831486
push!(base_dests, dest)
1487+
yield() # give the spinner a chance to render
14841488
end
14851489

14861490
for stdlib in stdlibs
@@ -1494,6 +1498,7 @@ function _copy_julia_libraries(stdlibs, lib_dir, libjulia_dir, app_lib_dir, app_
14941498
isfile(destpath) && continue
14951499
cp(match, destpath)
14961500
push!(dests, destpath)
1501+
yield() # give the spinner a chance to render
14971502
end
14981503
end
14991504
isempty(dests) || push!(stdlib_dests, stdlib => dests)
@@ -1583,7 +1588,7 @@ function _collect_artifacts(pkg_root::String; platform::Base.BinaryPlatforms.Abs
15831588
return artifacts_tomls
15841589
end
15851590

1586-
function bundle_artifacts(ctx, dest_dir; include_lazy_artifacts::Bool)
1591+
function bundle_artifacts(ctx, dest_dir; include_lazy_artifacts::Bool, quiet::Bool=false)
15871592
pkgs = load_all_deps(ctx)
15881593

15891594
# TODO: Allow override platform?
@@ -1641,7 +1646,8 @@ function bundle_artifacts(ctx, dest_dir; include_lazy_artifacts::Bool)
16411646
progress = Ref(0)
16421647
current_pkg = Ref("")
16431648
spinner = TerminalSpinners.Spinner(msg = () ->
1644-
"PackageCompiler: bundling artifacts ($(progress[])/$(n_artifacts)): $(current_pkg[])")
1649+
"PackageCompiler: bundling artifacts ($(progress[])/$(n_artifacts)): $(current_pkg[])",
1650+
silent = quiet, clear_on_finish = true)
16451651
# Returns summary / destination paths for reporting later
16461652
return TerminalSpinners.@spin spinner _copy_artifacts(
16471653
bundled_artifacts, artifact_app_path, progress, current_pkg)
@@ -1666,6 +1672,7 @@ function _copy_artifacts(bundled_artifacts, artifact_app_path,
16661672
cp(artifact_path, dest)
16671673
push!(bundled_shas, git_tree_sha_artifact)
16681674
end
1675+
yield() # give the progress spinner a chance to render
16691676
end
16701677
push!(groups, BundledArtifactGroup(pkg, std_jll, entries))
16711678
end

0 commit comments

Comments
 (0)