razor.h
author Kristian H?gsberg <krh@jiraiya.boston.redhat.com>
Wed Apr 09 02:41:03 2008 -0400 (2008-04-09)
changeset 211 cf0ca962262b
parent 208 7b460017c221
child 212 e8f493d8ff9a
permissions -rw-r--r--
Use the cpio headers instead of the rpm headers when unpacking.

The files in the cpio payload doesn't actually follow the file order
in the rpm headers, so we need to decode the cpio header and use the
information there.
krh@27
     1
#ifndef _RAZOR_H_
krh@27
     2
#define _RAZOR_H_
krh@27
     3
krh@43
     4
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
krh@43
     5
krh@43
     6
struct razor_set;
krh@92
     7
struct razor_package;
krh@92
     8
struct razor_property;
krh@43
     9
krh@66
    10
enum razor_property_type {
krh@66
    11
	RAZOR_PROPERTY_REQUIRES,
krh@66
    12
	RAZOR_PROPERTY_PROVIDES,
krh@66
    13
	RAZOR_PROPERTY_CONFLICTS,
krh@66
    14
	RAZOR_PROPERTY_OBSOLETES
krh@66
    15
};
krh@66
    16
danw@109
    17
enum razor_version_relation {
danw@109
    18
	RAZOR_VERSION_LESS,
danw@109
    19
	RAZOR_VERSION_LESS_OR_EQUAL,
danw@109
    20
	RAZOR_VERSION_EQUAL,
danw@109
    21
	RAZOR_VERSION_GREATER_OR_EQUAL,
danw@109
    22
	RAZOR_VERSION_GREATER
danw@109
    23
};
danw@137
    24
extern const char * const razor_version_relations[];
danw@109
    25
krh@91
    26
struct razor_set *razor_set_create(void);
krh@43
    27
struct razor_set *razor_set_open(const char *filename);
krh@43
    28
void razor_set_destroy(struct razor_set *set);
krh@197
    29
int razor_set_write_to_fd(struct razor_set *set, int fd);
krh@43
    30
int razor_set_write(struct razor_set *set, const char *filename);
krh@43
    31
krh@92
    32
struct razor_package *
krh@92
    33
razor_set_get_package(struct razor_set *set, const char *package);
krh@92
    34
krh@92
    35
struct razor_package_iterator;
krh@92
    36
struct razor_package_iterator *
krh@92
    37
razor_package_iterator_create(struct razor_set *set);
krh@101
    38
struct razor_package_iterator *
krh@101
    39
razor_package_iterator_create_for_property(struct razor_set *set,
krh@101
    40
					   struct razor_property *property);
krh@102
    41
struct razor_package_iterator *
krh@102
    42
razor_package_iterator_create_for_file(struct razor_set *set,
krh@102
    43
				       const char *filename);
krh@92
    44
krh@92
    45
int razor_package_iterator_next(struct razor_package_iterator *pi,
krh@92
    46
				struct razor_package **package,
krh@192
    47
				const char **name,
krh@192
    48
				const char **version,
krh@192
    49
				const char **arch);
krh@92
    50
void razor_package_iterator_destroy(struct razor_package_iterator *pi);
krh@92
    51
krh@92
    52
struct razor_property_iterator;
krh@92
    53
struct razor_property_iterator *
krh@92
    54
razor_property_iterator_create(struct razor_set *set,
krh@92
    55
			       struct razor_package *package);
krh@92
    56
int razor_property_iterator_next(struct razor_property_iterator *pi,
krh@92
    57
				 struct razor_property **property,
danw@109
    58
				 const char **name,
danw@109
    59
				 enum razor_version_relation *relation,
danw@109
    60
				 const char **version,
krh@92
    61
				 enum razor_property_type *type);
krh@92
    62
void
krh@92
    63
razor_property_iterator_destroy(struct razor_property_iterator *pi);
krh@92
    64
krh@49
    65
void razor_set_list_files(struct razor_set *set, const char *prefix);
krh@56
    66
void razor_set_list_package_files(struct razor_set *set, const char *name);
krh@43
    67
krh@43
    68
void razor_set_list_unsatisfied(struct razor_set *set);
krh@43
    69
krh@44
    70
typedef void (*razor_package_callback_t)(const char *name,
krh@44
    71
					 const char *old_version,
krh@44
    72
					 const char *new_version,
krh@192
    73
					 const char *arch,
krh@44
    74
					 void *data);
krh@44
    75
void
krh@44
    76
razor_set_diff(struct razor_set *set, struct razor_set *upstream,
krh@44
    77
	       razor_package_callback_t callback, void *data);
krh@44
    78
danw@137
    79
/* Package transactions */
danw@137
    80
danw@137
    81
