]> git.pld-linux.org Git - packages/poldek.git/blame - poldek-op-ldalldesc.patch
- updated for 0.30rc1
[packages/poldek.git] / poldek-op-ldalldesc.patch
CommitLineData
9c968347
MB
1commit c9bfac52591027f6f87de0663d120ce26fe6b56a
2Author: Marcin Banasiak <megabajt@pld-linux.org>
3Date: Thu Aug 7 10:47:03 2008 +0200
4
5 - added POLDEK_OP_LDALLDESC; loading of all i18n descriptions can be forced now.
6
7diff --git a/lib_pkgset.c b/lib_pkgset.c
8index 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)
21diff --git a/pkgdir/dir/dir.c b/pkgdir/dir/dir.c
22index 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 }
51diff --git a/pkgdir/hdrl/hdrl.c b/pkgdir/hdrl/hdrl.c
52index 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
64diff --git a/pkgdir/pkgdir.c b/pkgdir/pkgdir.c
65index 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
76diff --git a/pkgdir/pkgdir.h b/pkgdir/pkgdir.h
77index 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
90diff --git a/pkgdir/rpmdb/rpmdb.c b/pkgdir/rpmdb/rpmdb.c
91index 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
105diff --git a/pkgdir/rpmdb/rpmdbcache.c b/pkgdir/rpmdb/rpmdbcache.c
106index 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
122diff --git a/pkgdir/yum/yum.c b/pkgdir/yum/yum.c
123index 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
152diff --git a/pkgset-load.c b/pkgset-load.c
153index 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) {
188diff --git a/pkgu.c b/pkgu.c
189index 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;
21cca649 206+ char *lc_lang = NULL, *sl_lang = NULL;
9c968347
MB
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
252diff --git a/pkgu.h b/pkgu.h
253index 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);
265diff --git a/poldek_ts.h b/poldek_ts.h
266index 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 */
This page took 0.145621 seconds and 4 git commands to generate.