git: 55af0f96d0fb - main - bsdinstall/distfetch: fix main bar percentage with errors
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 23 Feb 2022 00:58:07 UTC
The branch main has been updated by asiciliano: URL: https://cgit.FreeBSD.org/src/commit/?id=55af0f96d0fb92e49fad0c63e7b062c419197459 commit 55af0f96d0fb92e49fad0c63e7b062c419197459 Author: Alfonso S. Siciliano <asiciliano@FreeBSD.org> AuthorDate: 2022-02-23 00:54:51 +0000 Commit: Alfonso S. Siciliano <asiciliano@FreeBSD.org> CommitDate: 2022-02-23 00:54:51 +0000 bsdinstall/distfetch: fix main bar percentage with errors UI fix not related to the real fetching process, use 'nfiles' (instead of 'total files size') to compute main bar percentage if an error occurs: - fix: main bar greater than 100%, if an error occurs before fetching - fix: main bar less than 100%, if an error occurs during fetching - add: last mixedgauge, at least one dialog if a total failure occurs PR: 164094, 169748 Approved by: bapt (mentor) Review: https://reviews.freebsd.org/D33978 --- usr.sbin/bsdinstall/distfetch/distfetch.c | 33 ++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/usr.sbin/bsdinstall/distfetch/distfetch.c b/usr.sbin/bsdinstall/distfetch/distfetch.c index 5f262343720e..0510965dd4e7 100644 --- a/usr.sbin/bsdinstall/distfetch/distfetch.c +++ b/usr.sbin/bsdinstall/distfetch/distfetch.c @@ -113,6 +113,8 @@ fetch_files(int nfiles, char **urls) off_t current_bytes; off_t fsize; off_t total_bytes; + float file_perc; + float mainperc_file; char status[8]; struct url_stat ustat; char errormsg[PATH_MAX + 512]; @@ -137,16 +139,17 @@ fetch_files(int nfiles, char **urls) /* Try to stat all the files */ total_bytes = 0; for (i = 0; i < nfiles; i++) { - if (fetchStatURL(urls[i], &ustat, "") == 0 && ustat.size > 0) + if (fetchStatURL(urls[i], &ustat, "") == 0 && ustat.size > 0) { total_bytes += ustat.size; + } else { + total_bytes = 0; + break; + } } + mainperc_file = 100.0 / nfiles; current_bytes = 0; for (i = 0; i < nfiles; i++) { - last_progress = progress; - if (total_bytes == 0) - progress = (i*100)/nfiles; - fetchLastErrCode = 0; fetch_out = fetchXGetURL(urls[i], &ustat, ""); if (fetch_out == NULL) { @@ -156,6 +159,7 @@ fetch_files(int nfiles, char **urls) items[i*2 + 1] = "Failed"; dialog_msgbox("Fetch Error", errormsg, 0, 0, TRUE); + total_bytes = 0; continue; } @@ -170,6 +174,7 @@ fetch_files(int nfiles, char **urls) dialog_msgbox("Fetch Error", errormsg, 0, 0, TRUE); fclose(fetch_out); + total_bytes = 0; continue; } @@ -180,10 +185,15 @@ fetch_files(int nfiles, char **urls) current_bytes += chunk; fsize += chunk; - + + last_progress = progress; if (total_bytes > 0) { - last_progress = progress; - progress = (current_bytes*100)/total_bytes; + progress = (current_bytes*100)/total_bytes; + } else { + file_perc = ustat.size > 0 ? + (fsize*100)/ustat.size : 0; + progress = (i * mainperc_file) + + ((file_perc * mainperc_file) / 100); } if (ustat.size > 0) { @@ -200,7 +210,7 @@ fetch_files(int nfiles, char **urls) } if (ustat.size > 0 && fsize < ustat.size) { - if (fetchLastErrCode == 0) + if (fetchLastErrCode == 0) snprintf(errormsg, sizeof(errormsg), "Error while fetching %s: %s\n", urls[i], strerror(errno)); @@ -211,6 +221,7 @@ fetch_files(int nfiles, char **urls) items[i*2 + 1] = "Failed"; dialog_msgbox("Fetch Error", errormsg, 0, 0, TRUE); + total_bytes = 0; } else { items[i*2 + 1] = "Done"; nsuccess++; @@ -220,6 +231,10 @@ fetch_files(int nfiles, char **urls) fclose(file_out); } + dialog_mixedgauge("Fetching Distribution", + "Fetching distribution completed", 0, 0, progress, nfiles, + __DECONST(char **, items)); + free(items); return (nsuccess); }