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@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@92: const char **name, const char **version); krh@92: void razor_package_iterator_destroy(struct razor_package_iterator *pi); krh@92: 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@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@137: RAZOR_PACKAGE_INSTALL = 0x01, danw@137: RAZOR_PACKAGE_REMOVE = 0x02, danw@137: danw@137: /* (Flags used to define the error states) */ danw@137: RAZOR_PACKAGE_UNAVAILABLE = 0x04, danw@137: RAZOR_PACKAGE_UNSATISFIABLE = 0x08, danw@137: RAZOR_PACKAGE_BLOCKED = 0x10, danw@140: RAZOR_PACKAGE_CONFLICT = 0x20, danw@137: danw@137: /* Error states */ danw@137: RAZOR_PACKAGE_INSTALL_UNAVAILABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNAVAILABLE, danw@137: RAZOR_PACKAGE_INSTALL_UNSATISFIABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNSATISFIABLE, danw@140: RAZOR_PACKAGE_INSTALL_CONFLICT = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_CONFLICT, danw@137: RAZOR_PACKAGE_REMOVE_NOT_INSTALLED = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_UNAVAILABLE, danw@140: RAZOR_PACKAGE_REMOVE_BLOCKED = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_BLOCKED, danw@140: RAZOR_PACKAGE_REMOVE_CONFLICT = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_CONFLICT danw@137: }; danw@137: danw@137: struct razor_transaction_package { danw@137: struct razor_package *package; danw@137: const char *name, *version; danw@137: enum razor_transaction_package_state state; danw@137: danw@137: const char *req_package; danw@140: enum razor_property_type req_type; danw@137: const char *req_property; danw@137: enum razor_version_relation req_relation; danw@137: const char *req_version; danw@137: }; danw@137: danw@137: struct razor_transaction { danw@137: int package_count, errors; danw@137: struct razor_transaction_package *packages; danw@137: danw@137: struct razor_set *system, *upstream; danw@137: }; danw@137: danw@137: struct razor_transaction * danw@137: razor_transaction_create(struct razor_set *system, struct razor_set *upstream, danw@137: int update_count, const char **update_packages, danw@137: int remove_count, const char **remove_packages); danw@137: void razor_transaction_describe(struct razor_transaction *trans); danw@137: struct razor_set *razor_transaction_run(struct razor_transaction *trans); danw@137: void razor_transaction_destroy(struct razor_transaction *trans); krh@44: 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, danw@143: const char *name, const char *version); 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_ */