| Disk ARchive 2.8.1 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-2025 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#include "datetime.hpp"
44#include "archive_options.hpp"
45
46namespace libdar
47{
48
51
53
54 class database::i_database: public mem_ui
55 {
56 public:
58 i_database(const std::shared_ptr<user_interaction> & dialog);
59
61 i_database(const std::shared_ptr<user_interaction> & dialog,
62 const std::string & base,
63 const database_open_options & opt);
64
66 i_database(const i_database & ref) = delete;
67
69 i_database(i_database && ref) noexcept = delete;
70
72 i_database & operator = (const i_database & ref) = delete;
73
75 i_database & operator = (i_database && ref) noexcept = delete;
76
78 ~i_database();
79
81 void dump(const std::string & filename, const database_dump_options & opt) const;
82
83 // SETTINGS
84
86 void add_archive(const archive & arch, const std::string & chemin, const std::string & basename, const database_add_options & opt);
87
89 void remove_archive(archive_num min, archive_num max, const database_remove_options & opt);
90
92 void set_permutation(archive_num src, archive_num dst);
93
95 void change_name(archive_num num, const std::string & basename, const database_change_basename_options &opt);
96
98 void set_path(archive_num num, const std::string & chemin, const database_change_path_options & opt);
99
101 void set_options(const std::vector<std::string> &opt) { options_to_dar = opt; };
102
104 void set_dar_path(const std::string & chemin) { dar_path = chemin; };
105
107 void set_compression(compression algozip) const { algo = algozip; };
108
110 void set_compression_level(U_I level) const { compr_level = level; };
111
113 //
114 // "GETTINGS"
115 //
116
118 database_archives_list get_contents() const;
119
121 std::vector<std::string> get_options() const { return options_to_dar; }; // show option passed to dar
122
124 std::string get_dar_path() const { return dar_path; }; // show path to dar command
125
127 compression get_compression() const { return algo; };
128
130 U_I get_compression_level() const { return compr_level; };
131
133 std::string get_database_version() const { return tools_uint2str(cur_db_version); };
134
136 void get_files(database_listing_show_files_callback callback,
137 void *context,
138 archive_num num,
139 const database_used_options & opt) const;
140
142 void get_version(database_listing_get_version_callback callback,
143 void *context,
144 path chemin) const;
145
147 void show_most_recent_stats(database_listing_statistics_callback callback,
148 void *context) const;
149
150 // "ACTIONS" (not available with partially extracted databases)
151
153 void restore(const std::vector<std::string> & filename,
154 const database_restore_options & opt);
155
157
158 void restore(const archive_options_read & read_options,
159 const path & fs_root,
160 archive_options_extract extract_options,
161 const database_restore_options & opt,
162 statistics* progressive_report);
163
165 bool check_order() const
166 {
167 bool initial_warn = true;
168
169 if(files == nullptr)
170 throw SRC_BUG;
171 if(check_order_asked)
172 return files->check_order(get_ui(), path("."), initial_warn) && initial_warn;
173 else
174 return true;
175 }
176
177
178 private:
179
181 struct archive_data
182 {
183 std::string chemin;
184 std::string basename;
185 datetime root_last_mod;
186 };
187
188 std::deque<struct archive_data> coordinate;
189 std::vector<std::string> options_to_dar;
190 std::string dar_path;
191 data_dir *files;
192 storage *data_files;
193 bool check_order_asked;
194 unsigned char cur_db_version;
195 mutable compression algo;
196 mutable U_I compr_level;
197
198 void build(generic_file & f, bool partial, bool read_only, unsigned char db_version);
199 archive_num get_real_archive_num(archive_num num, bool revert) const;
200
201 const datetime & get_root_last_mod(const archive_num & num) const;
202 };
203
205
206} // end of namespace
207
208#endif
archive.hpp
the archive class is defined in this module
archive_options.hpp
this file contains a set of classes used to transmit options to archive operation
libdar::archive_num
class archive_num stores the position of an archive inside a dar_manager database
Definition archive_num.hpp:47
libdar::archive_options_extract
class holding optional parameters used to extract files from an existing archive
Definition archive_options.hpp:1351
libdar::archive_options_read
class holding optional parameters used to read an existing archive
Definition archive_options.hpp:70
libdar::archive
the archive class realizes the most general operations on archives
Definition archive.hpp:68
libdar::data_dir
the data_dir class inherits from data_tree and holds the directory tree's parent relationship
Definition data_dir.hpp:53
libdar::data_dir::check_order
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...
libdar::database::i_database
the class i_database is the implementation of class database
Definition i_database.hpp:55
libdar::database::i_database::files
data_dir * files
structure containing files and their status in the set of archive used for that database (is set to n...
Definition i_database.hpp:191
libdar::database::i_database::algo
compression algo
compression used/to use when writing down the base to file
Definition i_database.hpp:195
libdar::database::i_database::check_order_asked
bool check_order_asked
whether order check has been asked
Definition i_database.hpp:193
libdar::database::i_database::get_dar_path
std::string get_dar_path() const
returns the path for dar
Definition i_database.hpp:124
libdar::database::i_database::get_compression
compression get_compression() const
returns the compression algorithm used on filesystem
Definition i_database.hpp:127
libdar::database::i_database::cur_db_version
unsigned char cur_db_version
current db version (for informational purposes)
Definition i_database.hpp:194
libdar::database::i_database::i_database
i_database(i_database &&ref) noexcept=delete
disabling move constructor
libdar::database::i_database::build
void build(generic_file &f, bool partial, bool read_only, unsigned char db_version)
used by constructors
libdar::database::i_database::options_to_dar
std::vector< std::string > options_to_dar
options to use when calling dar for restoration
Definition i_database.hpp:189
libdar::database::i_database::remove_archive
void remove_archive(archive_num min, archive_num max, const database_remove_options &opt)
remove an archive from a database
libdar::database::i_database::set_permutation
void set_permutation(archive_num src, archive_num dst)
change order of archive within the database
libdar::database::i_database::operator=
i_database & operator=(const i_database &ref)=delete
disabling assignement operator
libdar::database::i_database::set_path
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
libdar::database::i_database::restore
void restore(const std::vector< std::string > &filename, const database_restore_options &opt)
restore files calling dar on the appropriated archive
libdar::database::i_database::get_files
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
libdar::database::i_database::check_order
bool check_order() const
check that all files's Data and EA are more recent when archive number grows within the database,...
Definition i_database.hpp:165
libdar::database::i_database::show_most_recent_stats
void show_most_recent_stats(database_listing_statistics_callback callback, void *context) const
compute some statistics about the location of most recent file versions
libdar::database::i_database::data_files
storage * data_files
when reading archive in partial mode, this is where is located the "not readed" part of the archive (...
Definition i_database.hpp:192
libdar::database::i_database::i_database
i_database(const i_database &ref)=delete
disabling copy constructor
libdar::database::i_database::dar_path
std::string dar_path
path to dar
Definition i_database.hpp:190
libdar::database::i_database::compr_level
U_I compr_level
the compression level to use
Definition i_database.hpp:196
libdar::database::i_database::i_database
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
libdar::database::i_database::get_compression_level
U_I get_compression_level() const
returns the compression level used on file
Definition i_database.hpp:130
libdar::database::i_database::coordinate
std::deque< struct archive_data > coordinate
list of archive used to build the database
Definition i_database.hpp:188
libdar::database::i_database::set_compression_level
void set_compression_level(U_I level) const
change the compression level to use when storing base in file
Definition i_database.hpp:110
libdar::database::i_database::~i_database
~i_database()
i_database destructor (no implicit file saving)
libdar::database::i_database::set_compression
void set_compression(compression algozip) const
change compression to use when storing base on file
Definition i_database.hpp:107
libdar::database::i_database::get_contents
database_archives_list get_contents() const
provides the list of archive used to build the database
libdar::database::i_database::get_options
std::vector< std::string > get_options() const
return the options used with dar for restoration
Definition i_database.hpp:121
libdar::database::i_database::restore
void restore(const archive_options_read &read_options, const path &fs_root, archive_options_extract extract_options, const database_restore_options &opt, statistics *progressive_report)
restore files calling libdar directly rather than spawning dar CLI and parsing options as CLI
libdar::database::i_database::change_name
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
libdar::database::i_database::get_version
void get_version(database_listing_get_version_callback callback, void *context, path chemin) const
list the archive where a give file is present
libdar::database::i_database::dump
void dump(const std::string &filename, const database_dump_options &opt) const
write the database to a file (see database_header first)
libdar::database::i_database::get_database_version
std::string get_database_version() const
return the database format version
Definition i_database.hpp:133
libdar::database::i_database::set_dar_path
void set_dar_path(const std::string &chemin)
change the path to dar command
Definition i_database.hpp:104
libdar::database::i_database::i_database
i_database(const std::shared_ptr< user_interaction > &dialog)
this constructor build an empty database
libdar::database::i_database::add_archive
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
libdar::database::i_database::set_options
void set_options(const std::vector< std::string > &opt)
change the default options given to dar when performing restoration
Definition i_database.hpp:101
libdar::database_add_options
options to add an archive to base
Definition database_options.hpp:133
libdar::database_change_basename_options
options for changing a given archive's basename
Definition database_options.hpp:172
libdar::database_change_path_options
options for changing a given archive's path
Definition database_options.hpp:197
libdar::database_dump_options
options to write a database to file
Definition database_options.hpp:103
libdar::database_open_options
options to open a database
Definition database_options.hpp:54
libdar::database_remove_options
options to remove an archive from the base
Definition database_options.hpp:148
libdar::database_restore_options
options for restoration from database
Definition database_options.hpp:221
libdar::database_used_options
options for file "used" in archive
Definition database_options.hpp:294
libdar::datetime
stores time information
Definition datetime.hpp:59
libdar::generic_file
this is the interface class from which all other data transfer classes inherit
Definition generic_file.hpp:77
libdar::mem_ui
class mem_ui to keep a copy of a user_interaction object
Definition mem_ui.hpp:55
libdar::mem_ui::get_ui
user_interaction & get_ui() const
get access to the user_interaction object
Definition mem_ui.hpp:94
libdar::path
the class path is here to manipulate paths in the Unix notation: using'/'
Definition path.hpp:51
libdar::statistics
class used by libdar::archive class to give a summary of treated file during and after an operation
Definition statistics.hpp:70
libdar::storage
arbitrary large storage structure
Definition storage.hpp:53
data_dir.hpp
classes used to store directory tree information in dar_manager databases
database.hpp
this file holds the database class definition
database_archives.hpp
this file stores the list of archives a database has been built from. it is part of the database head...
database_options.hpp
this file holds the options for database operations
datetime.hpp
this file contains the definition of class datetime that stores unix times in a portable way
generic_file.hpp
class generic_file is defined here as well as class fichier
libdar::database_archives_list
std::deque< database_archives > database_archives_list
list of archives found in a database
Definition database_archives.hpp:75
libdar::database_listing_statistics_callback
void(*)(void *context, U_I number, const infinint &data_count, const infinint &total_data, const infinint &ea_count, const infinint &total_ea) database_listing_statistics_callback
called with teh information of statistics for each archive in turn
Definition database_listing_callback.hpp:81
libdar::database_listing_show_files_callback
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
Definition database_listing_callback.hpp:48
libdar::database_listing_get_version_callback
void(*)(void *context, archive_num num, db_etat data_presence, bool has_data_date, datetime data, db_etat ea_presence, bool has_ea_date, datetime ea) database_listing_get_version_callback
called with the information of presence for an entry in archive number num
Definition database_listing_callback.hpp:63
libdar::compression
compression
the different compression algorithm available
Definition compression.hpp:46
libdar::ea_saved_status::partial
@ partial
EA present in filesystem but not stored (ctime used to check changes)
mem_ui.hpp
class mem_ui definition. This class is to be used as parent class to handle user_interaction object m...
my_config.h
include macro defined by the configure script and some specific additional ones
libdar
libdar namespace encapsulate all libdar symbols
Definition archive.hpp:47
storage.hpp
contains a class that permits arbitrary large data storage
libdar::database::i_database::archive_data
holds the archive used to create the database
Definition i_database.hpp:182
libdar::database::i_database::archive_data::chemin
std::string chemin
path to the archive
Definition i_database.hpp:183
libdar::database::i_database::archive_data::root_last_mod
datetime root_last_mod
last modification date of the root directory
Definition i_database.hpp:185
libdar::database::i_database::archive_data::basename
std::string basename
basename of the archive
Definition i_database.hpp:184
tools.hpp
a set of general purpose routines