librazor/razor.h
author Kristian H?gsberg <krh@redhat.com>
Fri Jun 20 21:56:43 2008 -0400 (2008-06-20)
changeset 254 ccb1c11968ab
parent 253 338a577cdfd2
child 259 5b0601d184ed
permissions -rw-r--r--
Introduce install/remove iterators.

These iterator constructors lets you pass in two sets and creates
an iterator for the packages to remove or the packages to install.
The iterators will step through the packages in a sequence that respects
the pre, post, preun and postun modifiers.

Right now, the install order isn't actually implemented, this patch just
implements the API changes and updates the applications.
rhughes@241
     1
/*
rhughes@241
     2
 * Copyright (C) 2008  Kristian Høgsberg <krh@redhat.com>
rhughes@241
     3
 * Copyright (C) 2008  Red Hat, Inc
rhughes@241
     4
 *
rhughes@241
     5
 * This program is free software; you can redistribute it and/or modify
rhughes@241
     6
 * it under the terms of the GNU General Public License as published by
rhughes@241
     7
 * the Free Software Foundation; either version 2 of the License, or
rhughes@241
     8
 * (at your option) any later version.
rhughes@241
     9
 *
rhughes@241
    10
 * This program is distributed in the hope that it will be useful,
rhughes@241
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
rhughes@241
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
rhughes@241
    13
 * GNU General Public License for more details.
rhughes@241
    14
 *
rhughes@241
    15
 * You should have received a copy of the GNU General Public License along
rhughes@241
    16
 * with this program; if not, write to the Free Software Foundation, Inc.,
rhughes@241
    17
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
rhughes@241
    18
 */
rhughes@241
    19
rhughes@241
    20
#ifndef _RAZOR_H_
rhughes@241
    21
#define _RAZOR_H_
rhughes@241
    22
rhughes@241
    23
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
rhughes@241
    24
rhughes@241
    25
struct razor_set;
rhughes@241
    26
struct razor_package;
rhughes@241
    27
struct razor_property;
rhughes@241
    28
krh@247
    29
enum razor_property_flags {
krh@247
    30
	RAZOR_PROPERTY_LESS		= 1 << 0,
krh@247
    31
	RAZOR_PROPERTY_GREATER		= 1 << 1,
krh@247
    32
	RAZOR_PROPERTY_EQUAL		= 1 << 2,
krh@247
    33
	RAZOR_PROPERTY_RELATION_MASK	=
krh@247
    34
		RAZOR_PROPERTY_LESS |
krh@247
    35
		RAZOR_PROPERTY_GREATER |
krh@247
    36
		RAZOR_PROPERTY_EQUAL,
krh@247
    37
krh@247
    38
	RAZOR_PROPERTY_REQUIRES		= 0 << 3,
krh@247
    39
	RAZOR_PROPERTY_PROVIDES		= 1 << 3,
krh@247
    40
	RAZOR_PROPERTY_CONFLICTS	= 2 << 3,
krh@247
    41
	RAZOR_PROPERTY_OBSOLETES	= 3 << 3,
krh@247
    42
	RAZOR_PROPERTY_TYPE_MASK	= 3 << 3,
krh@247
    43
		
krh@247
    44
	RAZOR_PROPERTY_PRE		= 1 << 5,
krh@247
    45
	RAZOR_PROPERTY_POST		= 1 << 6,
krh@247
    46
	RAZOR_PROPERTY_PREUN		= 1 << 7,
krh@247
    47
	RAZOR_PROPERTY_POSTUN		= 1 << 8
rhughes@241
    48
};
rhughes@241
    49
krh@247
    50
const char *
krh@247
    51
razor_property_relation_to_string(struct razor_property *p);
krh@247
    52
const char *
krh@247
    53
razor_property_type_to_string(struct razor_property *p);
rhughes@241
    54
rhughes@241
    55
struct razor_set *razor_set_create(void);
rhughes@241
    56
struct razor_set *razor_set_open(const char *filename);
rhughes@241
    57
void razor_set_destroy(struct razor_set *set);
rhughes@241
    58
int razor_set_write_to_fd(struct razor_set *set, int fd);
rhughes@241
    59
int razor_set_write(struct razor_set *set, const char *filename);
rhughes@241
    60
rhughes@241
    61
