unmerger.hh
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef PALUDIS_GUARD_PALUDIS_MERGER_UNMERGER_HH
00022 #define PALUDIS_GUARD_PALUDIS_MERGER_UNMERGER_HH 1
00023
00024 #include <paludis/util/exception.hh>
00025 #include <paludis/util/fs_entry.hh>
00026 #include <paludis/util/private_implementation_pattern.hh>
00027 #include <paludis/util/named_value.hh>
00028 #include <paludis/merger_entry_type.hh>
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 namespace paludis
00042 {
00043 class Hook;
00044 class Environment;
00045
00046 namespace n
00047 {
00048 struct environment;
00049 struct root;
00050 }
00051
00052
00053
00054
00055
00056
00057
00058
00059 struct UnmergerOptions
00060 {
00061 NamedValue<n::environment, const Environment *> environment;
00062 NamedValue<n::root, FSEntry> root;
00063 };
00064
00065
00066
00067
00068
00069
00070
00071
00072 class PALUDIS_VISIBLE UnmergerError :
00073 public Exception
00074 {
00075 public:
00076
00077
00078
00079 UnmergerError(const std::string & msg) throw ();
00080
00081
00082 };
00083
00084
00085
00086
00087
00088
00089
00090 class PALUDIS_VISIBLE Unmerger :
00091 private PrivateImplementationPattern<Unmerger>
00092 {
00093 protected:
00094
00095
00096
00097 Unmerger(const UnmergerOptions &);
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 class PALUDIS_VISIBLE ExtraInfo
00109 {
00110 public:
00111 virtual ~ExtraInfo();
00112 };
00113
00114 friend class Implementation<Unmerger>;
00115
00116
00117
00118
00119 void add_unmerge_entry(const std::string &, EntryType, const std::tr1::shared_ptr<ExtraInfo> &);
00120
00121
00122
00123
00124 virtual void populate_unmerge_set() = 0;
00125
00126
00127
00128
00129 virtual Hook extend_hook(const Hook &) const;
00130
00131
00132
00133
00134 virtual void unmerge_file(FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const;
00135 virtual void unmerge_dir(FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const;
00136 virtual void unmerge_sym(FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const;
00137 virtual void unmerge_misc(FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const;
00138
00139
00140
00141
00142
00143
00144 virtual bool check_file(const FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const
00145 {
00146 return true;
00147 }
00148
00149 virtual bool check_dir(const FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const
00150 {
00151 return true;
00152 }
00153
00154 virtual bool check_sym(const FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const
00155 {
00156 return true;
00157 }
00158
00159 virtual bool check_misc(const FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const
00160 {
00161 return true;
00162 }
00163
00164
00165
00166
00167
00168
00169 virtual void unlink_file(FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const;
00170 virtual void unlink_dir(FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const;
00171 virtual void unlink_sym(FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const;
00172 virtual void unlink_misc(FSEntry &, const std::tr1::shared_ptr<ExtraInfo> &) const;
00173
00174
00175
00176 virtual void display(const std::string &) const = 0;
00177
00178 public:
00179
00180
00181
00182 virtual ~Unmerger() = 0;
00183
00184
00185
00186
00187
00188
00189 void unmerge();
00190 };
00191 }
00192
00193 #endif