-
Notifications
You must be signed in to change notification settings - Fork 126
/
Filesystem.h
128 lines (89 loc) · 3.68 KB
/
Filesystem.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/*
* Copyright (c) [2011-2015] Novell, Inc.
* Copyright (c) [2016-2023] SUSE LLC
*
* All Rights Reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2 of the GNU General Public License as published
* by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, contact Novell, Inc.
*
* To contact Novell about this file by physical or electronic mail, you may
* find current contact information at www.novell.com.
*/
#ifndef SNAPPER_FILESYSTEM_H
#define SNAPPER_FILESYSTEM_H
#include <string>
#include <vector>
#include <utility>
#include "snapper/FileUtils.h"
#include "snapper/Compare.h"
#include "snapper/Plugins.h"
#ifndef SN_DEPRECATED
#define SN_DEPRECATED __attribute__((deprecated))
#endif
namespace snapper
{
using std::string;
using std::vector;
struct MtabData;
class ConfigInfo;
class Filesystem
{
public:
Filesystem(const string& subvolume, const string& root_prefix)
: subvolume(subvolume), root_prefix(root_prefix) {}
virtual ~Filesystem() {}
static Filesystem* create(const string& fstype, const string& subvolume, const string& root_prefix);
static Filesystem* create(const ConfigInfo& config_info, const string& root_prefix);
virtual void evalConfigInfo(const ConfigInfo& config_info) {}
virtual string fstype() const = 0;
virtual void createConfig() const = 0;
virtual void deleteConfig() const = 0;
virtual string snapshotDir(unsigned int num) const = 0;
virtual SDir openSubvolumeDir() const;
virtual SDir openInfosDir() const = 0;
virtual SDir openInfoDir(unsigned int num) const;
virtual SDir openSnapshotDir(unsigned int num) const = 0;
virtual void createSnapshot(unsigned int num, unsigned int num_parent, bool read_only,
bool quota, bool empty) const = 0;
virtual void createSnapshotOfDefault(unsigned int num, bool read_only, bool quota) const;
virtual void deleteSnapshot(unsigned int num) const = 0;
virtual bool isSnapshotMounted(unsigned int num) const = 0;
virtual void mountSnapshot(unsigned int num) const = 0;
virtual void umountSnapshot(unsigned int num) const = 0;
virtual bool isSnapshotReadOnly(unsigned int num) const = 0;
virtual void setSnapshotReadOnly(unsigned int num, bool read_only) const = 0;
virtual bool checkSnapshot(unsigned int num) const = 0;
virtual void cmpDirs(const SDir& dir1, const SDir& dir2, cmpdirs_cb_t cb) const;
virtual bool isDefault(unsigned int num) const;
/**
* Query the number of the default snapshot. The first entry of the
* pair indicates whether the default snapshot is a snapper snapshot
* (not necessarily in the list of snapshots known to snapper).
* Currently only available for btrfs.
*/
virtual std::pair<bool, unsigned int> getDefault() const;
virtual void setDefault(unsigned int num) const SN_DEPRECATED;
virtual void setDefault(unsigned int num, Plugins::Report& report) const;
virtual std::pair<bool, unsigned int> getActive() const;
virtual bool isActive(unsigned int num) const;
virtual void sync() const;
protected:
const string subvolume;
const string root_prefix;
static vector<string> filter_mount_options(const vector<string>& options);
static bool mount(const string& device, const SDir& dir, const string& mount_type,
const vector<string>& options);
static bool umount(const SDir& dir, const string& mount_point);
};
}
#endif