31 #include "archive_utils.h"
32 #include "file_utils.h"
40 #include <ext/stdio_filebuf.h>
44 #define PKG_DB_DIR "var/lib/pkg/DB/"
45 #define PKG_FILES "/files"
46 #define PKG_META "META"
47 #define PKG_RECEPT "Pkgfile"
48 #define PKG_README "README"
49 #define PKG_PRE_INSTALL ".PRE"
50 #define PKG_POST_INSTALL ".POST"
52 #define PKG_REJECTED "var/lib/pkg/rejected"
53 #define PKGADD_CONF "var/lib/pkg/pkgadd.conf"
54 #define PKGADD_CONF_MAXLINE 1024
56 #define LDCONFIG "sbin/ldconfig"
57 #define LDCONFIG_CONF "etc/ld.so.conf"
58 #define LDCONFIG_CONF_ARGS "-r "
59 #define SHELL "bin/sh"
62 #define INSTALL_INFO "usr/bin/install-info"
63 #define INSTALL_INFO_ARGS "--info-dir=usr/share/info "
66 #define UPDATE_ICON "usr/bin/gtk-update-icon-cache"
67 #define UPDATE_ICON_ARGS "-f -t "
70 #define COMPILE_SCHEMAS "usr/bin/glib-compile-schemas"
71 #define COMPILE_SCHEMAS_ARGS ""
74 #define UPDATE_DESKTOP_DB "usr/bin/update-desktop-database"
75 #define UPDATE_DESKTOP_DB_ARGS "-q "
78 #define UPDATE_MIME_DB "usr/bin/update-mime-database"
79 #define UPDATE_MIME_DB_ARGS "-n "
82 #define GDK_PIXBUF_QUERY_LOADER "usr/bin/gdk-pixbuf-query-loaders"
83 #define GDK_PIXBUF_QUERY_LOADER_ARGS "--update-cache"
86 #define GIO_QUERYMODULES "usr/bin/gio-querymodules"
87 #define GIO_QUERYMODULES_ARGS "usr/lib/gio/modules"
90 #define QUERY_IMMODULES_3 "usr/bin/gtk-query-immodules-3.0"
91 #define QUERY_IMMODULES_3_ARGS "--update-cache"
94 #define QUERY_IMMODULES_2 "usr/bin/gtk-query-immodules-2.0"
95 #define QUERY_IMMODULES_2_ARGS "--update-cache"
98 #define MKFONTDIR "usr/bin/mkfontdir"
99 #define MKFONTDIR_ARGS ""
102 #define MKFONTSCALE "usr/bin/mkfontscale"
103 #define MKFONTSCALE_ARGS ""
106 #define FC_CACHE "usr/bin/fc-cache"
107 #define FC_CACHE_ARGS ""
117 PKG_PREINSTALL_START,
122 PKG_POSTINSTALL_START,
137 std::string collection;
138 std::string description;
139 std::string signature;
144 std::string contributors;
145 std::string packager;
146 std::string maintainer;
151 std::set< std::pair<std::string,time_t> > dependencies;
152 std::set<std::string> alias;
153 std::set<std::string> set;
154 std::set<std::string> categories;
155 std::set<std::string> files;
157 typedef std::map<std::string, pkginfo_t> packages_t;
158 typedef std::map<std::string, std::string> alias_t;
185 explicit Pkgdbh(
const std::string& name);
189 virtual void parseArguments(
int argc,
char** argv);
190 virtual void run(
int argc,
char** argv) {};
191 virtual void run() {};
193 virtual void printHelp()
const {};
195 virtual void progressInfo();
196 virtual void treatErrors(
const std::string& s)
const;
199 void print_version()
const;
200 int getNumberOfPackages();
201 std::set<std::string> getListOfPackageName();
203 bool checkPackageNameExist(
const std::string& name)
const;
204 bool checkDependency(
const std::string& name);
205 void setDependency();
206 void resetDependency();
208 unsigned int getFilesNumber();
209 unsigned int getInstalledFilesNumber();
210 std::set<std::string> getFilesList();
215 std::set<std::string> getFilesOfPackage(
const std::string& packageName);
216 int getListOfPackageNames(
const std::string& path);
217 std::pair<std::string, pkginfo_t> getInfosPackage(
const std::string& packageName);
226 const std::string& packageName);
229 void addPackageFilesRefsToDB(
const std::string& name,
232 bool checkPackageNameUptodate(
const std::pair<std::string,
234 bool checkPackageNameBuildDateSame(
const std::pair<std::string,
235 time_t>& dependencieNameBuild);
240 void removePackageFiles(
const std::string& name);
241 void removePackageFiles(
const std::string& name,
242 const std::set<std::string>& keep_list);
247 void removePackageFilesRefsFromDB(
const std::string& name);
248 void removePackageFilesRefsFromDB(std::set<std::string> files,
249 const std::set<std::string>& keep_list);
250 std::set<std::string> getConflictsFilesList(
const std::string& name,
254 std::pair<std::string, pkginfo_t> openArchivePackage(
const std::string& filename);
255 std::set< std::pair<std::string, time_t> > getPackageDependencies(
const std::string& filename);
256 void extractAndRunPREfromPackage(
const std::string& filename);
257 void installArchivePackage(
const std::string& filename,
258 const std::set<std::string>& keep_list,
259 const std::set<std::string>& non_install_files);
264 void moveMetaFilesPackage(
const std::string& name,
pkginfo_t& info);
267 void readRulesFile();
268 void getInstallRulesList(
const std::vector<rule_t>& rules,
269 rule_event_t event, std::vector<rule_t>& found)
const;
270 bool checkRuleAppliesToFile(
const rule_t& rule,
271 const std::string& file);
273 void getFootprintPackage(std::string& filename);
275 std::string m_packageArchiveName;
276 std::string m_packageName;
277 std::string m_packageArchiveVersion;
278 std::string m_packageArchiveRelease;
279 std::string m_packageArchiveCollection;
280 std::string m_packageVersion;
281 std::string m_packageRelease;
282 std::string m_packageCollection;
283 std::string m_utilName;
286 std::vector<rule_t> m_actionRules;
287 std::set< std::pair<std::string, int> > m_postInstallList;
288 alias_t m_listOfAlias;
290 packages_t m_listOfInstPackages;
291 packages_t m_listOfDepotPackages;
293 std::set<std::pair<std::string,std::set<std::string> > > m_listOfInstalledPackagesWithDeps;
295 action m_actualAction;
300 void runLastPostInstall();
302 std::set<std::string> m_runtimeLibrariesList;
303 std::set<std::string> m_filesList;
304 std::set<std::string> m_packageNamesList;
305 unsigned int m_filesNumber;
306 unsigned int m_installedFilesNumber;
316 Db_lock(
const std::string& m_root,
bool exclusive);
321 struct sigaction m_sa;
325 void assertArgument(
char** argv,
int argc,
int index);
326 void rotatingCursor();