razor.h
author Dan Winship <danw@gnome.org>
Fri Feb 29 12:45:08 2008 -0500 (2008-02-29)
changeset 138 49deac048d07
parent 129 d221757574c1
child 140 017f92f7039a
permissions -rw-r--r--
implement file dependencies for installs

removes are trickier because there are no backlinks from the files array
the properties array, so there's currently no way to efficiently determine
what packages are affected by the removal of a particular file
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@43
    29
int razor_set_write(struct razor_set *set, const char *filename);
krh@43
    30
krh@92
    31
struct razor_package *
krh@92
    32
razor_set_get_package(struct razor_set *set, const char *package);
krh@92
    33
krh@92
    34
struct razor_package_iterator;
krh@92
    35
struct razor_package_iterator *
krh@92
    36
razor_package_iterator_create(struct razor_set *set);
krh@101
    37
struct razor_package_iterator *
krh@101
    38
razor_package_iterator_create_for_property(struct razor_set *set,
krh@101
    39
					   struct razor_property *property);
krh@102
    40
struct razor_package_iterator *
krh@102
    41
razor_package_iterator_create_for_file(struct razor_set *set,
krh@102
    42
				       const char *filename);
krh@92
    43
krh@92
    44
int razor_package_iterator_next(struct razor_package_iterator *pi,
krh@92
    45
				struct razor_package **package,
krh@92
    46
				const char **name, const char **version);
krh@92
    47
void razor_package_iterator_destroy(struct razor_package_iterator *pi);
krh@92
    48
krh@92
    49
struct razor_property_iterator;
krh@92
    50
struct razor_property_iterator *
krh@92
    51
razor_property_iterator_create(struct razor_set *set,
krh@92
    52
			       struct razor_package *package);
krh@92
    53
int razor_property_iterator_next(struct razor_property_iterator *pi,
krh@92
    54
				 struct razor_property **property,
danw@109
    55
				 const char **name,
danw@109
    56
				 enum razor_version_relation *relation,
danw@109
    57
				 const char **version,
krh@92
    58
				 enum razor_property_type *type);
krh@92
    59
void
krh@92
    60
razor_property_iterator_destroy(struct razor_property_iterator *pi);
krh@92
    61
krh@49
    62
void razor_set_list_files(struct razor_set *set, const char *prefix);
krh@56
    63
void razor_set_list_package_files(struct razor_set *set, const char *name);
krh@43
    64
krh@43
    65
void razor_set_list_unsatisfied(struct razor_set *set);
krh@43
    66
krh@44
    67
typedef void (*razor_package_callback_t)(const char *name,
krh@44
    68
					 const char *old_version,
krh@44
    69
					 const char *new_version,
krh@44
    70
					 void *data);
krh@44
    71
void
krh@44
    72
razor_set_diff(struct razor_set *set, struct razor_set *upstream,
krh@44
    73
	       razor_package_callback_t callback, void *data);
krh@44
    74
danw@137
    75
/* Package transactions */
danw@137
    76
danw@137
    77
enum razor_transaction_package_state {
danw@137
    78
	/* Basic states */
danw@137
    79
	RAZOR_PACKAGE_INSTALL       = 0x01,
danw@137
    80
	RAZOR_PACKAGE_REMOVE        = 0x02,
danw@137
    81
danw@137
    82
	/* (Flags used to define the error states) */
danw@137
    83
	RAZOR_PACKAGE_UNAVAILABLE   = 0x04,
danw@137
    84
	RAZOR_PACKAGE_UNSATISFIABLE = 0x08,
danw@137
    85
	RAZOR_PACKAGE_BLOCKED       = 0x10,
danw@137
    86
danw@137
    87
	/* Error states */
danw@137
    88
	RAZOR_PACKAGE_INSTALL_UNAVAILABLE   = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNAVAILABLE,
danw@137
    89
	RAZOR_PACKAGE_INSTALL_UNSATISFIABLE = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_UNSATISFIABLE,
danw@137
    90
	RAZOR_PACKAGE_INSTALL_BLOCKED = RAZOR_PACKAGE_INSTALL | RAZOR_PACKAGE_BLOCKED,
danw@137
    91
	RAZOR_PACKAGE_REMOVE_NOT_INSTALLED  = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_UNAVAILABLE,
danw@137
    92
	RAZOR_PACKAGE_REMOVE_BLOCKED  = RAZOR_PACKAGE_REMOVE | RAZOR_PACKAGE_BLOCKED
danw@137
    93
};
danw@137
    94
danw@137
    95
struct razor_transaction_package {
danw@137
    96
	struct razor_package *package;
danw@137
    97
	const char *name, *version;
danw@137
    98
	enum razor_transaction_package_state state;
danw@137
    99
danw@137
   100
	const char *req_package;
danw@137
   101
	const char *req_property;
danw@137
   102
	enum razor_version_relation req_relation;
danw@137
   103
	const char *req_version;
danw@137
   104
};
danw@137
   105
danw@137
   106
struct razor_transaction {
danw@137
   107
	int package_count, errors;
danw@137
   108
	struct razor_transaction_package *packages;
danw@137
   109
danw@137
   110
	struct razor_set *system, *upstream;
danw@137
   111
};
danw@137
   112
danw@137
   113
struct razor_transaction *
danw@137
   114
razor_transaction_create(struct razor_set *system, struct razor_set *upstream,
danw@137
   115
			 int update_count, const char **update_packages,
danw@137
   116
			 int remove_count, const char **remove_packages);
danw@137
   117
void razor_transaction_describe(struct razor_transaction *trans);
danw@137
   118
struct razor_set *razor_transaction_run(struct razor_transaction *trans);
danw@137
   119
void razor_transaction_destroy(struct razor_transaction *trans);
krh@44
   120
krh@44
   121
/* Importer interface; for building a razor set from external sources,
krh@44
   122
 * like yum, rpmdb or razor package files. */
krh@44
   123
krh@30
   124
struct razor_importer;
krh@77
   125
struct razor_rpm;
krh@27
   126
krh@30
   127
struct razor_importer *razor_importer_new(void);
krh@75
   128
void razor_importer_destroy(struct razor_importer *importer);
krh@30
   129
void razor_importer_begin_package(struct razor_importer *importer,
krh@27
   130
				const char *name, const char *version);
krh@66
   131
void razor_importer_add_property(struct razor_importer *importer,
danw@109
   132
				 const char *name,
danw@109
   133
				 enum razor_version_relation relation,
danw@109
   134
				 const char *version,
krh@66
   135
				 enum razor_property_type type);
krh@46
   136
void razor_importer_add_file(struct razor_importer *importer,
krh@46
   137
			     const char *name);
krh@30
   138
void razor_importer_finish_package(struct razor_importer *importer);
krh@75
   139
krh@75
   140
int razor_importer_add_rpm(struct razor_importer *importer,
krh@77
   141
			   struct razor_rpm *rpm);
krh@75
   142
krh@30
   143
struct razor_set *razor_importer_finish(struct razor_importer *importer);
krh@27
   144
krh@70
   145
struct razor_set *razor_set_create_from_yum(void);
krh@28
   146
struct razor_set *razor_set_create_from_rpmdb(void);
krh@27
   147
krh@74
   148
/* RPM functions */
krh@77
   149
krh@77
   150
struct razor_rpm *razor_rpm_open(const char *filename);
krh@77
   151
int razor_rpm_install(struct razor_rpm *rpm, const char *root);
krh@77
   152
int razor_rpm_close(struct razor_rpm *rpm);
krh@74
   153
krh@27
   154
#endif /* _RAZOR_H_ */