razor.h
author Kristian H?gsberg <krh@redhat.com>
Mon Jun 09 16:01:34 2008 -0400 (2008-06-09)
changeset 233 2555ce3e2567
parent 216 b97c130460a5
child 234 7f5d32472bef
permissions -rw-r--r--
Add librazor.a to Makefile to make it clearer what is core razor.
     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 struct razor_package_iterator;
    55 struct razor_package_iterator *
    56 razor_package_iterator_create(struct razor_set *set);
    57 struct razor_package_iterator *
    58 razor_package_iterator_create_for_property(struct razor_set *set,
    59 					   struct razor_property *property);
    60 struct razor_package_iterator *
    61 razor_package_iterator_create_for_file(struct razor_set *set,
    62 				       const char *filename);
    63 
    64 int razor_package_iterator_next(struct razor_package_iterator *pi,
    65 				struct razor_package **package,
    66 				const char **name,
    67 				const char **version,
    68 				const char **arch);
    69 void razor_package_iterator_destroy(struct razor_package_iterator *pi);
    70 
    71 struct razor_package_query *
    72 razor_package_query_create(struct razor_set *set);
    73 void
    74 razor_package_query_add_package(struct razor_package_query *pq,
    75 				struct razor_package *p);
    76 void
    77 razor_package_query_add_iterator(struct razor_package_query *pq,
    78 				 struct razor_package_iterator *pi);
    79 struct razor_package_iterator *
    80 razor_package_query_finish(struct razor_package_query *pq);
    81 
    82 struct razor_property_iterator;
    83 struct razor_property_iterator *
    84 razor_property_iterator_create(struct razor_set *set,
    85 			       struct razor_package *package);
    86 int razor_property_iterator_next(struct razor_property_iterator *pi,
    87 				 struct razor_property **property,
    88 				 const char **name,
    89 				 enum razor_version_relation *relation,
    90 				 const char **version,
    91 				 enum razor_property_type *type);
    92 void
    93 razor_property_iterator_destroy(struct razor_property_iterator *pi);
    94 
    95 void razor_set_list_files(struct razor_set *set, const char *prefix);
    96 void razor_set_list_package_files(struct razor_set *set, const char *name);
    97 
    98 void razor_set_list_unsatisfied(struct razor_set *set);
    99 
   100 typedef void (*razor_package_callback_t)(const char *name,
   101 					 const char *old_version,
   102 					 const char *new_version,
   103 					 const char *arch,
   104 					 void *data);
   105 void
   106 razor_set_diff(struct razor_set *set, struct razor_set *upstream,
   107 	       razor_package_callback_t callback, void *data);
   108 
   109 /* Package transactions */
   110 
   111 struct razor_transaction *
   112 razor_transaction_create(struct razor_set *system, struct razor_set *upstream);
   113 void razor_transaction_install_package(struct razor_transaction *transaction,
   114 				       struct razor_package *package);
   115 void razor_transaction_remove_package(struct razor_transaction *transaction,
   116 				      struct razor_package *package);
   117 void razor_transaction_update_package(struct razor_transaction *trans,
   118 				      struct razor_package *package);
   119 void razor_transaction_update_all(struct razor_transaction *transaction);
   120 int razor_transaction_resolve(struct razor_transaction *trans);
   121 struct razor_set *razor_transaction_finish(struct razor_transaction *trans);
   122 void razor_transaction_destroy(struct razor_transaction *trans);
   123 
   124 /* Temporary helper for test suite. */
   125 int razor_transaction_unsatisfied_property(struct razor_transaction *trans,
   126 					   const char *name,
   127 					   enum razor_version_relation rel,
   128 					   const char *version,
   129 					   enum razor_property_type type);
   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_ */