krh@212: /* krh@212: * Copyright (C) 2008 Kristian Høgsberg krh@212: * Copyright (C) 2008 Red Hat, Inc krh@212: * krh@212: * This program is free software; you can redistribute it and/or modify krh@212: * it under the terms of the GNU General Public License as published by krh@212: * the Free Software Foundation; either version 2 of the License, or krh@212: * (at your option) any later version. krh@212: * krh@212: * This program is distributed in the hope that it will be useful, krh@212: * but WITHOUT ANY WARRANTY; without even the implied warranty of krh@212: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the krh@212: * GNU General Public License for more details. krh@212: * krh@212: * You should have received a copy of the GNU General Public License along krh@212: * with this program; if not, write to the Free Software Foundation, Inc., krh@212: * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. krh@212: */ krh@212: krh@27: #ifndef _RAZOR_H_ krh@27: #define _RAZOR_H_ krh@27: krh@43: #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) krh@43: krh@43: struct razor_set; krh@92: struct razor_package; krh@92: struct razor_property; krh@43: krh@66: enum razor_property_type { krh@66: RAZOR_PROPERTY_REQUIRES, krh@66: RAZOR_PROPERTY_PROVIDES, krh@66: RAZOR_PROPERTY_CONFLICTS, krh@66: RAZOR_PROPERTY_OBSOLETES krh@66: }; krh@66: danw@109: enum razor_version_relation { danw@109: RAZOR_VERSION_LESS, danw@109: RAZOR_VERSION_LESS_OR_EQUAL, danw@109: RAZOR_VERSION_EQUAL, danw@109: RAZOR_VERSION_GREATER_OR_EQUAL, danw@109: RAZOR_VERSION_GREATER danw@109: }; danw@137: extern const char * const razor_version_relations[]; danw@109: krh@91: struct razor_set *razor_set_create(void); krh@43: struct razor_set *razor_set_open(const char *filename); krh@43: void razor_set_destroy(struct razor_set *set); krh@197: int razor_set_write_to_fd(struct razor_set *set, int fd); krh@43: int razor_set_write(struct razor_set *set, const char *filename); krh@43: krh@92: struct razor_package * krh@92: razor_set_get_package(struct razor_set *set, const char *package); krh@92: krh@92: struct razor_package_iterator; krh@92: struct razor_package_iterator * krh@92: razor_package_iterator_create(struct razor_set *set); krh@101: struct razor_package_iterator * krh@101: razor_package_iterator_create_for_property(struct razor_set *set, krh@101: struct razor_property *property); krh@102: struct razor_package_iterator * krh@102: razor_package_iterator_create_for_file(struct razor_set *set, krh@102: const char *filename); krh@92: krh@92: int razor_package_iterator_next(struct razor_package_iterator *pi, krh@92: struct razor_package **package, krh@192: const char **name, krh@192: const char **version, krh@192: const char **arch); krh@92: void razor_package_iterator_destroy(struct razor_package_iterator *pi); krh@92: krh@216: struct razor_package_query * krh@216: razor_package_query_create(struct razor_set *set); krh@216: void krh@216: razor_package_query_add_package(struct razor_package_query *pq, krh@216: struct razor_package *p); krh@216: void krh@216: razor_package_query_add_iterator(struct razor_package_query *pq, krh@216: struct razor_package_iterator *pi); krh@216: struct razor_package_iterator * krh@216: razor_package_query_finish(struct razor_package_query *pq); krh@216: krh@92: struct razor_property_iterator; krh@92: struct razor_property_iterator * krh@92: razor_property_iterator_create(struct razor_set *set, krh@92: struct razor_package *package); krh@92: int razor_property_iterator_next(struct razor_property_iterator *pi, krh@92: struct razor_property **property, danw@109: const char **name, danw@109: enum razor_version_relation *relation, danw@109: const char **version, krh@92: enum razor_property_type *type); krh@92: void krh@92: razor_property_iterator_destroy(struct razor_property_iterator *pi); krh@92: krh@49: void razor_set_list_files(struct razor_set *set, const char *prefix); krh@56: void razor_set_list_package_files(struct razor_set *set, const char *name); krh@43: krh@43: void razor_set_list_unsatisfied(struct razor_set *set); krh@43: krh@44: typedef void (*razor_package_callback_t)(const char *name, krh@44: const char *old_version, krh@44: const char *new_version, krh@192: const char *arch, krh@44: void *data); krh@44: void krh@44: razor_set_diff(struct razor_set *set, struct razor_set *upstream, krh@44: razor_package_callback_t callback, void *data); krh@44: danw@137: /* Package transactions */ danw@137: danw@137: enum razor_transaction_package_state { danw@137: /* Basic states */ danw@145: RAZOR_PACKAGE_INSTALL, danw@154: RAZOR_PACKAGE_FORCED_UPDATE, danw@145: RAZOR_PACKAGE_REMOVE, danw@154: RAZOR_PACKAGE_OBSOLETED, danw@137: danw@137: /* Error states */ danw@145: danw@169: RAZOR_PACKAGE_FIRST_ERROR_STATE = 0x4, danw@169: RAZOR_PACKAGE_UNAVAILABLE_FLAG = 0x4, danw@169: danw@145: /* Package requested for install does not exist */ danw@169: RAZOR_PACKAGE_INSTALL_UNAVAILABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNAVAILABLE_FLAG, danw@169: /* Package requiring update does not have any update */ danw@169: RAZOR_PACKAGE_UPDATE_UNAVAILABLE = RAZOR_PACKAGE_FORCED_UPDATE | RAZOR_PACKAGE_UNAVAILABLE_FLAG, danw@145: /* Package requested for removal does not exist */ danw@169: RAZOR_PACKAGE_REMOVE_NOT_INSTALLED = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_UNAVAILABLE_FLAG, danw@169: /* (not used) */ danw@169: RAZOR_PACKAGE_OBSOLETE_UNAVAILABLE = RAZOR_PACKAGE_OBSOLETED | RAZOR_PACKAGE_UNAVAILABLE_FLAG, danw@169: danw@145: /* No newer version of package is available */ danw@145: RAZOR_PACKAGE_UP_TO_DATE, danw@145: /* Package marked for both install and remove */ danw@145: RAZOR_PACKAGE_CONTRADICTION, danw@145: /* Package would add a conflict with an already-installed package */ danw@145: RAZOR_PACKAGE_NEW_CONFLICT, danw@145: /* Already-installed package has a conflict against this package */ danw@145: RAZOR_PACKAGE_OLD_CONFLICT, danw@145: /* Requirement of to-be-installed package can't be satisfied */ danw@154: RAZOR_PACKAGE_UNSATISFIABLE, danw@137: }; danw@137: danw@137: struct razor_transaction * krh@208: razor_transaction_create(struct razor_set *system, struct razor_set *upstream); krh@208: void razor_transaction_install_package(struct razor_transaction *transaction, krh@208: struct razor_package *package); krh@208: void razor_transaction_remove_package(struct razor_transaction *transaction, krh@208: struct razor_package *package); krh@208: void razor_transaction_update_all(struct razor_transaction *transaction); krh@210: int razor_transaction_resolve(struct razor_transaction *trans); krh@196: struct razor_set *razor_transaction_finish(struct razor_transaction *trans); danw@137: void razor_transaction_destroy(struct razor_transaction *trans); krh@44: krh@190: /* Temporary helper for test suite. */ krh@190: int razor_transaction_unsatisfied_property(struct razor_transaction *trans, krh@190: const char *name, krh@190: enum razor_version_relation rel, krh@190: const char *version); krh@190: krh@44: /* Importer interface; for building a razor set from external sources, krh@44: * like yum, rpmdb or razor package files. */ krh@44: krh@30: struct razor_importer; krh@77: struct razor_rpm; krh@27: krh@30: struct razor_importer *razor_importer_new(void); krh@75: void razor_importer_destroy(struct razor_importer *importer); krh@30: void razor_importer_begin_package(struct razor_importer *importer, krh@192: const char *name, krh@192: const char *version, krh@192: const char *arch); krh@66: void razor_importer_add_property(struct razor_importer *importer, danw@109: const char *name, danw@109: enum razor_version_relation relation, danw@109: const char *version, krh@66: enum razor_property_type type); krh@46: void razor_importer_add_file(struct razor_importer *importer, krh@46: const char *name); krh@30: void razor_importer_finish_package(struct razor_importer *importer); krh@75: krh@75: int razor_importer_add_rpm(struct razor_importer *importer, krh@77: struct razor_rpm *rpm); krh@75: krh@30: struct razor_set *razor_importer_finish(struct razor_importer *importer); krh@27: danw@143: void razor_build_evr(char *evr_buf, int size, const char *epoch, danw@143: const char *version, const char *release); danw@143: krh@70: struct razor_set *razor_set_create_from_yum(void); krh@28: struct razor_set *razor_set_create_from_rpmdb(void); krh@27: krh@74: /* RPM functions */ krh@77: krh@77: struct razor_rpm *razor_rpm_open(const char *filename); krh@77: int razor_rpm_install(struct razor_rpm *rpm, const char *root); krh@77: int razor_rpm_close(struct razor_rpm *rpm); krh@74: krh@27: #endif /* _RAZOR_H_ */