razor.h
author James Bowes <jbowes@redhat.com>
Sun Jun 08 17:11:41 2008 -0400 (2008-06-08)
changeset 224 5803b6151d02
parent 216 b97c130460a5
child 225 c51f49f38d18
permissions -rw-r--r--
Import summary and description into the repo files.

Also add a 'info' command for displaying them.
     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 const char *
    55 razor_package_get_summary(struct razor_set *set, struct razor_package *package);
    56 const char *
    57 razor_package_get_description(struct razor_set *set, struct razor_package *package);
    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 void razor_importer_add_property(struct razor_importer *importer,
   182 				 const char *name,
   183 				 enum razor_version_relation relation,
   184 				 const char *version,
   185 				 enum razor_property_type type);
   186 void razor_importer_add_file(struct razor_importer *importer,
   187 			     const char *name);
   188 void razor_importer_finish_package(struct razor_importer *importer);
   189 
   190 int razor_importer_add_rpm(struct razor_importer *importer,
   191 			   struct razor_rpm *rpm);
   192 
   193 struct razor_set *razor_importer_finish(struct razor_importer *importer);
   194 
   195 void razor_build_evr(char *evr_buf, int size, const char *epoch,
   196 		     const char *version, const char *release);
   197 
   198 struct razor_set *razor_set_create_from_yum(void);
   199 struct razor_set *razor_set_create_from_rpmdb(void);
   200 
   201 /* RPM functions */
   202 
   203 struct razor_rpm *razor_rpm_open(const char *filename);
   204 int razor_rpm_install(struct razor_rpm *rpm, const char *root);
   205 int razor_rpm_close(struct razor_rpm *rpm);
   206 
   207 #endif /* _RAZOR_H_ */