diff options
author | Timo Teras <timo.teras@iki.fi> | 2008-04-17 14:09:13 +0000 |
---|---|---|
committer | Timo Teras <timo.teras@iki.fi> | 2008-04-17 14:09:13 +0000 |
commit | d6c74352427367a334d37469962bbcf1b9ae364c (patch) | |
tree | 81ebcf6fc8abf08baea3f0015bc2f7a08768fb1f /src/apk_database.h | |
parent | 45d2c702fc8a47bc3f5ab4698de2bf1e377301c4 (diff) | |
download | apk-tools-d6c74352427367a334d37469962bbcf1b9ae364c.tar.gz apk-tools-d6c74352427367a334d37469962bbcf1b9ae364c.tar.bz2 apk-tools-d6c74352427367a334d37469962bbcf1b9ae364c.tar.xz apk-tools-d6c74352427367a334d37469962bbcf1b9ae364c.zip |
Initial commit of some stuff written so far. Still in state of flux. Expect
breakage and major changes.
Diffstat (limited to 'src/apk_database.h')
-rw-r--r-- | src/apk_database.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/apk_database.h b/src/apk_database.h new file mode 100644 index 0000000..96ff361 --- /dev/null +++ b/src/apk_database.h @@ -0,0 +1,97 @@ +/* apk_database.h - Alpine Package Keeper (APK) + * + * Copyright (C) 2005-2008 Natanael Copa <n@tanael.org> + * Copyright (C) 2008 Timo Teräs <timo.teras@iki.fi> + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 as published + * by the Free Software Foundation. See http://www.gnu.org/ for details. + */ + +#ifndef APK_PKGDB_H +#define APK_PKGDB_H + +#include "apk_version.h" +#include "apk_hash.h" +#include "apk_archive.h" +#include "apk_package.h" + +#define APK_MAX_REPOS 32 + +struct apk_db_file { + struct hlist_node dir_files_list; + struct hlist_node pkg_files_list; + + struct apk_db_dir *dir; + struct apk_package *owner; + char filename[]; +}; + +struct apk_db_dir { + apk_hash_node hash_node; + + struct hlist_head files; + struct apk_db_dir *parent; + + unsigned refs; + mode_t mode; + char dirname[]; +}; + +struct apk_name { + apk_hash_node hash_node; + + char *name; + struct apk_package_array *pkgs; +}; + +struct apk_repository { + char *url; +}; + +struct apk_database { + char *root; + unsigned pkg_id, num_repos; + + struct apk_dependency_array *world; + struct apk_repository repos[APK_MAX_REPOS]; + + struct { + struct apk_hash names; + struct apk_hash packages; + } available; + + struct { + struct hlist_head packages; + struct apk_hash dirs; + struct { + unsigned files; + unsigned dirs; + unsigned packages; + } stats; + } installed; +}; + +struct apk_name *apk_db_get_name(struct apk_database *db, const char *name); +void apk_name_free(struct apk_name *pkgname); + +void apk_db_init(struct apk_database *db, const char *root); +void apk_db_free(struct apk_database *db); +int apk_db_read_config(struct apk_database *db); +int apk_db_write_config(struct apk_database *db); + +int apk_db_pkg_add_file(struct apk_database *db, const char *file); +struct apk_package *apk_db_get_pkg(struct apk_database *db, csum_t sum); + +int apk_db_index_read(struct apk_database *db, int fd, int repo); +void apk_db_index_write(struct apk_database *db, int fd); + +int apk_db_add_repository(struct apk_database *db, const char *repo); +int apk_db_recalculate_and_commit(struct apk_database *db); + +int apk_db_install_pkg(struct apk_database *db, + struct apk_package *oldpkg, + struct apk_package *newpkg); + +#endif |