Extend the tmpdir class with an option to preserve the directory if the destructor is called during stack unwinding (i.e., uncaught exception). To be used in tests where the tmpdir contains non-temporary resources that may help in diagnosing test failures (e.g., logs from external services such as PyKMIP). This will be used in the next patch. Signed-off-by: Nikos Dragazis <nikolaos.dragazis@scylladb.com>
46 lines
1014 B
C++
46 lines
1014 B
C++
/*
|
|
* Copyright (C) 2015-present ScyllaDB
|
|
*/
|
|
|
|
/*
|
|
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <filesystem>
|
|
#include <fmt/format.h>
|
|
|
|
namespace fs = std::filesystem;
|
|
|
|
// Creates a new empty directory with arbitrary name, which will be removed
|
|
// automatically when tmpdir object goes out of scope.
|
|
class tmpdir {
|
|
fs::path _path;
|
|
bool _preserve_on_exception = false;
|
|
|
|
private:
|
|
void remove() noexcept;
|
|
|
|
class sweeper {
|
|
const tmpdir& _tmpd;
|
|
public:
|
|
sweeper(const tmpdir& t) noexcept : _tmpd(t) {}
|
|
~sweeper();
|
|
};
|
|
|
|
public:
|
|
tmpdir();
|
|
|
|
tmpdir(tmpdir&& other) noexcept;
|
|
tmpdir(const tmpdir&) = delete;
|
|
void operator=(tmpdir&& other) noexcept;
|
|
void operator=(const tmpdir&) = delete;
|
|
|
|
~tmpdir();
|
|
|
|
const fs::path& path() const noexcept { return _path; }
|
|
sweeper make_sweeper() const noexcept { return sweeper(*this); }
|
|
void preserve_on_exception(bool p) { _preserve_on_exception = p; }
|
|
};
|