]>
Commit | Line | Data |
---|---|---|
517e249f | 1 | commit c9bfac52591027f6f87de0663d120ce26fe6b56a |
2 | Author: Marcin Banasiak <megabajt@pld-linux.org> | |
3 | Date: Thu Aug 7 10:47:03 2008 +0200 | |
4 | ||
5 | - added POLDEK_OP_LDALLDESC; loading of all i18n descriptions can be forced now. | |
6 | ||
7 | diff --git a/lib_pkgset.c b/lib_pkgset.c | |
8 | index ef7ecb4..bea738a 100644 | |
9 | --- a/lib_pkgset.c | |
10 | +++ b/lib_pkgset.c | |
11 | @@ -63,6 +63,9 @@ int poldek__load_sources_internal(struct poldek_ctx *ctx) | |
12 | ||
13 | if (ctx->ts->getop(ctx->ts, POLDEK_OP_LDFULLFILELIST)) | |
14 | ldflags |= PKGDIR_LD_FULLFLIST; | |
15 | + | |
16 | + if (ctx->ts->getop(ctx->ts, POLDEK_OP_LDALLDESC)) | |
17 | + ldflags |= PKGDIR_LD_ALLDESC; | |
18 | ||
19 | #if 0 /* XXX now files are loaded on demand */ | |
20 | if (strcmp(pm_get_name(ctx->pmctx), "pset") == 0) | |
21 | diff --git a/pkgdir/dir/dir.c b/pkgdir/dir/dir.c | |
22 | index 2aa7e65..0b720c1 100644 | |
23 | --- a/pkgdir/dir/dir.c | |
24 | +++ b/pkgdir/dir/dir.c | |
25 | @@ -159,7 +159,6 @@ struct pkguinf *load_pkguinf(tn_alloc *na, const struct pkg *pkg, | |
26 | Header h; | |
27 | ||
28 | ptr = ptr; /* unused pkgdir_data */ | |
29 | - langs = langs; /* ignored, selective retrieving no supported */ | |
30 | ||
31 | snprintf(path, sizeof(path), "%s/%s", pkg->pkgdir->idxpath, | |
32 | pkg_filename_s(pkg)); | |
33 | @@ -172,7 +171,7 @@ struct pkguinf *load_pkguinf(tn_alloc *na, const struct pkg *pkg, | |
34 | return NULL; | |
35 | } | |
36 | ||
37 | - pkgu = pkguinf_ldrpmhdr(na, h); | |
38 | + pkgu = pkguinf_ldrpmhdr(na, h, langs); | |
39 | ||
40 | pm_rpmhdr_free(h); | |
41 | return pkgu; | |
42 | @@ -269,7 +268,7 @@ int load_dir(struct pkgdir *pkgdir, | |
43 | pkg->groupid = pkgroup_idx_update_rpmhdr(pkgroups, h); | |
44 | ||
45 | if (ldflags & PKGDIR_LD_DESC) { | |
46 | - pkg->pkg_pkguinf = pkguinf_ldrpmhdr(na, h); | |
47 | + pkg->pkg_pkguinf = pkguinf_ldrpmhdr(na, h, NULL); | |
48 | pkg_set_ldpkguinf(pkg); | |
49 | } | |
50 | } | |
51 | diff --git a/pkgdir/hdrl/hdrl.c b/pkgdir/hdrl/hdrl.c | |
52 | index 495e363..5d7a1b8 100644 | |
53 | --- a/pkgdir/hdrl/hdrl.c | |
54 | +++ b/pkgdir/hdrl/hdrl.c | |
55 | @@ -106,7 +106,7 @@ static int do_load(struct pkgdir *pkgdir, unsigned ldflags) | |
56 | ||
57 | if ((pkg = pm_rpm_ldhdr(pkgdir->na, h, NULL, 0, PKG_LDWHOLE))) { | |
58 | if (ldflags & PKGDIR_LD_DESC) { | |
59 | - pkg->pkg_pkguinf = pkguinf_ldrpmhdr(pkgdir->na, h); | |
60 | + pkg->pkg_pkguinf = pkguinf_ldrpmhdr(pkgdir->na, h, NULL); | |
61 | pkg_set_ldpkguinf(pkg); | |
62 | } | |
63 | ||
64 | diff --git a/pkgdir/pkgdir.c b/pkgdir/pkgdir.c | |
65 | index 634a2a4..ca2d7a8 100644 | |
66 | --- a/pkgdir/pkgdir.c | |
67 | +++ b/pkgdir/pkgdir.c | |
68 | @@ -496,7 +496,6 @@ struct pkgdir *pkgdir_open_ext(const char *path, const char *pkg_prefix, | |
69 | n_array_sort(pkgdir->depdirs); | |
70 | } | |
71 | ||
72 | - pkgdir->flags |= flags; | |
73 | return pkgdir; | |
74 | } | |
75 | ||
76 | diff --git a/pkgdir/pkgdir.h b/pkgdir/pkgdir.h | |
77 | index e1c88d0..7535d16 100644 | |
78 | --- a/pkgdir/pkgdir.h | |
79 | +++ b/pkgdir/pkgdir.h | |
80 | @@ -108,6 +108,9 @@ struct pkgdir *pkgdir_open(const char *path, const char *pkg_prefix, | |
81 | #define PKGDIR_LD_NOUNIQ (1 << 3) /* don't perform pkgdir_uniq() */ | |
82 | #define PKGDIR_LD_DOIGNORE (1 << 4) /* honour src->ign_patterns */ | |
83 | #define PKGDIR_LD_DIRINDEX (1 << 5) /* handle rpm 4.4.6 auto deps */ | |
84 | +#define PKGDIR_LD_ALLDESC (1 << 6) /* load all i18n descriptions | |
85 | + (see PKGDIR_OPEN_ALLDESC) | |
86 | + */ | |
87 | ||
88 | int pkgdir_load(struct pkgdir *pkgdir, tn_array *depdirs, unsigned ldflags); | |
89 | ||
90 | diff --git a/pkgdir/rpmdb/rpmdb.c b/pkgdir/rpmdb/rpmdb.c | |
91 | index 635e354..b602a07 100644 | |
92 | --- a/pkgdir/rpmdb/rpmdb.c | |
93 | +++ b/pkgdir/rpmdb/rpmdb.c | |
94 | @@ -110,9 +110,8 @@ struct pkguinf *load_pkguinf(tn_alloc *na, const struct pkg *pkg, | |
95 | struct pkguinf *pkgu = NULL; | |
96 | Header h; | |
97 | ||
98 | - langs = langs; /* ignored, no support */ | |
99 | if ((h = ldhdr(pkg, ptr))) { | |
100 | - pkgu = pkguinf_ldrpmhdr(na, h); | |
101 | + pkgu = pkguinf_ldrpmhdr(na, h, langs); | |
102 | pm_rpmhdr_free(h); | |
103 | } | |
104 | ||
105 | diff --git a/pkgdir/rpmdb/rpmdbcache.c b/pkgdir/rpmdb/rpmdbcache.c | |
106 | index 224b4b3..70a25ce 100644 | |
107 | --- a/pkgdir/rpmdb/rpmdbcache.c | |
108 | +++ b/pkgdir/rpmdb/rpmdbcache.c | |
109 | @@ -134,11 +134,9 @@ struct pkguinf *dbcache_load_pkguinf(tn_alloc *na, const struct pkg *pkg, | |
110 | { | |
111 | struct pkguinf *pkgu = NULL; | |
112 | Header h; | |
113 | - | |
114 | - langs = langs; /* ignored, no support */ | |
115 | ||
116 | if ((h = ldhdr(pkg, ptr))) { | |
117 | - pkgu = pkguinf_ldrpmhdr(na, h); | |
118 | + pkgu = pkguinf_ldrpmhdr(na, h, langs); | |
119 | pm_rpmhdr_free(h); | |
120 | } | |
121 | ||
122 | diff --git a/pkgdir/yum/yum.c b/pkgdir/yum/yum.c | |
123 | index a7e48d7..f3e5c36 100644 | |
124 | --- a/pkgdir/yum/yum.c | |
125 | +++ b/pkgdir/yum/yum.c | |
126 | @@ -269,7 +269,7 @@ struct pkg *do_loadpkg(tn_alloc *na, Header h, int ldflags, const char *pkgfn) | |
127 | struct pkg *pkg; | |
128 | if ((pkg = pm_rpm_ldhdr(na, h, pkgfn, 0, PKG_LDWHOLE))) { | |
129 | if (ldflags & PKGDIR_LD_DESC) { | |
130 | - pkg->pkg_pkguinf = pkguinf_ldrpmhdr(na, h); | |
131 | + pkg->pkg_pkguinf = pkguinf_ldrpmhdr(na, h, NULL); | |
132 | pkg_set_ldpkguinf(pkg); | |
133 | } | |
134 | } | |
135 | @@ -287,7 +287,6 @@ struct pkguinf *load_pkguinf(tn_alloc *na, const struct pkg *pkg, | |
136 | char path[PATH_MAX], *hdrpath; | |
137 | Header h; | |
138 | ||
139 | - langs = langs; /* ignored, no support */ | |
140 | if (!pkg->pkgdir) | |
141 | return NULL; | |
142 | ||
143 | @@ -297,7 +296,7 @@ struct pkguinf *load_pkguinf(tn_alloc *na, const struct pkg *pkg, | |
144 | ||
145 | pkg = pkg; | |
146 | if ((h = do_loadrpmhdr(path, vfmode, n_basenam(path)))) { | |
147 | - pkgu = pkguinf_ldrpmhdr(na, h); | |
148 | + pkgu = pkguinf_ldrpmhdr(na, h, langs); | |
149 | headerFree(h); | |
150 | } | |
151 | ||
152 | diff --git a/pkgset-load.c b/pkgset-load.c | |
153 | index f2f0d3c..7ac3762 100644 | |
154 | --- a/pkgset-load.c | |
155 | +++ b/pkgset-load.c | |
156 | @@ -32,9 +32,13 @@ | |
157 | int pkgset_load(struct pkgset *ps, int ldflags, tn_array *sources) | |
158 | { | |
159 | int i, j, iserr = 0; | |
160 | + unsigned openflags = 0; | |
161 | ||
162 | n_array_isort_ex(sources, (tn_fn_cmp)source_cmp_pri); | |
163 | ||
164 | + if (ldflags & PKGDIR_LD_ALLDESC) | |
165 | + openflags |= PKGDIR_OPEN_ALLDESC; | |
166 | + | |
167 | for (i=0; i < n_array_size(sources); i++) { | |
168 | struct source *src = n_array_nth(sources, i); | |
169 | struct pkgdir *pkgdir = NULL; | |
170 | @@ -47,7 +51,7 @@ int pkgset_load(struct pkgset *ps, int ldflags, tn_array *sources) | |
171 | source_set_type(src, poldek_conf_PKGDIR_DEFAULT_TYPE); | |
172 | ||
173 | ||
174 | - pkgdir = pkgdir_srcopen(src, 0); | |
175 | + pkgdir = pkgdir_srcopen(src, openflags); | |
176 | ||
177 | /* trying dir */ | |
178 | if (pkgdir == NULL && !source_is_type(src, "dir") && | |
179 | @@ -56,7 +60,7 @@ int pkgset_load(struct pkgset *ps, int ldflags, tn_array *sources) | |
180 | logn(LOGNOTICE, _("trying to scan directory %s..."), src->path); | |
181 | ||
182 | source_set_type(src, "dir"); | |
183 | - pkgdir = pkgdir_srcopen(src, 0); | |
184 | + pkgdir = pkgdir_srcopen(src, openflags); | |
185 | } | |
186 | ||
187 | if (pkgdir == NULL) { | |
188 | diff --git a/pkgu.c b/pkgu.c | |
189 | index 6ea077e..26bb647 100644 | |
190 | --- a/pkgu.c | |
191 | +++ b/pkgu.c | |
192 | @@ -639,7 +639,7 @@ char *load_changelog_from_rpmhdr(tn_alloc *na, void *hdr) | |
193 | return changelog; | |
194 | } | |
195 | ||
196 | -struct pkguinf *pkguinf_ldrpmhdr(tn_alloc *na, void *hdr) | |
197 | +struct pkguinf *pkguinf_ldrpmhdr(tn_alloc *na, void *hdr, tn_array *loadlangs) | |
198 | { | |
199 | tn_array *langs; | |
200 | char **summs, **descrs; | |
201 | @@ -653,7 +653,7 @@ struct pkguinf *pkguinf_ldrpmhdr(tn_alloc *na, void *hdr) | |
202 | ||
203 | if ((langs = pm_rpmhdr_langs(h))) { | |
204 | tn_array *sl_langs = NULL; | |
205 | - char *sl_lang; | |
206 | + char *lc_lang = NULL, *sl_lang = NULL; | |
207 | ||
208 | pm_rpmhdr_get_raw_entry(h, RPMTAG_SUMMARY, (void*)&summs, &nsumms); | |
209 | pm_rpmhdr_get_raw_entry(h, RPMTAG_DESCRIPTION, (void*)&descrs, &ndescrs); | |
210 | @@ -685,7 +685,23 @@ struct pkguinf *pkguinf_ldrpmhdr(tn_alloc *na, void *hdr) | |
211 | langs = n_array_remove_nth(langs, i - 1); | |
212 | } | |
213 | ||
214 | - sl_langs = lc_lang_select(langs, lc_messages_lang()); | |
215 | + if (loadlangs) { | |
216 | + for (i = 0; i < n_array_size(loadlangs); i++) { | |
217 | + const char *loadlang = n_array_nth(loadlangs, i); | |
218 | + | |
219 | + if (loadlang == NULL) | |
220 | + continue; | |
221 | + | |
222 | + if (lc_lang == NULL) | |
223 | + lc_lang = n_strdup(loadlang); | |
224 | + else { | |
225 | + lc_lang = n_str_concat(lc_lang, ":", loadlang, NULL); | |
226 | + } | |
227 | + } | |
228 | + } else | |
229 | + lc_lang = n_strdup(lc_messages_lang()); | |
230 | + | |
231 | + sl_langs = lc_lang_select(langs, lc_lang); | |
232 | if (sl_langs == NULL) | |
233 | sl_lang = "C"; | |
234 | else | |
235 | @@ -703,6 +719,7 @@ struct pkguinf *pkguinf_ldrpmhdr(tn_alloc *na, void *hdr) | |
236 | n_array_free(langs); | |
237 | n_array_cfree(&sl_langs); | |
238 | ||
239 | + free(lc_lang); | |
240 | free(summs); | |
241 | free(descrs); | |
242 | } | |
243 | @@ -1160,7 +1177,7 @@ struct pkguinf *pkguinf_restore_rpmhdr_st(tn_alloc *na, | |
244 | } | |
245 | ||
246 | if ((hdr = headerLoad(rawhdr)) != NULL) { | |
247 | - pkgu = pkguinf_ldrpmhdr(na, hdr); | |
248 | + pkgu = pkguinf_ldrpmhdr(na, hdr, NULL); | |
249 | headerFree(hdr); //rpm's memleak | |
250 | } | |
251 | ||
252 | diff --git a/pkgu.h b/pkgu.h | |
253 | index 9a7bb86..2ced69a 100644 | |
254 | --- a/pkgu.h | |
255 | +++ b/pkgu.h | |
256 | @@ -41,7 +41,7 @@ int pkguinf_skip_rpmhdr(tn_stream *st); | |
257 | struct pkguinf *pkguinf_restore_rpmhdr_st(tn_alloc *na, | |
258 | tn_stream *st, off_t offset); | |
259 | ||
260 | -struct pkguinf *pkguinf_ldrpmhdr(tn_alloc *na, void *hdr); | |
261 | +struct pkguinf *pkguinf_ldrpmhdr(tn_alloc *na, void *hdr, tn_array *loadlangs); | |
262 | ||
263 | tn_buf *pkguinf_store(const struct pkguinf *pkgu, tn_buf *nbuf, | |
264 | const char *lang); | |
265 | diff --git a/poldek_ts.h b/poldek_ts.h | |
266 | index ab43ccf..b98cfe8 100644 | |
267 | --- a/poldek_ts.h | |
268 | +++ b/poldek_ts.h | |
269 | @@ -41,6 +41,7 @@ enum poldek_ts_opt { | |
270 | POLDEK_OP_VRFY_FILEMISSDEPS, /* --verify=file-missing-deps */ | |
271 | POLDEK_OP_DEPGRAPH, /* --dependency-graph */ | |
272 | ||
273 | + POLDEK_OP_LDALLDESC, /* internal, load all i18n descriptions */ | |
274 | POLDEK_OP_LDFULLFILELIST, /* internal, load whole file database */ | |
275 | ||
276 | POLDEK_OP_VRFYMERCY, /* --mercy */ |