librazor/razor.h
author Kristian H?gsberg <krh@redhat.com>
Fri Jun 20 23:13:09 2008 -0400 (2008-06-20)
changeset 257 0c3db660514d
parent 253 338a577cdfd2
child 259 5b0601d184ed
permissions -rw-r--r--
When uniquifying properties, also sort them on the owning package.

This ensures that whenever two packages provide or (or require, obsolete
or conflict) the same property, they appear in the same order in the
propertys list of packages.
     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_flags {
    30 	RAZOR_PROPERTY_LESS		= 1 << 0,
    31 	RAZOR_PROPERTY_GREATER		= 1 << 1,
    32 	RAZOR_PROPERTY_EQUAL		= 1 << 2,
    33 	RAZOR_PROPERTY_RELATION_MASK	=
    34 		RAZOR_PROPERTY_LESS |
    35 		RAZOR_PROPERTY_GREATER |
    36 		RAZOR_PROPERTY_EQUAL,
    37 
    38 	RAZOR_PROPERTY_REQUIRES		= 0 << 3,
    39 	RAZOR_PROPERTY_PROVIDES		= 1 << 3,
    40 	RAZOR_PROPERTY_CONFLICTS	= 2 << 3,
    41 	RAZOR_PROPERTY_OBSOLETES	= 3 << 3,
    42 	RAZOR_PROPERTY_TYPE_MASK	= 3 << 3,
    43 		
    44 	RAZOR_PROPERTY_PRE		= 1 << 5,
    45 	RAZOR_PROPERTY_POST		= 1 << 6,
    46 	RAZOR_PROPERTY_PREUN		= 1 << 7,
    47 	RAZOR_PROPERTY_POSTUN		= 1 << 8
    48 };
    49 
    50 const char *
    51 razor_property_relation_to_string(struct razor_property *p);
    52 const char *
    53 razor_property_type_to_string(struct razor_property *p);
    54 
    55 struct razor_set *razor_set_create(void);
    56 struct razor_set *razor_set_open(const char *filename);
    57 void razor_set_destroy(struct razor_set *set);
    58 int razor_set_write_to_fd(struct razor_set *set, int fd);
    59 int razor_set_write(struct razor_set *set, const char *filename);
    60 
    61 struct razor_package *
    62 razor_set_get_package(struct razor_set *set, const char *package);
    63 
    64 struct razor_package_iterator;
    65 struct razor_package_iterator *
    66 razor_package_iterator_create(struct razor_set *set);
    67 struct razor_package_iterator *
    68 razor_package_iterator_create_for_property(struct razor_set *set,
    69 					   struct razor_property *property);
    70 struct razor_package_iterator *
    71 razor_package_iterator_create_for_file(struct razor_set *set,
    72 				       const char *filename);
    73 
    74 int razor_package_iterator_next(struct razor_package_iterator *pi,
    75 				struct razor_package **package,
    76 				const char **name,
    77 				const char **version,
    78 				const char **arch);
    79 void razor_package_iterator_destroy(struct razor_package_iterator *pi);
    80 
    81 struct razor_package_query *
    82 razor_package_query_create(struct razor_set *set);
    83 void
    84 razor_package_query_add_package(struct razor_package_query *pq,
    85 				struct razor_package *p);
    86 void
    87 razor_package_query_add_iterator(struct razor_package_query *pq,
    88 				 struct razor_package_iterator *pi);
    89 struct razor_package_iterator *
    90 razor_package_query_finish(struct razor_package_query *pq);
    91 
    92 struct razor_property_iterator;
    93 struct razor_property_iterator *
    94 razor_property_iterator_create(struct razor_set *set,
    95 			       struct razor_package *package);
    96 int razor_property_iterator_next(struct razor_property_iterator *pi,
    97 				 struct razor_property **property,
    98 				 const char **name,
    99 				 uint32_t *flags,
   100 				 const char **version);
   101 void
   102 razor_property_iterator_destroy(struct razor_property_iterator *pi);
   103 
   104 void razor_set_list_files(struct razor_set *set, const char *prefix);
   105 void razor_set_list_package_files(struct razor_set *set, const char *name);
   106 
   107 void razor_set_list_unsatisfied(struct razor_set *set);
   108 
   109 enum razor_diff_action {
   110 	RAZOR_DIFF_ACTION_ADD,
   111 	RAZOR_DIFF_ACTION_REMOVE,
   112 };
   113 
   114 typedef void (*razor_diff_callback_t)(enum razor_diff_action action,
   115 				      struct razor_package *package,
   116 				      const char *name,
   117 				      const char *version,
   118 				      const char *arch,
   119 				      void *data);
   120 
   121 void
   122 razor_set_diff(struct razor_set *set, struct razor_set *upstream,
   123 	       razor_diff_callback_t callback, void *data);
   124 struct razor_package_iterator *
   125 razor_set_create_remove_iterator(struct razor_set *set,
   126 				 struct razor_set *next);
   127 struct razor_package_iterator *
   128 razor_set_create_install_iterator(struct razor_set *set,
   129 				  struct razor_set *next);
   130 
   131 /* Package transactions */
   132 
   133 struct razor_transaction *
   134 razor_transaction_create(struct razor_set *system, struct razor_set *upstream);
   135 void razor_transaction_install_package(struct razor_transaction *transaction,
   136 				       struct razor_package *package);
   137 void razor_transaction_remove_package(struct razor_transaction *transaction,
   138 				      struct razor_package *package);
   139 void razor_transaction_update_package(struct razor_transaction *trans,
   140 				      struct razor_package *package);
   141 void razor_transaction_update_all(struct razor_transaction *transaction);
   142 int razor_transaction_resolve(struct razor_transaction *trans);
   143 int razor_transaction_describe(struct razor_transaction *trans);
   144 struct razor_set *razor_transaction_finish(struct razor_transaction *trans);
   145 void razor_transaction_destroy(struct razor_transaction *trans);
   146 
   147 /* Temporary helper for test suite. */
   148 int razor_transaction_unsatisfied_property(struct razor_transaction *trans,
   149 					   const char *name,
   150 					   uint32_t flags,
   151 					   const char *version);
   152 
   153 /* Importer interface; for building a razor set from external sources,
   154  * like yum, rpmdb or razor package files. */
   155 
   156 struct razor_importer;
   157 struct razor_rpm;
   158 
   159 struct razor_importer *razor_importer_create(void);
   160 void razor_importer_destroy(struct razor_importer *importer);
   161 void razor_importer_begin_package(struct razor_importer *importer,
   162 				  const char *name,
   163 				  const char *version,
   164 				  const char *arch);
   165 void razor_importer_add_property(struct razor_importer *importer,
   166 				 const char *name,
   167 				 uint32_t flags,
   168 				 const char *version);
   169 void razor_importer_add_file(struct razor_importer *importer,
   170 			     const char *name);
   171 void razor_importer_finish_package(struct razor_importer *importer);
   172 
   173 int razor_importer_add_rpm(struct razor_importer *importer,
   174 			   struct razor_rpm *rpm);
   175 
   176 struct razor_set *razor_importer_finish(struct razor_importer *importer);
   177 
   178 void razor_build_evr(char *evr_buf, int size, const char *epoch,
   179 		     const char *version, const char *release);
   180 int razor_versioncmp(const char *s1, const char *s2);
   181 
   182 struct razor_set *razor_set_create_from_yum(void);
   183 struct razor_set *razor_set_create_from_rpmdb(void);
   184 
   185 /* RPM functions */
   186 
   187 struct razor_rpm *razor_rpm_open(const char *filename);
   188 int razor_rpm_install(struct razor_rpm *rpm, const char *root);
   189 int razor_rpm_close(struct razor_rpm *rpm);
   190 
   191 
   192 /* Razor root functions. The root data structure encapsulates
   193  * filesystem conventions and the locking protocol. */
   194 
   195 struct razor_root;
   196 
   197 int razor_root_create(const char *root);
   198 struct razor_root *razor_root_open(const char *root);
   199 struct razor_set *razor_root_open_read_only(const char *root);
   200 struct razor_set *razor_root_get_system_set(struct razor_root *root);
   201 int razor_root_close(struct razor_root *root);
   202 void razor_root_update(struct razor_root *root, struct razor_set *next);
   203 int razor_root_commit(struct razor_root *root);
   204 
   205 #endif /* _RAZOR_H_ */