struct razor_package *
rhughes@241
    62
razor_set_get_package(struct razor_set *set, const char *package);
rhughes@241
    63
rhughes@241
    64
struct razor_package_iterator;
rhughes@241
    65
struct razor_package_iterator *
rhughes@241
    66
razor_package_iterator_create(struct razor_set *set);
rhughes@241
    67
struct razor_package_iterator *
rhughes@241
    68
razor_package_iterator_create_for_property(struct razor_set *set,
rhughes@241
    69
					   struct razor_property *property);
rhughes@241
    70
struct razor_package_iterator *
rhughes@241
    71
razor_package_iterator_create_for_file(struct razor_set *set,
rhughes@241
    72
				       const char *filename);
rhughes@241
    73
rhughes@241
    74
int razor_package_iterator_next(struct razor_package_iterator *pi,
rhughes@241
    75
				struct razor_package **package,
rhughes@241
    76
				const char **name,
rhughes@241
    77
				const char **version,
rhughes@241
    78
				const char **arch);
rhughes@241
    79
void razor_package_iterator_destroy(struct razor_package_iterator *pi);
rhughes@241
    80
rhughes@241
    81
struct razor_package_query *
rhughes@241
    82
razor_package_query_create(struct razor_set *set);
rhughes@241
    83
void
rhughes@241
    84
razor_package_query_add_package(struct razor_package_query *pq,
rhughes@241
    85
				struct razor_package *p);
rhughes@241
    86
void
rhughes@241
    87
razor_package_query_add_iterator(struct razor_package_query *pq,
rhughes@241
    88
				 struct razor_package_iterator *pi);
rhughes@241
    89
struct razor_package_iterator *
rhughes@241
    90
razor_package_query_finish(struct razor_package_query *pq);
rhughes@241
    91
rhughes@241
    92
struct razor_property_iterator;
rhughes@241
    93
struct razor_property_iterator *
rhughes@241
    94
razor_property_iterator_create(struct razor_set *set,
rhughes@241
    95
			       struct razor_package *package);
rhughes@241
    96
int razor_property_iterator_next(struct razor_property_iterator *pi,
rhughes@241
    97
				 struct razor_property **property,
rhughes@241
    98
				 const char **name,
krh@247
    99
				 uint32_t *flags,
krh@247
   100
				 const char **version);
rhughes@241
   101
void
rhughes@241
   102
razor_property_iterator_destroy(struct razor_property_iterator *pi);
rhughes@241
   103
rhughes@241
   104
void razor_set_list_files(struct razor_set *set, const char *prefix);
rhughes@241
   105
void razor_set_list_package_files(struct razor_set *set, const char *name);
rhughes@241
   106
rhughes@241
   107
void razor_set_list_unsatisfied(struct razor_set *set);
rhughes@241
   108
krh@253
   109
enum razor_diff_action {
krh@253
   110
	RAZOR_DIFF_ACTION_ADD,
krh@253
   111
	RAZOR_DIFF_ACTION_REMOVE,
krh@253
   112
};
krh@253
   113
krh@253
   114
typedef void (*razor_diff_callback_t)(enum razor_diff_action action,
krh@253
   115
				      struct razor_package *package,
krh@253
   116
				      const char *name,
krh@253
   117
				      const char *version,
krh@253
   118
				      const char *arch,
krh@253
   119
				      void *data);
krh@253
   120
rhughes@241
   121
void
rhughes@241
   122
razor_set_diff(struct razor_set *set, struct razor_set *upstream,
krh@253
   123
	       razor_diff_callback_t callback, void *data);
krh@254
   124
struct razor_package_iterator *
krh@254
   125
razor_set_create_remove_iterator(struct razor_set *set,
krh@254
   126
				 struct razor_set *next);
krh@254
   127
struct razor_package_iterator *
krh@254
   128
razor_set_create_install_iterator(struct razor_set *set,
krh@254
   129
				  struct razor_set *next);
rhughes@241
   130
rhughes@241
   131
/* Package transactions */
rhughes@241
   132
rhughes@241
   133
struct razor_transaction *
rhughes@241
   134
razor_transaction_create(struct razor_set *system, struct razor_set *upstream);
rhughes@241
   135
void razor_transaction_install_package(struct razor_transaction *transaction,
rhughes@241
   136
				       struct razor_package *package);
