aboutsummaryrefslogtreecommitdiff
path: root/src/zen/cmds/wipe_cmd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zen/cmds/wipe_cmd.cpp')
-rw-r--r--src/zen/cmds/wipe_cmd.cpp56
1 files changed, 29 insertions, 27 deletions
diff --git a/src/zen/cmds/wipe_cmd.cpp b/src/zen/cmds/wipe_cmd.cpp
index 10f5ad8e1..d5344fb01 100644
--- a/src/zen/cmds/wipe_cmd.cpp
+++ b/src/zen/cmds/wipe_cmd.cpp
@@ -4,6 +4,7 @@
#include <zencore/filesystem.h>
#include <zencore/fmtutils.h>
+#include <zencore/iohash.h>
#include <zencore/logging.h>
#include <zencore/parallelwork.h>
#include <zencore/string.h>
@@ -11,7 +12,7 @@
#include <zencore/trace.h>
#include <zenutil/workerpools.h>
-#include "../progressbar.h"
+#include "consoleprogress.h"
#include <signal.h>
@@ -34,13 +35,13 @@ ZEN_THIRD_PARTY_INCLUDES_END
namespace zen {
namespace wipe_impl {
- static std::atomic<bool> AbortFlag = false;
- static std::atomic<bool> PauseFlag = false;
- static bool IsVerbose = false;
- static bool Quiet = false;
- static ProgressBar::Mode ProgressMode = ProgressBar::Mode::Pretty;
- const bool SingleThreaded = false;
- bool BoostWorkerThreads = true;
+ static std::atomic<bool> AbortFlag = false;
+ static std::atomic<bool> PauseFlag = false;
+ static bool IsVerbose = false;
+ static bool Quiet = false;
+ static ConsoleProgressMode ProgressMode = ConsoleProgressMode::Pretty;
+ const bool SingleThreaded = false;
+ bool BoostWorkerThreads = true;
WorkerThreadPool& GetIOWorkerPool()
{
@@ -167,7 +168,8 @@ namespace wipe_impl {
ZEN_TRACE_CPU("CleanDirectory");
Stopwatch Timer;
- ProgressBar Progress(ProgressMode, "Clean Folder");
+ std::unique_ptr<ProgressBase> ProgressOwner(CreateConsoleProgress(ProgressMode));
+ std::unique_ptr<ProgressBase::ProgressBar> Progress = ProgressOwner->CreateProgressBar("Clean Folder");
std::atomic<bool> CleanWipe = true;
std::atomic<uint64_t> DiscoveredItemCount = 0;
@@ -413,7 +415,7 @@ namespace wipe_impl {
GetIOWorkerPool(),
Work.PendingWork());
- Work.Wait(ProgressMode == ProgressBar::Mode::Pretty ? 200 : 5000, [&](bool IsAborted, bool IsPaused, ptrdiff_t PendingWork) {
+ Work.Wait(ProgressOwner->GetProgressUpdateDelayMS(), [&](bool IsAborted, bool IsPaused, ptrdiff_t PendingWork) {
ZEN_UNUSED(PendingWork);
if (Quiet)
{
@@ -424,12 +426,12 @@ namespace wipe_impl {
uint64_t Deleted = DeletedItemCount.load();
uint64_t DeletedBytes = DeletedByteCount.load();
uint64_t Discovered = DiscoveredItemCount.load();
- Progress.UpdateState({.Task = "Removing files ",
- .Details = fmt::format("Found {}, Deleted {} ({})", Discovered, Deleted, NiceBytes(DeletedBytes)),
- .TotalCount = Discovered,
- .RemainingCount = Discovered - Deleted,
- .Status = ProgressBar::State::CalculateStatus(IsAborted, IsPaused)},
- false);
+ Progress->UpdateState({.Task = "Removing files ",
+ .Details = fmt::format("Found {}, Deleted {} ({})", Discovered, Deleted, NiceBytes(DeletedBytes)),
+ .TotalCount = Discovered,
+ .RemainingCount = Discovered - Deleted,
+ .Status = ProgressBase::ProgressBar::State::CalculateStatus(IsAborted, IsPaused)},
+ false);
});
std::vector<std::filesystem::path> DirectoriesToDelete;
@@ -473,22 +475,22 @@ namespace wipe_impl {
}
uint64_t NowMs = Timer.GetElapsedTimeMs();
- if ((NowMs - LastUpdateTimeMs) >= GetUpdateDelayMS(ProgressMode))
+ if ((NowMs - LastUpdateTimeMs) >= ProgressOwner->GetProgressUpdateDelayMS())
{
LastUpdateTimeMs = NowMs;
uint64_t Deleted = DeletedItemCount.load();
uint64_t DeletedBytes = DeletedByteCount.load();
uint64_t Discovered = DiscoveredItemCount.load();
- Progress.UpdateState({.Task = "Removing folders",
- .Details = fmt::format("Found {}, Deleted {} ({})", Discovered, Deleted, NiceBytes(DeletedBytes)),
- .TotalCount = DirectoriesToDelete.size(),
- .RemainingCount = DirectoriesToDelete.size() - SubDirectoryIndex},
- false);
+ Progress->UpdateState({.Task = "Removing folders",
+ .Details = fmt::format("Found {}, Deleted {} ({})", Discovered, Deleted, NiceBytes(DeletedBytes)),
+ .TotalCount = DirectoriesToDelete.size(),
+ .RemainingCount = DirectoriesToDelete.size() - SubDirectoryIndex},
+ false);
}
}
- Progress.Finish();
+ Progress->Finish();
uint64_t ElapsedTimeMs = Timer.GetElapsedTimeMs();
if (!Quiet)
@@ -536,10 +538,10 @@ WipeCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
using namespace wipe_impl;
ZEN_UNUSED(GlobalOptions);
- signal(SIGINT, SignalCallbackHandler);
+ ScopedSignalHandler SigIntGuard(SIGINT, SignalCallbackHandler);
#if ZEN_PLATFORM_WINDOWS
- signal(SIGBREAK, SignalCallbackHandler);
-#endif // ZEN_PLATFORM_WINDOWS
+ ScopedSignalHandler SigBreakGuard(SIGBREAK, SignalCallbackHandler);
+#endif
if (!ParseOptions(argc, argv))
{
@@ -548,7 +550,7 @@ WipeCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv)
Quiet = m_Quiet;
IsVerbose = m_Verbose;
- ProgressMode = (IsVerbose || m_PlainProgress) ? ProgressBar::Mode::Plain : ProgressBar::Mode::Pretty;
+ ProgressMode = m_PlainProgress ? ConsoleProgressMode::Plain : ConsoleProgressMode::Pretty;
BoostWorkerThreads = m_BoostWorkerThreads;
MakeSafeAbsolutePathInPlace(m_Directory);