razor.h
author Dan Winship <danw@gnome.org>
Fri Feb 29 12:45:08 2008 -0500 (2008-02-29)
changeset 138 49deac048d07
parent 129 d221757574c1
child 140 017f92f7039a
permissions -rw-r--r--
implement file dependencies for installs

removes are trickier because there are no backlinks from the files array
the properties array, so there's currently no way to efficiently determine
what packages are affected by the removal of a particular file
     1 #ifndef _RAZOR_H_
     2 #define _RAZOR_H_
     3 
     4 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
     5 
     6 struct razor_set;
     7 struct razor_package;
     8 struct razor_property;
     9 
    10 enum razor_property_type {
    11 	RAZOR_PROPERTY_REQUIRES,
    12 	RAZOR_PROPERTY_PROVIDES,
    13 	RAZOR_PROPERTY_CONFLICTS,
    14 	RAZOR_PROPERTY_OBSOLETES
    15 };
    16 
    17 enum razor_version_relation {
    18 	RAZOR_VERSION_LESS,
    19 	RAZOR_VERSION_LESS_OR_EQUAL,
    20 	RAZOR_VERSION_EQUAL,
    21 	RAZOR_VERSION_GREATER_OR_EQUAL,
    22 	RAZOR_VERSION_GREATER
    23 };
    24 extern const char * const razor_version_relations[];
    25 
    26 struct razor_set *razor_set_create(void);
    27 struct razor_set *razor_set_open(const char *filename);
    28 void razor_set_destroy(struct razor_set *set);
    29 int razor_set_write(struct razor_set *set, const char *filename);
    30 
    31 struct razor_package *
    32 razor_set_get_package(struct razor_set *set, const char *package);
    33 
    34 struct razor_package_iterator;
    35 struct razor_package_iterator *
    36 razor_package_iterator_create(struct razor_set *set);
    37 struct razor_package_iterator *
    38 razor_package_iterator_create_for_property(struct razor_set *set,
    39 					   struct razor_property *property);
    40 struct razor_package_iterator *
    41 razor_package_iterator_create_for_file(struct razor_set *set,
    42 				       const char *filename);
    43 
    44 int razor_package_iterator_next(struct razor_package_iterator *pi,
    45 				struct razor_package **package,
    46 				const char **name, const char **version);
    47 void razor_package_iterator_destroy(struct razor_package_iterator *pi);
    48 
    49 struct razor_property_iterator;
    50 struct razor_property_iterator *
    51 razor_property_iterator_create(struct razor_set *set,
    52 			       struct razor_package *package);
    53 int razor_property_iterator_next(struct razor_property_iterator *pi,
    54 				 struct razor_property **property,
    55 				 const char **name,
    56 				 enum razor_version_relation *relation,
    57 				 const char **version,
    58 				 enum razor_property_type *type);
    59 void
    60 razor_property_iterator_destroy(struct razor_property_iterator *pi);
    61 
    62 void razor_set_list_files(struct razor_set *set, const char *prefix);
    63 void razor_set_list_package_files(struct razor_set *set, const char *name);
    64 
    65 void razor_set_list_unsatisfied(struct razor_set *set);
    66 
    67 typedef void (*razor_package_callback_t)(const char *name,
    68 					 const char *old_version,
    69 					 const char *new_version,
    70 					 void *data);
    71 void
    72 razor_set_diff(struct razor_set *set, struct razor_set *upstream,
    73 	       razor_package_callback_t callback, void *data);
    74 
    75 /* Package transactions */
    76 
    77 enum razor_transaction_package_state {
    78 	/* Basic states */
    79 	RAZOR_PACKAGE_INSTALL       = 0x01,
    80 	RAZOR_PACKAGE_REMOVE        = 0x02,
    81 
    82 	/* (Flags used to define the error states) */
    83 	RAZOR_PACKAGE_UNAVAILABLE   = 0x04,
    84 	RAZOR_PACKAGE_UNSATISFIABLE = 0x08,
    85 	RAZOR_PACKAGE_BLOCKED       = 0x10,
    86 
    87 	/* Error states */
    88 	RAZOR_PACKAGE_INSTALL_UNAVAILABLE   = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNAVAILABLE,
    89 	RAZOR_PACKAGE_INSTALL_UNSATISFIABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNSATISFIABLE,
    90 	RAZOR_PACKAGE_INSTALL_BLOCKED = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_BLOCKED,
    91 	RAZOR_PACKAGE_REMOVE_NOT_INSTALLED  = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_UNAVAILABLE,
    92 	RAZOR_PACKAGE_REMOVE_BLOCKED  = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_BLOCKED
    93 };
    94 
    95 struct razor_transaction_package {
    96 	struct razor_package *package;
    97 	const char *name, *version;
    98 	enum razor_transaction_package_state state;
    99 
   100 	const char *req_package;
   101 	const char *req_property;
   102 	enum razor_version_relation req_relation;
   103 	const char *req_version;
   104 };
   105 
   106 struct razor_transaction {
   107 	int package_count, errors;
   108 	struct razor_transaction_package *packages;
   109 
   110 	struct razor_set *system, *upstream;
   111 };
   112 
   113 struct razor_transaction *
   114 razor_transaction_create(struct razor_set *system, struct razor_set *upstream,
   115 			 int update_count, const char **update_packages,
   116 			 int remove_count, const char **remove_packages);
   117 void razor_transaction_describe(struct razor_transaction *trans);
   118 struct razor_set *razor_transaction_run(struct razor_transaction *trans);
   119 void razor_transaction_destroy(struct razor_transaction *trans);
   120 
   121 /* Importer interface; for building a razor set from external sources,
   122  * like yum, rpmdb or razor package files. */
   123 
   124 struct razor_importer;
   125 struct razor_rpm;
   126 
   127 struct razor_importer *razor_importer_new(void);
   128 void razor_importer_destroy(struct razor_importer *importer);
   129 void razor_importer_begin_package(struct razor_importer *importer,
   130 				const char *name, const char *version);
   131 void razor_importer_add_property(struct razor_importer *importer,
   132 				 const char *name,
   133 				 enum razor_version_relation relation,
   134 				 const char *version,
   135 				 enum razor_property_type type);
   136 void razor_importer_add_file(struct razor_importer *importer,
   137 			     const char *name);
   138 void razor_importer_finish_package(struct razor_importer *importer);
   139 
   140 int razor_importer_add_rpm(struct razor_importer *importer,
   141 			   struct razor_rpm *rpm);
   142 
   143 struct razor_set *razor_importer_finish(struct razor_importer *importer);
   144 
   145 struct razor_set *razor_set_create_from_yum(void);
   146 struct razor_set *razor_set_create_from_rpmdb(void);
   147 
   148 /* RPM functions */
   149 
   150 struct razor_rpm *razor_rpm_open(const char *filename);
   151 int razor_rpm_install(struct razor_rpm *rpm, const char *root);
   152 int razor_rpm_close(struct razor_rpm *rpm);
   153 
   154 #endif /* _RAZOR_H_ */