@@ -45,15 +45,18 @@ handler_progress <- function(format = ":spin [:bar] :percent :message", show_aft
4545
4646 if (! is_fake(" handler_progress" )) {
4747 progress_bar <- progress :: progress_bar
48+ get_private <- function (pb ) {
49+ pb $ .__enclos_env__ $ private
50+ }
4851 erase_progress_bar <- function (pb ) {
4952 if (pb $ finished ) return ()
50- private <- pb $ .__enclos_env__ $ private
53+ private <- get_private( pb )
5154 private $ clear_line(private $ width )
5255 private $ cursor_to_start()
5356 }
5457 redraw_progress_bar <- function (pb , tokens = list ()) {
5558 if (pb $ finished ) return ()
56- private <- pb $ .__enclos_env__ $ private
59+ private <- get_private( pb )
5760 private $ last_draw <- " "
5861 private $ render(tokens )
5962 }
@@ -65,6 +68,7 @@ handler_progress <- function(format = ":spin [:bar] :percent :message", show_aft
6568 update = function (... ) NULL
6669 )
6770 )
71+ get_private <- function (pb ) NULL
6872 erase_progress_bar <- function (pb ) NULL
6973 redraw_progress_bar <- function (pb , tokens = list ()) NULL
7074 }
@@ -81,12 +85,28 @@ handler_progress <- function(format = ":spin [:bar] :percent :message", show_aft
8185
8286 last_tokens <- list ()
8387 pb_tick <- function (pb , delta = 0 , message = NULL , ... ) {
88+ if (isTRUE(pb $ finished )) return ()
89+
90+ # # WORKAROUND: https://github.com/r-lib/progress/issues/119
91+ private <- get_private(pb )
92+ if (! is.null(private ) && private $ total == 0 ) return ()
93+
8494 tokens <- list (message = paste0(message , " " ))
8595 last_tokens <<- tokens
8696 if (delta < 0 ) return ()
8797 pb $ tick(delta , tokens = tokens )
8898 }
8999
100+ pb_update <- function (pb , ratio , ... ) {
101+ if (isTRUE(pb $ finished )) return ()
102+
103+ # # WORKAROUND: https://github.com/r-lib/progress/issues/119
104+ private <- get_private(pb )
105+ if (! is.null(private ) && private $ total == 0 ) return ()
106+
107+ pb $ update(ratio = ratio , ... )
108+ }
109+
90110 list (
91111 reset = function (... ) {
92112 pb <<- NULL
@@ -123,7 +143,7 @@ handler_progress <- function(format = ":spin [:bar] :percent :message", show_aft
123143 make_pb(format = format , total = config $ max_steps ,
124144 clear = config $ clear , show_after = config $ enable_after )
125145 reporter $ update(config = config , state = state , progression = progression , ... )
126- if (config $ clear && ! pb $ finished ) pb $ update( 1.0 )
146+ if (config $ clear && ! pb $ finished ) pb_update( pb , ratio = 1.0 )
127147 }
128148 )
129149 })
0 commit comments