Disk ARchive 2.7.14
Full featured and portable backup and archiving tool
Loading...
Searching...
No Matches
i_database.hpp
Go to the documentation of this file.
1/*********************************************************************/
2// dar - disk archive - a backup/restoration program
3// Copyright (C) 2002-2024 Denis Corbin
4//
5// This program is free software; you can redistribute it and/or
6// modify it under the terms of the GNU General Public License
7// as published by the Free Software Foundation; either version 2
8// of the License, or (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program; if not, write to the Free Software
17// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18//
19// to contact the author, see the AUTHOR file
20/*********************************************************************/
21
25
26
27#ifndef I_DATABASE_HPP
28#define I_DATABASE_HPP
29
30#include "../my_config.h"
31
32#include <list>
33
34#include "archive.hpp"
35#include "generic_file.hpp"
36#include "data_dir.hpp"
37#include "storage.hpp"
38#include "mem_ui.hpp"
39#include "database_options.hpp"
40#include "database_archives.hpp"
41#include "database.hpp"
42#include "tools.hpp"
43
44namespace libdar
45{
46
49
51
53 {
54 public:
56 i_database(const std::shared_ptr<user_interaction> & dialog);
57
59 i_database(const std::shared_ptr<user_interaction> & dialog,
60 const std::string & base,
62
64 i_database(const i_database & ref) = delete;
65
67 i_database(i_database && ref) noexcept = delete;
68
70 i_database & operator = (const i_database & ref) = delete;
71
73 i_database & operator = (i_database && ref) noexcept = delete;
74
77
79 void dump(const std::string & filename, const database_dump_options & opt) const;
80
81 // SETTINGS
82
84 void add_archive(const archive & arch, const std::string & chemin, const std::string & basename, const database_add_options & opt);
85
88
91
93 void change_name(archive_num num, const std::string & basename, const database_change_basename_options &opt);
94
96 void set_path(archive_num num, const std::string & chemin, const database_change_path_options & opt);
97
99 void set_options(const std::vector<std::string> &opt) { options_to_dar = opt; };
100
102 void set_dar_path(const std::string & chemin) { dar_path = chemin; };
103
106
108 void set_compression_level(U_I level) const { compr_level = level; };
109
111 //
112 // "GETTINGS"
113 //
114
117
119 std::vector<std::string> get_options() const { return options_to_dar; }; // show option passed to dar
120
122 std::string get_dar_path() const { return dar_path; }; // show path to dar command
123
125 compression get_compression() const { return algo; };
126
128 U_I get_compression_level() const { return compr_level; };
129
131 std::string get_database_version() const { return tools_uint2str(cur_db_version); };
132
135 void *context,
136 archive_num num,
137 const database_used_options & opt) const;
138
141 void *context,
142 path chemin) const;
143
146 void *context) const;
147
148 // "ACTIONS" (not available with partially extracted databases)
149
151 void restore(const std::vector<std::string> & filename,
153
155 bool check_order() const
156 {
157 bool initial_warn = true;
158
159 if(files == nullptr)
160 throw SRC_BUG;
163 else
164 return true;
165 }
166
167
168 private:
169
172 {
173 std::string chemin;
174 std::string basename;
176 };
177
178 std::deque<struct archive_data> coordinate;
179 std::vector<std::string> options_to_dar;
180 std::string dar_path;
184 unsigned char cur_db_version;
186 mutable U_I compr_level;
187
188 void build(generic_file & f, bool partial, bool read_only, unsigned char db_version);
189 archive_num get_real_archive_num(archive_num num, bool revert) const;
190
191 const datetime & get_root_last_mod(const archive_num & num) const;
192 };
193
195
196} // end of namespace
197
198#endif
class archive_num stores the position of an archive inside a dar_manager database
the archive class realizes the most general operations on archives
the data_dir class inherits from data_tree and holds the directory tree's parent relationship
Definition data_dir.hpp:53
virtual bool check_order(user_interaction &dialog, const path &current_path, bool &initial_warn) const override
check date order between archives withing the database ; throw Erange if problem found with date orde...
the class i_database is the implementation of class database
data_dir * files
structure containing files and their status in the set of archive used for that database (is set to n...
compression algo
compression used/to use when writing down the base to file
bool check_order_asked
whether order check has been asked
std::string get_dar_path() const
returns the path for dar
compression get_compression() const
returns the compression algorithm used on filesystem
unsigned char cur_db_version
current db version (for informational purposes)
i_database(i_database &&ref) noexcept=delete
disabling move constructor
void build(generic_file &f, bool partial, bool read_only, unsigned char db_version)
used by constructors
std::vector< std::string > options_to_dar
options to use when calling dar for restoration
void remove_archive(archive_num min, archive_num max, const database_remove_options &opt)
remove an archive from a database
void set_permutation(archive_num src, archive_num dst)
change order of archive within the database
i_database & operator=(const i_database &ref)=delete
disabling assignement operator
void set_path(archive_num num, const std::string &chemin, const database_change_path_options &opt)
change one's archive path recorded in the database
void restore(const std::vector< std::string > &filename, const database_restore_options &opt)
restore files calling dar on the appropriated archive
void get_files(database_listing_show_files_callback callback, void *context, archive_num num, const database_used_options &opt) const
list files which are present in a given archive
bool check_order() const
check that all files's Data and EA are more recent when archive number grows within the database,...
void show_most_recent_stats(database_listing_statistics_callback callback, void *context) const
compute some statistics about the location of most recent file versions
storage * data_files
when reading archive in partial mode, this is where is located the "not readed" part of the archive (...
i_database(const i_database &ref)=delete
disabling copy constructor
std::string dar_path
path to dar
U_I compr_level
the compression level to use
i_database(const std::shared_ptr< user_interaction > &dialog, const std::string &base, const database_open_options &opt)
this constructor reads i_database from a file
U_I get_compression_level() const
returns the compression level used on file
std::deque< struct archive_data > coordinate
list of archive used to build the database
void set_compression_level(U_I level) const
change the compression level to use when storing base in file
~i_database()
i_database destructor (no implicit file saving)
void set_compression(compression algozip) const
change compression to use when storing base on file
database_archives_list get_contents() const
provides the list of archive used to build the database
std::vector< std::string > get_options() const
return the options used with dar for restoration
void change_name(archive_num num, const std::string &basename, const database_change_basename_options &opt)
change one's archive basename recorded in the database
void get_version(database_listing_get_version_callback callback, void *context, path chemin) const
list the archive where a give file is present
void dump(const std::string &filename, const database_dump_options &opt) const
write the database to a file (see database_header first)
std::string get_database_version() const
return the database format version
void set_dar_path(const std::string &chemin)
change the path to dar command
i_database(const std::shared_ptr< user_interaction > &dialog)
this constructor build an empty database
void add_archive(const archive &arch, const std::string &chemin, const std::string &basename, const database_add_options &opt)
add an archive to the database
void set_options(const std::vector< std::string > &opt)
change the default options given to dar when performing restoration
this is the interface class from which all other data transfer classes inherit
class mem_ui to keep a copy of a user_interaction object
user_interaction & get_ui() const
get access to the user_interaction object
the class path is here to manipulate paths in the Unix notation: using'/'
arbitrary large storage structure
classes used to store directory tree information in dar_manager databases
std::deque< database_archives > database_archives_list
list of archives found in a database
compression
the different compression algorithm available
void(*)(void *context, const std::string &filename, bool available_data, bool available_ea) database_listing_show_files_callback
called by the database::get_files() routine
@ partial
EA present in filesystem but not stored (ctime used to check changes)
include macro defined by the configure script and some specific additional ones
libdar namespace encapsulate all libdar symbols
the archive class is defined in this module
this file holds the database class definition
this file stores the list of archives a database has been built from. it is part of the database head...
this file holds the options for database operations
class generic_file is defined here as well as class fichier
class mem_ui definition. This class is to be used as parent class to handle user_interaction object m...
contains a class that permits arbitrary large data storage
a set of general purpose routines
holds the archive used to create the database
std::string chemin
path to the archive
datetime root_last_mod
last modification date of the root directory
std::string basename
basename of the archive