razor.h
author Kristian H?gsberg <krh@jiraiya.boston.redhat.com>
Wed Apr 09 02:41:03 2008 -0400 (2008-04-09)
changeset 211 cf0ca962262b
parent 208 7b460017c221
child 212 e8f493d8ff9a
permissions -rw-r--r--
Use the cpio headers instead of the rpm headers when unpacking.

The files in the cpio payload doesn't actually follow the file order
in the rpm headers, so we need to decode the cpio header and use the
information there.
     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_to_fd(struct razor_set *set, int fd);
    30 int razor_set_write(struct razor_set *set, const char *filename);
    31 
    32 struct razor_package *
    33 razor_set_get_package(struct razor_set *set, const char *package);
    34 
    35 struct razor_package_iterator;
    36 struct razor_package_iterator *
    37 razor_package_iterator_create(struct razor_set *set);
    38 struct razor_package_iterator *
    39 razor_package_iterator_create_for_property(struct razor_set *set,
    40 					   struct razor_property *property);
    41 struct razor_package_iterator *
    42 razor_package_iterator_create_for_file(struct razor_set *set,
    43 				       const char *filename);
    44 
    45 int razor_package_iterator_next(struct razor_package_iterator *pi,
    46 				struct razor_package **package,
    47 				const char **name,
    48 				const char **version,
    49 				const char **arch);
    50 void razor_package_iterator_destroy(struct razor_package_iterator *pi);
    51 
    52 struct razor_property_iterator;
    53 struct razor_property_iterator *
    54 razor_property_iterator_create(struct razor_set *set,
    55 			       struct razor_package *package);
    56 int razor_property_iterator_next(struct razor_property_iterator *pi,
    57 				 struct razor_property **property,
    58 				 const char **name,
    59 				 enum razor_version_relation *relation,
    60 				 const char **version,
    61 				 enum razor_property_type *type);
    62 void
    63 razor_property_iterator_destroy(struct razor_property_iterator *pi);
    64 
    65 void razor_set_list_files(struct razor_set *set, const char *prefix);
    66 void razor_set_list_package_files(struct razor_set *set, const char *name);
    67 
    68 void razor_set_list_unsatisfied(struct razor_set *set);
    69 
    70 typedef void (*razor_package_callback_t)(const char *name,
    71 					 const char *old_version,
    72 					 const char *new_version,
    73 					 const char *arch,
    74 					 void *data);
    75 void
    76 razor_set_diff(struct razor_set *set, struct razor_set *upstream,
    77 	       razor_package_callback_t callback, void *data);
    78 
    79 /* Package transactions */
    80 
    81 enum razor_transaction_package_state {
    82 	/* Basic states */
    83 	RAZOR_PACKAGE_INSTALL,
    84 	RAZOR_PACKAGE_FORCED_UPDATE,
    85 	RAZOR_PACKAGE_REMOVE,
    86 	RAZOR_PACKAGE_OBSOLETED,
    87 
    88 	/* Error states */
    89 
    90 	RAZOR_PACKAGE_FIRST_ERROR_STATE = 0x4,
    91 	RAZOR_PACKAGE_UNAVAILABLE_FLAG = 0x4,
    92 
    93 	/* Package requested for install does not exist */
    94 	RAZOR_PACKAGE_INSTALL_UNAVAILABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
    95 	/* Package requiring update does not have any update */
    96 	RAZOR_PACKAGE_UPDATE_UNAVAILABLE = RAZOR_PACKAGE_FORCED_UPDATE | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
    97 	/* Package requested for removal does not exist */
    98 	RAZOR_PACKAGE_REMOVE_NOT_INSTALLED = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
    99 	/* (not used) */
   100 	RAZOR_PACKAGE_OBSOLETE_UNAVAILABLE = RAZOR_PACKAGE_OBSOLETED | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
   101 
   102 	/* No newer version of package is available */
   103 	RAZOR_PACKAGE_UP_TO_DATE,
   104 	/* Package marked for both install and remove */
   105 	RAZOR_PACKAGE_CONTRADICTION,
   106 	/* Package would add a conflict with an already-installed package */
   107 	RAZOR_PACKAGE_NEW_CONFLICT,
   108 	/* Already-installed package has a conflict against this package */
   109 	RAZOR_PACKAGE_OLD_CONFLICT,
   110 	/* Requirement of to-be-installed package can't be satisfied */
   111 	RAZOR_PACKAGE_UNSATISFIABLE,
   112 };
   113 
   114 struct razor_transaction *
   115 razor_transaction_create(struct razor_set *system, struct razor_set *upstream);
   116 void razor_transaction_install_package(struct razor_transaction *transaction,
   117 				       struct razor_package *package);
   118 void razor_transaction_remove_package(struct razor_transaction *transaction,
   119 				      struct razor_package *package);
   120 void razor_transaction_update_all(struct razor_transaction *transaction);
   121 int razor_transaction_resolve(struct razor_transaction *trans);
   122 struct razor_set *razor_transaction_finish(struct razor_transaction *trans);
   123 void razor_transaction_destroy(struct razor_transaction *trans);
   124 
   125 /* Temporary helper for test suite. */
   126 int razor_transaction_unsatisfied_property(struct razor_transaction *trans,
   127 					   const char *name,
   128 					   enum razor_version_relation rel,
   129 					   const char *version);
   130 
   131 /* Importer interface; for building a razor set from external sources,
   132  * like yum, rpmdb or razor package files. */
   133 
   134 struct razor_importer;
   135 struct razor_rpm;
   136 
   137 struct razor_importer *razor_importer_new(void);
   138 void razor_importer_destroy(struct razor_importer *importer);
   139 void razor_importer_begin_package(struct razor_importer *importer,
   140 				  const char *name,
   141 				  const char *version,
   142 				  const char *arch);
   143 void razor_importer_add_property(struct razor_importer *importer,
   144 				 const char *name,
   145 				 enum razor_version_relation relation,
   146 				 const char *version,
   147 				 enum razor_property_type type);
   148 void razor_importer_add_file(struct razor_importer *importer,
   149 			     const char *name);
   150 void razor_importer_finish_package(struct razor_importer *importer);
   151 
   152 int razor_importer_add_rpm(struct razor_importer *importer,
   153 			   struct razor_rpm *rpm);
   154 
   155 struct razor_set *razor_importer_finish(struct razor_importer *importer);
   156 
   157 void razor_build_evr(char *evr_buf, int size, const char *epoch,
   158 		     const char *version, const char *release);
   159 
   160 struct razor_set *razor_set_create_from_yum(void);
   161 struct razor_set *razor_set_create_from_rpmdb(void);
   162 
   163 /* RPM functions */
   164 
   165 struct razor_rpm *razor_rpm_open(const char *filename);
   166 int razor_rpm_install(struct razor_rpm *rpm, const char *root);
   167 int razor_rpm_close(struct razor_rpm *rpm);
   168 
   169 #endif /* _RAZOR_H_ */