Disk ARchive  2.6.2
Full featured and portable backup and archiving tool
entrepot.hpp
Go to the documentation of this file.
1 /*********************************************************************/
2 // dar - disk archive - a backup/restoration program
3 // Copyright (C) 2002-2019 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 //
19 // to contact the author : http://dar.linux.free.fr/email.html
20 /*********************************************************************/
21 
33 
34 #ifndef ENTREPOT_HPP
35 #define ENTREPOT_HPP
36 
37 #include "../my_config.h"
38 
39 #include <string>
40 #include <memory>
41 #include "user_interaction.hpp"
42 #include "path.hpp"
43 #include "archive_aux.hpp"
44 #include "gf_mode.hpp"
45 
46 namespace libdar
47 {
50 
51  // no need to dig into this from API header
52  class fichier_global;
53 
55 
56  class entrepot
57  {
58  public:
59 
61  entrepot();
62 
64  entrepot(const entrepot & ref) = default;
65 
67  entrepot(entrepot && ref) noexcept = default;
68 
70  entrepot & operator = (const entrepot & ref) = default;
71 
73  entrepot & operator = (entrepot && ref) noexcept = default;
74 
76  virtual ~entrepot() = default;
77 
79  bool operator == (const entrepot & ref) const { return get_url() == ref.get_url(); };
80 
81 
83  virtual void set_location(const path & chemin);
84 
86  virtual void set_root(const path & p_root);
87 
89 
91  virtual path get_full_path() const;
92 
94  virtual std::string get_url() const = 0;
95 
97  void set_user_ownership(const std::string & x_user) { user = x_user; };
98  void set_group_ownership(const std::string & x_group) { group = x_group; };
99 
100  virtual const path & get_location() const { return where; }; //< retreives relative to root path the current location points to
101  virtual const path & get_root() const { return root; }; //< retrieves the given root location
102 
103  const std::string & get_user_ownership() const { return user; };
104  const std::string & get_group_ownership() const { return group; };
105 
107 
118  fichier_global *open(const std::shared_ptr<user_interaction> & dialog,
119  const std::string & filename,
120  gf_mode mode,
121  bool force_permission,
122  U_I permission,
123  bool fail_if_exists,
124  bool erase,
125  hash_algo algo) const;
126 
128  virtual void read_dir_reset() const = 0;
129  virtual bool read_dir_next(std::string & filename) const = 0;
130 
131  void unlink(const std::string & filename) const { inherited_unlink(filename); }; //< done this way for homogeneity with open/inherited_open
132 
134 
137  virtual entrepot *clone() const = 0;
138 
139  protected:
140  virtual fichier_global *inherited_open(const std::shared_ptr<user_interaction> & dialog, //< for user interaction
141  const std::string & filename, //< filename to open
142  gf_mode mode, //< mode to use
143  bool force_permission, //< set the permission of the file to open
144  U_I permission, //< value of the permission to assign when force_permission is true
145  bool fail_if_exists, //< whether to fail if file exists (write mode)
146  bool erase) const = 0; //< whether to erase file if file already exists (write mode)
147 
148  virtual void inherited_unlink(const std::string & filename) const = 0;
149 
150  virtual void read_dir_flush() = 0; //< ends the read_dir_next, (no more entry available)
151 
152  private:
153  path where;
154  path root;
155  std::string user;
156  std::string group;
157  };
158 
160 
161 } // end of namespace
162 
163 #endif
generic modes to open file
fichier_global * open(const std::shared_ptr< user_interaction > &dialog, const std::string &filename, gf_mode mode, bool force_permission, U_I permission, bool fail_if_exists, bool erase, hash_algo algo) const
defines the way to open a file and return a "class fichier_global" object as last argument upon succe...
virtual std::string get_url() const =0
full path of current directory + anything necessary to provide URL formated information ...
virtual void set_root(const path &p_root)
defines the root to use if set_location is given a relative path
virtual ~entrepot()=default
destructor
gf_mode
generic_file openning modes
Definition: gf_mode.hpp:43
entrepot()
constructor
bool operator==(const entrepot &ref) const
says whether two entrepot objects points to the same location
Definition: entrepot.hpp:79
defines the interaction interface between libdar and users.
here is the definition of the path classthe path class handle path and provide several operation on t...
abstraction of filesystem files for entrepot
virtual path get_full_path() const
returns the full path of location
virtual void read_dir_reset() const =0
routines to read existing files in the current directory (see set_location() / set_root() methods) ...
virtual void set_location(const path &chemin)
defines the directory where to proceed to future open() – this is a "chdir" semantics ...
hash_algo
hashing algorithm available
Definition: archive_aux.hpp:62
entrepot & operator=(const entrepot &ref)=default
assignment operator
void set_user_ownership(const std::string &x_user)
set default ownership for files to be created thanks to the open() methods
Definition: entrepot.hpp:97
the Entrepot interface
Definition: entrepot.hpp:56
libdar namespace encapsulate all libdar symbols
Definition: archive.hpp:46
set of datastructures used to interact with a catalogue object
virtual entrepot * clone() const =0
generate a clone of "this"
the class path is here to manipulate paths in the Unix notation: using&#39;/&#39;
Definition: path.hpp:50