enum razor_transaction_package_state {
danw@137
    82
	/* Basic states */
danw@145
    83
	RAZOR_PACKAGE_INSTALL,
danw@154
    84
	RAZOR_PACKAGE_FORCED_UPDATE,
danw@145
    85
	RAZOR_PACKAGE_REMOVE,
danw@154
    86
	RAZOR_PACKAGE_OBSOLETED,
danw@137
    87
danw@137
    88
	/* Error states */
danw@145
    89
danw@169
    90
	RAZOR_PACKAGE_FIRST_ERROR_STATE = 0x4,
danw@169
    91
	RAZOR_PACKAGE_UNAVAILABLE_FLAG = 0x4,
danw@169
    92
danw@145
    93
	/* Package requested for install does not exist */
danw@169
    94
	RAZOR_PACKAGE_INSTALL_UNAVAILABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
danw@169
    95
	/* Package requiring update does not have any update */
danw@169
    96
	RAZOR_PACKAGE_UPDATE_UNAVAILABLE = RAZOR_PACKAGE_FORCED_UPDATE | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
danw@145
    97
	/* Package requested for removal does not exist */
danw@169
    98
	RAZOR_PACKAGE_REMOVE_NOT_INSTALLED = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
danw@169
    99
	/* (not used) */
danw@169
   100
	RAZOR_PACKAGE_OBSOLETE_UNAVAILABLE = RAZOR_PACKAGE_OBSOLETED | RAZOR_PACKAGE_UNAVAILABLE_FLAG,
danw@169
   101
danw@145
   102
	/* No newer version of package is available */
danw@145
   103
	RAZOR_PACKAGE_UP_TO_DATE,
danw@145
   104
	/* Package marked for both install and remove */
danw@145
   105
	RAZOR_PACKAGE_CONTRADICTION,
danw@145
   106
	/* Package would add a conflict with an already-installed package */
danw@145
   107
	RAZOR_PACKAGE_NEW_CONFLICT,
danw@145
   108
	/* Already-installed package has a conflict against this package */
danw@145
   109
	RAZOR_PACKAGE_OLD_CONFLICT,
danw@145
   110
	/* Requirement of to-be-installed package can't be satisfied */
danw@154
   111
	RAZOR_PACKAGE_UNSATISFIABLE,
danw@137
   112
};
danw@137
   113
danw@137
   114
struct razor_transaction *
krh@208
   115
razor_transaction_create(struct razor_set *system, struct razor_set *upstream);
krh@208
   116
void razor_transaction_install_package(struct razor_transaction *transaction,
krh@208
   117
				       struct razor_package *package);
krh@208
   118
void razor_transaction_remove_package(struct razor_transaction *transaction,
krh@208
   119
				      struct razor_package *package);
krh@208
   120
void razor_transaction_update_all(struct razor_transaction *transaction);
krh@210
   121
int razor_transaction_resolve(struct razor_transaction *trans);
krh@196
   122
struct razor_set *razor_transaction_finish(struct razor_transaction *trans);
danw@137
   123
void razor_transaction_destroy(struct razor_transaction *trans);
krh@44
   124
krh@190
   125
/* Temporary helper for test suite. */
krh@190
   126
int razor_transaction_unsatisfied_property(struct razor_transaction *trans,
krh@190
   127
					   const char *name,
krh@190
   128
					   enum razor_version_relation rel,
krh@190
   129
					   const char *version);
krh@190
   130
krh@44
   131
/* Importer interface; for building a razor set from external sources,
krh@44
   132
 * like yum, rpmdb or razor package files. */
krh@44
   133
krh@30
   134
struct razor_importer;
krh@77
   135
struct razor_rpm;
krh@27
   136
krh@30
   137
struct razor_importer *razor_importer_new(void);
krh@75
   138
void razor_importer_destroy(struct razor_importer *importer);
krh@30
   139
void razor_importer_begin_package(struct razor_importer *importer,
krh@192
   140
				  const char *name,
krh@192
   141
				  const char *version,
krh@192
   142
				  const char *arch);
krh@66
   143
void razor_importer_add_property(struct razor_importer *importer,
danw@109
   144
				 const char *name,
danw@109
   145
				 enum razor_version_relation relation,
danw@109
   146
				 const char *version,
krh@66
   147
				 enum razor_property_type type);
krh@46
   148
void razor_importer_add_file(struct razor_importer *importer,
krh@46
   149
			     const char *name);
krh@30
   150
void razor_importer_finish_package(struct razor_importer *importer);
krh@75
   151
krh@75
   152
int razor_importer_add_rpm(struct razor_importer *importer,
krh@77
   153
			   struct razor_rpm *rpm);
krh@75
   154
krh@30
   155
struct razor_set *razor_importer_finish(struct razor_importer *importer);
krh@27
   156
danw@143
   157
void razor_build_evr(char *evr_buf, int size, const char *epoch,
danw@143
   158
		     const char *version, const char *release);
danw@143
   159
krh@70
   160
struct razor_set *razor_set_create_from_yum(void);
krh@28
   161
struct razor_set *razor_set_create_from_rpmdb(void);
krh@27
   162
krh@74
   163
/* RPM functions */
krh@77
   164
krh@77
   165
struct razor_rpm *razor_rpm_open(const char *filename);
krh@77
   166
int razor_rpm_install(struct razor_rpm *rpm, const char *root);
krh@77
   167
int razor_rpm_close(struct razor_rpm *rpm);
krh@74
   168
krh@27
   169
#endif /* _RAZOR_H_ */