]> git.pld-linux.org Git - packages/poldek.git/blob - poldek-op-ldalldesc.patch
- missing hunk
[packages/poldek.git] / poldek-op-ldalldesc.patch
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 */
This page took 0.180251 seconds and 3 git commands to generate.