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@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@145: /* Package requested for install does not exist */ danw@145: RAZOR_PACKAGE_INSTALL_UNAVAILABLE, danw@145: /* Package requested for removal does not exist */ danw@145: RAZOR_PACKAGE_REMOVE_NOT_INSTALLED, 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_package { danw@147: const char *name, *old_version, *new_version; danw@147: struct razor_package *old_package, *new_package; danw@137: enum razor_transaction_package_state state; danw@137: danw@145: /* dep_package is the name of the package that resulted in danw@145: * this entry being created (or NULL if the user requested the danw@145: * install/remove), with the other dep_ fields providing danw@145: * additional information. danw@145: * danw@145: * For INSTALL, if dep_type is REQUIRES, then dep_package danw@145: * required something that this package provides. If dep_type danw@145: * is CONFLICTS, then dep_package is a package that conflicted danw@145: * with an older version of this package, forcing an upgrade. danw@145: * danw@145: * For REMOVE, if dep_type is REQUIRES, then dep_package is a danw@145: * package that is being removed. If dep_type is OBSOLETES, danw@145: * then dep_package is a package that obsoletes this one. danw@145: * danw@145: * For OLD_CONFLICT or NEW_CONFLICT, dep_package is an danw@145: * existing package that conflicts with this one. The danw@145: * conflicting property comes from the already-installed danw@145: * package for OLD_CONFLICT, or the to-be-installed package danw@145: * for NEW_CONFLICT. danw@145: * danw@145: * For UNSATISFIABLE, the dep_ fields are as for an INSTALL, danw@145: * but the name field will be NULL. danw@145: */ danw@145: const char *dep_package; danw@145: enum razor_property_type dep_type; danw@145: const char *dep_property; danw@145: enum razor_version_relation dep_relation; danw@145: const char *dep_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_ */