1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#ifndef REPREPRO_TARGET_H
#define REPREPRO_TARGET_H
#ifndef REPREPRO_STRLIST_H
#include "strlist.h"
#endif
#ifndef REPREPRO_NAMES_H
#include "names.h"
#endif
#ifndef REPREPRO_ATOMS_H
#include "atoms.h"
#endif
#ifndef REPREPRO_DATABASE_H
#include "database.h"
#endif
#ifndef REPREPRO_TRACKINGT_H
#include "trackingt.h"
#endif
#ifndef REPREPRO_CHECKSUMS_H
#include "checksums.h"
#endif
#ifndef REPREPRO_EXPORTS_H
#include "exports.h"
#endif
struct target;
struct alloverrides;
typedef retvalue get_version(const char *, /*@out@*/char **);
typedef retvalue get_architecture(const char *, /*@out@*/architecture_t *);
struct package;
typedef retvalue get_installdata(const struct target *, struct package *, /*@out@*/char **, /*@out@*/struct strlist *, /*@out@*/struct checksumsarray *);
/* md5sums may be NULL */
typedef retvalue get_filekeys(const char *, /*@out@*/struct strlist *);
typedef retvalue get_checksums(const char *, /*@out@*/struct checksumsarray *);
typedef retvalue do_reoverride(const struct target *, const char * /*packagename*/, const char *, /*@out@*/char **);
typedef retvalue do_retrack(const char * /*packagename*/, const char * /*controlchunk*/, trackingdb);
typedef retvalue get_sourceandversion(const char *, const char * /*packagename*/, /*@out@*/char ** /*source_p*/, /*@out@*/char ** /*version_p*/);
typedef retvalue complete_checksums(const char *, const struct strlist *, struct checksums **, /*@out@*/char **);
struct distribution;
struct target {
struct distribution *distribution;
component_t component;
architecture_t architecture;
packagetype_t packagetype;
char *identifier;
/* links into the correct description in distribution */
/*@dependent@*/const struct exportmode *exportmode;
/* the directory relative to <distdir>/<codename>/ to use */
char *relativedirectory;
/* functions to use on the packages included */
get_version *getversion;
/* binary packages might be "all" or the architecture of the target */
get_architecture *getarchitecture;
get_installdata *getinstalldata;
get_filekeys *getfilekeys;
get_checksums *getchecksums;
get_sourceandversion *getsourceandversion;
do_reoverride *doreoverride;
do_retrack *doretrack;
complete_checksums *completechecksums;
bool wasmodified, saved_wasmodified;
/* set when existed at startup time, only valid in --nofast mode */
bool existed;
/* the next one in the list of targets of a distribution */
struct target *next;
/* is initialized as soon as needed: */
struct table *packages;
/* do not allow write operations */
bool readonly;
/* has noexport option */
bool noexport;
/* was updated without tracking data (no problem when distribution
* has no tracking, otherwise cause warning later) */
bool staletracking;
};
retvalue target_initialize_ubinary(/*@dependant@*/struct distribution *, component_t, architecture_t, /*@dependent@*/const struct exportmode *, bool /*readonly*/, bool /*noexport*/, /*@NULL@*/const char *fakecomponentprefix, /*@out@*/struct target **);
retvalue target_initialize_dbinary(/*@dependant@*/struct distribution *, component_t, architecture_t, /*@dependent@*/const struct exportmode *, bool /*readonly*/, bool /*noexport*/, /*@NULL@*/const char *fakecomponentprefix, /*@out@*/struct target **);
retvalue target_initialize_binary(/*@dependant@*/struct distribution *, component_t, architecture_t, /*@dependent@*/const struct exportmode *, bool /*readonly*/, bool /*noexport*/, /*@NULL@*/const char *fakecomponentprefix, /*@out@*/struct target **);
retvalue target_initialize_source(/*@dependant@*/struct distribution *, component_t, /*@dependent@*/const struct exportmode *, bool /*readonly*/, bool /*noexport*/, /*@NULL@*/const char *fakecomponentprefix, /*@out@*/struct target **);
retvalue target_free(struct target *);
retvalue target_export(struct target *, bool /*onlyneeded*/, bool /*snapshot*/, struct release *);
/* This opens up the database, if db != NULL, *db will be set to it.. */
retvalue target_initpackagesdb(struct target *, bool /*readonly*/);
/* this closes databases... */
retvalue target_closepackagesdb(struct target *);
/* The following calls can only be called if target_initpackagesdb was called before: */
struct logger;
struct description;
retvalue target_addpackage(struct target *, /*@null@*/struct logger *, const char *name, const char *version, const char *control, const struct strlist *filekeys, bool downgrade, /*@null@*/struct trackingdata *, architecture_t, /*@null@*/const char *causingrule, /*@null@*/const char *suitefrom);
retvalue target_checkaddpackage(struct target *, const char *name, const char *version, bool tracking, bool permitnewerold);
retvalue target_removepackage(struct target *, /*@null@*/struct logger *, const char *name, const char *version, struct trackingdata *);
/* like target_removepackage, but do not read control data yourself but use available */
retvalue target_rereference(struct target *);
retvalue target_reoverride(struct target *, struct distribution *);
retvalue target_redochecksums(struct target *, struct distribution *);
static inline bool target_matches(const struct target *t, const struct atomlist *components, const struct atomlist *architectures, const struct atomlist *packagetypes) {
if (limitations_missed(components, t->component))
return false;
if (limitations_missed(architectures, t->architecture))
return false;
if (limitations_missed(packagetypes, t->packagetype))
return false;
return true;
}
static inline char *package_primarykey(const char *packagename, const char *version) {
char *key;
assert (packagename != NULL);
assert (version != NULL);
key = malloc(strlen(packagename) + 1 + strlen(version) + 1);
if (key != NULL) {
strcpy(key, packagename);
strcat(key, "|");
strcat(key, version);
}
return key;
}
#endif
|