rhughes@241
   137
void razor_transaction_remove_package(struct razor_transaction *transaction,
rhughes@241
   138
				      struct razor_package *package);
rhughes@241
   139
void razor_transaction_update_package(struct razor_transaction *trans,
rhughes@241
   140
				      struct razor_package *package);
rhughes@241
   141
void razor_transaction_update_all(struct razor_transaction *transaction);
rhughes@241
   142
int razor_transaction_resolve(struct razor_transaction *trans);
rhughes@241
   143
int razor_transaction_describe(struct razor_transaction *trans);
rhughes@241
   144
struct razor_set *razor_transaction_finish(struct razor_transaction *trans);
rhughes@241
   145
void razor_transaction_destroy(struct razor_transaction *trans);
rhughes@241
   146
rhughes@241
   147
/* Temporary helper for test suite. */
rhughes@241
   148
int razor_transaction_unsatisfied_property(struct razor_transaction *trans,
rhughes@241
   149
					   const char *name,
krh@247
   150
					   uint32_t flags,
krh@247
   151
					   const char *version);
rhughes@241
   152
rhughes@241
   153
/* Importer interface; for building a razor set from external sources,
rhughes@241
   154
 * like yum, rpmdb or razor package files. */
rhughes@241
   155
rhughes@241
   156
struct razor_importer;
rhughes@241
   157
struct razor_rpm;
rhughes@241
   158
krh@249
   159
struct razor_importer *razor_importer_create(void);
rhughes@241
   160
void razor_importer_destroy(struct razor_importer *importer);
rhughes@241
   161
void razor_importer_begin_package(struct razor_importer *importer,
rhughes@241
   162
				  const char *name,
rhughes@241
   163
				  const char *version,
rhughes@241
   164
				  const char *arch);
rhughes@241
   165
void razor_importer_add_property(struct razor_importer *importer,
rhughes@241
   166
				 const char *name,
krh@247
   167
				 uint32_t flags,
krh@247
   168
				 const char *version);
rhughes@241
   169
void razor_importer_add_file(struct razor_importer *importer,
rhughes@241
   170
			     const char *name);
rhughes@241
   171
void razor_importer_finish_package(struct razor_importer *importer);
rhughes@241
   172
rhughes@241
   173
int razor_importer_add_rpm(struct razor_importer *importer,
rhughes@241
   174
			   struct razor_rpm *rpm);
rhughes@241
   175
rhughes@241
   176
struct razor_set *razor_importer_finish(struct razor_importer *importer);
rhughes@241
   177
rhughes@241
   178
void razor_build_evr(char *evr_buf, int size, const char *epoch,
rhughes@241
   179
		     const char *version, const char *release);
krh@248
   180
int razor_versioncmp(const char *s1, const char *s2);
rhughes@241
   181
rhughes@241
   182
struct razor_set *razor_set_create_from_yum(void);
rhughes@241
   183
struct razor_set *razor_set_create_from_rpmdb(void);
rhughes@241
   184
rhughes@241
   185
/* RPM functions */
rhughes@241
   186
rhughes@241
   187
struct razor_rpm *razor_rpm_open(const char *filename);
rhughes@241
   188
int razor_rpm_install(struct razor_rpm *rpm, const char *root);
rhughes@241
   189
int razor_rpm_close(struct razor_rpm *rpm);
rhughes@241
   190
rhughes@241
   191
krh@250
   192
/* Razor root functions. The root data structure encapsulates
krh@250
   193
 * filesystem conventions and the locking protocol. */
rhughes@241
   194
rhughes@241
   195
struct razor_root;
rhughes@241
   196
rhughes@241
   197
int razor_root_create(const char *root);
krh@250
   198
struct razor_root *razor_root_open(const char *root);
rhughes@241
   199
struct razor_set *razor_root_open_read_only(const char *root);
krh@250
   200
struct razor_set *razor_root_get_system_set(struct razor_root *root);
krh@250
   201
int razor_root_close(struct razor_root *root);
krh@250
   202
void razor_root_update(struct razor_root *root, struct razor_set *next);
krh@250
   203
int razor_root_commit(struct razor_root *root);
rhughes@241
   204
rhughes@241
   205
#endif /* _RAZOR_H_ */