ClickHouse

Форк
0
/
CommandCopy.cpp 
68 строк · 2.3 Кб
1
#include "ICommand.h"
2
#include <Interpreters/Context.h>
3
#include <Common/TerminalSize.h>
4

5
namespace DB
6
{
7

8
namespace ErrorCodes
9
{
10
    extern const int BAD_ARGUMENTS;
11
}
12

13
class CommandCopy final : public ICommand
14
{
15
public:
16
    CommandCopy()
17
    {
18
        command_name = "copy";
19
        command_option_description.emplace(createOptionsDescription("Allowed options", getTerminalWidth()));
20
        description = "Recursively copy data from `FROM_PATH` to `TO_PATH`";
21
        usage = "copy [OPTION]... <FROM_PATH> <TO_PATH>";
22
        command_option_description->add_options()
23
            ("disk-from", po::value<String>(), "disk from which we copy")
24
            ("disk-to", po::value<String>(), "disk to which we copy");
25
    }
26

27
    void processOptions(
28
        Poco::Util::LayeredConfiguration & config,
29
        po::variables_map & options) const override
30
    {
31
        if (options.count("disk-from"))
32
            config.setString("disk-from", options["disk-from"].as<String>());
33
        if (options.count("disk-to"))
34
            config.setString("disk-to", options["disk-to"].as<String>());
35
    }
36

37
    void execute(
38
        const std::vector<String> & command_arguments,
39
        std::shared_ptr<DiskSelector> & disk_selector,
40
        Poco::Util::LayeredConfiguration & config) override
41
    {
42
        if (command_arguments.size() != 2)
43
        {
44
            printHelpMessage();
45
            throw DB::Exception(DB::ErrorCodes::BAD_ARGUMENTS, "Bad Arguments");
46
        }
47

48
        String disk_name_from = config.getString("disk-from", config.getString("disk", "default"));
49
        String disk_name_to = config.getString("disk-to", config.getString("disk", "default"));
50

51
        const String & path_from = command_arguments[0];
52
        const String & path_to =  command_arguments[1];
53

54
        DiskPtr disk_from = disk_selector->get(disk_name_from);
55
        DiskPtr disk_to = disk_selector->get(disk_name_to);
56

57
        String relative_path_from = validatePathAndGetAsRelative(path_from);
58
        String relative_path_to = validatePathAndGetAsRelative(path_to);
59

60
        disk_from->copyDirectoryContent(relative_path_from, disk_to, relative_path_to, /* read_settings= */ {}, /* write_settings= */ {}, /* cancellation_hook= */ {});
61
    }
62
};
63
}
64

65
std::unique_ptr <DB::ICommand> makeCommandCopy()
66
{
67
    return std::make_unique<DB::CommandCopy>();
68
}
69

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.