razor.h
author Kristian H?gsberg <krh@redhat.com>
Mon Jun 09 23:51:52 2008 -0400 (2008-06-09)
changeset 238 d19dc7950c76
parent 234 7f5d32472bef
child 239 7a1b0282ae3c
permissions -rw-r--r--
Make razor_transaction_describe() work and use it in rpm wrapper.
     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 void razor_transaction_describe(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 					   enum razor_property_type type);
   131 
   132 /* Importer interface; for building a razor set from external sources,
   133  * like yum, rpmdb or razor package files. */
   134 
   135 struct razor_importer;
   136 struct razor_rpm;
   137 
   138 struct razor_importer *razor_importer_new(void);
   139 void razor_importer_destroy(struct razor_importer *importer);
   140 void razor_importer_begin_package(struct razor_importer *importer,
   141 				  const char *name,
   142 				  const char *version,
   143 				  const char *arch);
   144 void razor_importer_add_property(struct razor_importer *importer,
   145 				 const char *name,
   146 				 enum razor_version_relation relation,
   147 				 const char *version,
   148 				 enum razor_property_type type);
   149 void razor_importer_add_file(struct razor_importer *importer,
   150 			     const char *name);
   151 void razor_importer_finish_package(struct razor_importer *importer);
   152 
   153 int razor_importer_add_rpm(struct razor_importer *importer,
   154 			   struct razor_rpm *rpm);
   155 
   156 struct razor_set *razor_importer_finish(struct razor_importer *importer);
   157 
   158 void razor_build_evr(char *evr_buf, int size, const char *epoch,
   159 		     const char *version, const char *release);
   160 
   161 struct razor_set *razor_set_create_from_yum(void);
   162 struct razor_set *razor_set_create_from_rpmdb(void);
   163 
   164 /* RPM functions */
   165 
   166 struct razor_rpm *razor_rpm_open(const char *filename);
   167 int razor_rpm_install(struct razor_rpm *rpm, const char *root);
   168 int razor_rpm_close(struct razor_rpm *rpm);
   169 
   170 
   171 /* Razor root functions. The root data struct encapsulates filesystem
   172  * conventions and the locking protocol. */
   173 
   174 struct razor_root;
   175 #define RAZOR_ROOT_OPEN_WRITE 0x01
   176 
   177 int razor_root_create(const char *root);
   178 struct razor_root *razor_root_open(const char *root, int flags);
   179 struct razor_set *razor_root_open_read_only(const char *root);
   180 struct razor_transaction *
   181 razor_root_create_transaction(struct razor_root *image,
   182 			      struct razor_set *upstream);
   183 int razor_root_close(struct razor_root *image);
   184 void razor_root_update(struct razor_root *image, struct razor_set *next);
   185 int razor_root_commit(struct razor_root *image);
   186 void razor_root_diff(struct razor_root *root,
   187 		     razor_package_callback_t callback, void *data);
   188 
   189 #endif /* _RAZOR_H_ */