razor.h
author James Bowes <jbowes@redhat.com>
Sun Jun 15 10:50:32 2008 -0400 (2008-06-15)
changeset 227 6a47b5fc2791
parent 224 5803b6151d02
child 229 cae6308aa5b1
permissions -rw-r--r--
Use a seperate string pool for files
     1 /*
     2  * Copyright (C) 2008  Kristian Høgsberg <krh@redhat.com>
     3  * Copyright (C) 2008  Red Hat, Inc
     4  *
     5  * This program is free software; you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation; either version 2 of the License, or
     8  * (at your option) any later version.
     9  *
    10  * This program is distributed in the hope that it will be useful,
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  * GNU General Public License for more details.
    14  *
    15  * You should have received a copy of the GNU General Public License along
    16  * with this program; if not, write to the Free Software Foundation, Inc.,
    17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
    18  */
    19 
    20 #ifndef _RAZOR_H_
    21 #define _RAZOR_H_
    22 
    23 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
    24 
    25 struct razor_set;
    26 struct razor_package;
    27 struct razor_property;
    28 
    29 enum razor_property_type {
    30 	RAZOR_PROPERTY_REQUIRES,
    31 	RAZOR_PROPERTY_PROVIDES,
    32 	RAZOR_PROPERTY_CONFLICTS,
    33 	RAZOR_PROPERTY_OBSOLETES
    34 };
    35 
    36 enum razor_version_relation {
    37 	RAZOR_VERSION_LESS,
    38 	RAZOR_VERSION_LESS_OR_EQUAL,
    39 	RAZOR_VERSION_EQUAL,
    40 	RAZOR_VERSION_GREATER_OR_EQUAL,
    41 	RAZOR_VERSION_GREATER
    42 };
    43 extern const char * const razor_version_relations[];
    44 
    45 struct razor_set *razor_set_create(void);
    46 struct razor_set *razor_set_open(const char *filename);
    47 void razor_set_destroy(struct razor_set *set);
    48 int razor_set_write_to_fd(struct razor_set *set, int fd);
    49 int razor_set_write(struct razor_set *set, const char *filename);
    50 
    51 struct razor_package *
    52 razor_set_get_package(struct razor_set *set, const char *package);
    53 
    54 void
    55 razor_package_get_details(struct razor_set *set, struct razor_package *package,
    56 			  const char **summary, const char **description,
    57 			  const char **url, const char **license);
    58 
    59 struct razor_package_iterator;
    60 struct razor_package_iterator *
    61 razor_package_iterator_create(struct razor_set *set);
    62 struct razor_package_iterator *
    63 razor_package_iterator_create_for_property(struct razor_set *set,
    64 					   struct razor_property *property);
    65 struct razor_package_iterator *
    66 razor_package_iterator_create_for_file(struct razor_set *set,
    67 				       const char *filename);
    68 
    69 int razor_package_iterator_next(struct razor_package_iterator *pi,
    70 				struct razor_package **package,
    71 				const char **name,
    72 				const char **version,
    73 				const char **arch);
    74 void razor_package_iterator_destroy(struct razor_package_iterator *pi);
    75 
    76 struct razor_package_query *
    77 razor_package_query_create(struct razor_set *set);
    78 void
    79 razor_package_query_add_package(struct razor_package_query *pq,
    80 				struct razor_package *p);
    81 void
    82 razor_package_query_add_iterator(struct razor_package_query *pq,
    83 				 struct razor_package_iterator *pi);
    84 struct razor_package_iterator *
    85 razor_package_query_finish(struct razor_package_query *pq);
    86 
    87 struct razor_property_iterator;
    88 struct razor_property_iterator *
    89 razor_property_iterator_create(struct razor_set *set,
    90 			       struct razor_package *package);
    91 int razor_property_iterator_next(struct razor_property_iterator *pi,
    92 				 struct razor_property **property,
    93 				 const char **name,
    94 				 enum razor_version_relation *relation,
    95 				 const char **version,
    96 				 enum razor_property_type *type);
    97 void
    98 razor_property_iterator_destroy(struct razor_property_iterator *pi);
    99 
   100 void razor_set_list_files(struct razor_set *set, const char *prefix);
   101 void razor_set_list_package_files(struct razor_set *set, const char *name);
   102 
   103 void razor_set_list_unsatisfied(struct razor_set *set);
   104 
   105 typedef void (*razor_package_callback_t)(const char *name,
   106 					 const char *old_version,
   107 					 const char *new_version,
   108 					 const char *arch,
   109 					 void *data);
   110 void
   111 razor_set_diff(struct razor_set *set, struct razor_set *upstream,
   112 	       razor_package_callback_t callback, void *data);
   113 
   114 /* Package transactions */
   115 
   116 enum razor_transaction_package_state {
   117 	/* Basic states */
   118 	RAZOR_PACKAGE_INSTALL,
   119 	RAZOR_PACKAGE_FORCED_UPDATE,
   120 	RAZOR_PACKAGE_REMOVE,
   121 	RAZOR_PACKAGE_OBSOLETED,
   122 
   123 	/* Error states */
   124 
   125 	RAZOR_PACKAGE_FIRST_ERROR_STATE = 0x4,
   126 	RAZOR_PACKAGE_UNAVAILABLE_FLAG = 0x4,
   127 
   128 	/* Package requested for install does not exist */
   129 	RAZOR_PACKAGE_INSTALL_UNAVAILABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
   130 	/* Package requiring update does not have any update */
   131 	RAZOR_PACKAGE_UPDATE_UNAVAILABLE = RAZOR_PACKAGE_FORCED_UPDATE | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
   132 	/* Package requested for removal does not exist */
   133 	RAZOR_PACKAGE_REMOVE_NOT_INSTALLED = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
   134 	/* (not used) */
   135 	RAZOR_PACKAGE_OBSOLETE_UNAVAILABLE = RAZOR_PACKAGE_OBSOLETED | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
   136 
   137 	/* No newer version of package is available */
   138 	RAZOR_PACKAGE_UP_TO_DATE,
   139 	/* Package marked for both install and remove */
   140 	RAZOR_PACKAGE_CONTRADICTION,
   141 	/* Package would add a conflict with an already-installed package */
   142 	RAZOR_PACKAGE_NEW_CONFLICT,
   143 	/* Already-installed package has a conflict against this package */
   144 	RAZOR_PACKAGE_OLD_CONFLICT,
   145 	/* Requirement of to-be-installed package can't be satisfied */
   146 	RAZOR_PACKAGE_UNSATISFIABLE,
   147 };
   148 
   149 struct razor_transaction *
   150 razor_transaction_create(struct razor_set *system, struct razor_set *upstream);
   151 void razor_transaction_install_package(struct razor_transaction *transaction,
   152 				       struct razor_package *package);
   153 void razor_transaction_remove_package(struct razor_transaction *transaction,
   154 				      struct razor_package *package);
   155 void razor_transaction_update_all(struct razor_transaction *transaction);
   156 int razor_transaction_resolve(struct razor_transaction *trans);
   157 struct razor_set *razor_transaction_finish(struct razor_transaction *trans);
   158 void razor_transaction_destroy(struct razor_transaction *trans);
   159 
   160 /* Temporary helper for test suite. */
   161 int razor_transaction_unsatisfied_property(struct razor_transaction *trans,
   162 					   const char *name,
   163 					   enum razor_version_relation rel,
   164 					   const char *version);
   165 
   166 /* Importer interface; for building a razor set from external sources,
   167  * like yum, rpmdb or razor package files. */
   168 
   169 struct razor_importer;
   170 struct razor_rpm;
   171 
   172 struct razor_importer *razor_importer_new(void);
   173 void razor_importer_destroy(struct razor_importer *importer);
   174 void razor_importer_begin_package(struct razor_importer *importer,
   175 				  const char *name,
   176 				  const char *version,
   177 				  const char *arch);
   178 void razor_importer_add_details(struct razor_importer *importer,
   179 				const char *summary,
   180 				const char *description,
   181 				const char *url,
   182 				const char *license);
   183 void razor_importer_add_property(struct razor_importer *importer,
   184 				 const char *name,
   185 				 enum razor_version_relation relation,
   186 				 const char *version,
   187 				 enum razor_property_type type);
   188 void razor_importer_add_file(struct razor_importer *importer,
   189 			     const char *name);
   190 void razor_importer_finish_package(struct razor_importer *importer);
   191 
   192 int razor_importer_add_rpm(struct razor_importer *importer,
   193 			   struct razor_rpm *rpm);
   194 
   195 struct razor_set *razor_importer_finish(struct razor_importer *importer);
   196 
   197 void razor_build_evr(char *evr_buf, int size, const char *epoch,
   198 		     const char *version, const char *release);
   199 
   200 struct razor_set *razor_set_create_from_yum(void);
   201 struct razor_set *razor_set_create_from_rpmdb(void);
   202 
   203 /* RPM functions */
   204 
   205 struct razor_rpm *razor_rpm_open(const char *filename);
   206 int razor_rpm_install(struct razor_rpm *rpm, const char *root);
   207 int razor_rpm_close(struct razor_rpm *rpm);
   208 
   209 #endif /* _RAZOR_H_ */