Gentoo Archives: gentoo-commits

From: "Ned Ludd (solar)" <solar@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-projects commit in portage-utils: qmerge.c
Date: Sun, 03 May 2009 20:21:43
Message-Id: E1M0fLN-0006uj-9L@stork.gentoo.org
1 solar 09/05/03 17:19:13
2
3 Modified: qmerge.c
4 Log:
5 - Refactor fetching logic (Zdenek Behan <behanz[@]seznam[dot]cz>). bug 266455
6
7 Revision Changes Path
8 1.83 portage-utils/qmerge.c
9
10 file : http://sources.gentoo.org/viewcvs.py/gentoo-projects/portage-utils/qmerge.c?rev=1.83&view=markup
11 plain: http://sources.gentoo.org/viewcvs.py/gentoo-projects/portage-utils/qmerge.c?rev=1.83&content-type=text/plain
12 diff : http://sources.gentoo.org/viewcvs.py/gentoo-projects/portage-utils/qmerge.c?r1=1.82&r2=1.83
13
14 Index: qmerge.c
15 ===================================================================
16 RCS file: /var/cvsroot/gentoo-projects/portage-utils/qmerge.c,v
17 retrieving revision 1.82
18 retrieving revision 1.83
19 diff -u -r1.82 -r1.83
20 --- qmerge.c 17 Apr 2009 14:44:55 -0000 1.82
21 +++ qmerge.c 3 May 2009 17:19:13 -0000 1.83
22 @@ -1,7 +1,7 @@
23 /*
24 * Copyright 2005-2007 Gentoo Foundation
25 * Distributed under the terms of the GNU General Public License v2
26 - * $Header: /var/cvsroot/gentoo-projects/portage-utils/qmerge.c,v 1.82 2009/04/17 14:44:55 solar Exp $
27 + * $Header: /var/cvsroot/gentoo-projects/portage-utils/qmerge.c,v 1.83 2009/05/03 17:19:13 solar Exp $
28 *
29 * Copyright 2005-2007 Ned Ludd - <solar@g.o>
30 * Copyright 2005-2007 Mike Frysinger - <vapier@g.o>
31 @@ -55,7 +55,7 @@
32 COMMON_OPTS_HELP
33 };
34
35 -static const char qmerge_rcsid[] = "$Id: qmerge.c,v 1.82 2009/04/17 14:44:55 solar Exp $";
36 +static const char qmerge_rcsid[] = "$Id: qmerge.c,v 1.83 2009/05/03 17:19:13 solar Exp $";
37 #define qmerge_usage(ret) usage(ret, QMERGE_FLAGS, qmerge_long_opts, qmerge_opts_help, lookup_applet_idx("qmerge"))
38
39 char search_pkgs = 0;
40 @@ -98,10 +98,11 @@
41 void fetch(const char *, const char *);
42 void qmerge_initialize(const char *);
43 char *best_version(const char *, const char *);
44 +void pkg_fetch(int, depend_atom *, struct pkg_t *);
45 void pkg_merge(int, depend_atom *, struct pkg_t *);
46 int pkg_unmerge(char *, char *);
47 int unlink_empty(char *);
48 -void pkg_fetch(int, char **, struct pkg_t *);
49 +void pkg_process(int, char **, struct pkg_t *);
50 void print_Pkg(int, struct pkg_t *);
51 int parse_packages(const char *, int, char **);
52 int config_protected(const char *, int, char **);
53 @@ -509,7 +510,7 @@
54 IF_DEBUG(fprintf(stderr, "+Installed: %s\n", p));
55 if (strlen(p) < 1)
56 if (!((strcmp(pkg->PF, subpkg->PF) == 0) && (strcmp(pkg->CATEGORY, subpkg->CATEGORY) == 0)))
57 - pkg_merge(level+1, ratom, subpkg);
58 + pkg_fetch(level+1, ratom, subpkg);
59
60 atom_implode(subatom);
61 atom_implode(ratom);
62 @@ -1004,23 +1005,18 @@
63 return ret;
64 }
65
66 -void pkg_fetch(int argc, char **argv, struct pkg_t *pkg)
67 +void pkg_process(int argc, char **argv, struct pkg_t *pkg)
68 {
69 depend_atom *atom;
70 - char savecwd[_POSIX_PATH_MAX];
71 - char buf[255], str[255];
72 + char buf[255];
73 int i;
74
75 memset(buf, 0, sizeof(buf));
76 - memset(str, 0, sizeof(str));
77
78 snprintf(buf, sizeof(buf), "%s/%s", pkg->CATEGORY, pkg->PF);
79 if ((atom = atom_explode(buf)) == NULL)
80 errf("%s/%s is not a valid atom", pkg->CATEGORY, pkg->PF);
81
82 - snprintf(str, sizeof(str), "%s/%s", pkgdir, pkg->CATEGORY);
83 - mkdir(str, 0755);
84 -
85 for (i = 1; i < argc; i++) {
86 if (argv[i][0] == '-')
87 continue;
88 @@ -1029,79 +1025,93 @@
89 if (match_pkg(argv[i], pkg) < 1)
90 continue;
91
92 - /* qmerge -pv patch */
93 - if (pretend) {
94 - int level = 0;
95 - if (!install) install++;
96 - /* qprint_tree_node(level, atom, pkg); */
97 - pkg_merge(level, atom, pkg);
98 - continue;
99 - }
100 + pkg_fetch(0, atom, pkg);
101 + }
102 + /* free the atom */
103 + atom_implode(atom);
104 +}
105
106 - /* check to see if file exists and it's checksum matches */
107 - snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, pkg->CATEGORY, pkg->PF);
108 - unlink_empty(buf);
109 -
110 - if ((force_download) && (access(buf, R_OK) == 0) && ((pkg->SHA1[0]) || (pkg->MD5[0]))) {
111 - if ((pkg_verify_checksums(buf, pkg, atom, 0, 0)) != 0)
112 - unlink(buf);
113 - }
114 - if (access(buf, R_OK) == 0) {
115 - if ((!pkg->SHA1[0]) && (!pkg->MD5[0])) {
116 - warn("No checksum data for %s", buf);
117 - continue;
118 - } else {
119 - if ((pkg_verify_checksums(buf, pkg, atom, qmerge_strict, 1)) == 0) {
120 - pkg_merge(0, atom, pkg);
121 - continue;
122 - }
123 - }
124 - }
125 - if (verbose)
126 - printf("Fetching %s/%s.tbz2\n", atom->CATEGORY, pkg->PF);
127 +void pkg_fetch(int level, depend_atom *atom, struct pkg_t *pkg)
128 +{
129 + char savecwd[_POSIX_PATH_MAX];
130 + char buf[255], str[255];
131 + memset(str, 0, sizeof(str));
132
133 - /* fetch the package */
134 - /* Check CATEGORY first */
135 - if (!old_repo) {
136 - snprintf(buf, sizeof(buf), "%s/%s.tbz2", atom->CATEGORY, pkg->PF);
137 - fetch(str, buf);
138 - }
139 - snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF);
140 - if (access(buf, R_OK) != 0) {
141 - snprintf(buf, sizeof(buf), "%s.tbz2", pkg->PF);
142 - fetch(str, buf);
143 - old_repo = 1;
144 - }
145 -
146 - /* verify the pkg exists now. unlink if zero bytes */
147 - snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF);
148 - unlink_empty(buf);
149 -
150 - if (access(buf, R_OK) != 0) {
151 - warn("Failed to fetch %s.tbz2 from %s", pkg->PF, binhost);
152 - fflush(stderr);
153 - continue;
154 - }
155 - getcwd(savecwd, sizeof(savecwd));
156 - assert(chdir(pkgdir) == 0);
157 - if (chdir("All/") == 0) {
158 - snprintf(buf, sizeof(buf), "%s.tbz2", pkg->PF);
159 - snprintf(str, sizeof(str), "../%s/%s.tbz2", atom->CATEGORY, pkg->PF);
160 + /* qmerge -pv patch */
161 + if (pretend) {
162 + if (!install) install++;
163 + /* qprint_tree_node(level, atom, pkg); */
164 + pkg_merge(level, atom, pkg);
165 + return;
166 + }
167 +
168 + /* check to see if file exists and it's checksum matches */
169 + snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, pkg->CATEGORY, pkg->PF);
170 + unlink_empty(buf);
171 +
172 + snprintf(str, sizeof(str), "%s/%s", pkgdir, pkg->CATEGORY);
173 + mkdir(str, 0755);
174 +
175 + if ((force_download) && (access(buf, R_OK) == 0) && ((pkg->SHA1[0]) || (pkg->MD5[0]))) {
176 + if ((pkg_verify_checksums(buf, pkg, atom, 0, 0)) != 0)
177 unlink(buf);
178 - symlink(str, buf);
179 + }
180 + if (access(buf, R_OK) == 0) {
181 + if ((!pkg->SHA1[0]) && (!pkg->MD5[0])) {
182 + warn("No checksum data for %s", buf);
183 + return;
184 + } else {
185 + if ((pkg_verify_checksums(buf, pkg, atom, qmerge_strict, 1)) == 0) {
186 + pkg_merge(0, atom, pkg);
187 + return;
188 + }
189 }
190 - chdir(savecwd);
191 + }
192 + if (verbose)
193 + printf("Fetching %s/%s.tbz2\n", atom->CATEGORY, pkg->PF);
194
195 - snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF);
196 - if ((pkg_verify_checksums(buf, pkg, atom, qmerge_strict, 1)) == 0) {
197 - pkg_merge(0, atom, pkg);
198 - continue;
199 - }
200 + /* fetch the package */
201 + /* Check CATEGORY first */
202 + if (!old_repo) {
203 + snprintf(buf, sizeof(buf), "%s/%s.tbz2", atom->CATEGORY, pkg->PF);
204 + fetch(str, buf);
205 + }
206 + snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF);
207 + if (access(buf, R_OK) != 0) {
208 + snprintf(buf, sizeof(buf), "%s.tbz2", pkg->PF);
209 + fetch(str, buf);
210 + old_repo = 1;
211 + }
212 +
213 + /* verify the pkg exists now. unlink if zero bytes */
214 + snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF);
215 + unlink_empty(buf);
216 +
217 + if (access(buf, R_OK) != 0) {
218 + warn("Failed to fetch %s.tbz2 from %s", pkg->PF, binhost);
219 + fflush(stderr);
220 + return;
221 + }
222 + getcwd(savecwd, sizeof(savecwd));
223 + assert(chdir(pkgdir) == 0);
224 + if (chdir("All/") == 0) {
225 + snprintf(buf, sizeof(buf), "%s.tbz2", pkg->PF);
226 + snprintf(str, sizeof(str), "../%s/%s.tbz2", atom->CATEGORY, pkg->PF);
227 + unlink(buf);
228 + symlink(str, buf);
229 + }
230 + chdir(savecwd);
231 +
232 + snprintf(buf, sizeof(buf), "%s/%s/%s.tbz2", pkgdir, atom->CATEGORY, pkg->PF);
233 + if ((pkg_verify_checksums(buf, pkg, atom, qmerge_strict, 1)) == 0) {
234 + pkg_merge(0, atom, pkg);
235 + return;
236 }
237 - /* free the atom */
238 - atom_implode(atom);
239 }
240
241 +
242 +
243 +
244 void print_Pkg(int full, struct pkg_t *pkg)
245 {
246 char *p = NULL;
247 @@ -1407,8 +1417,7 @@
248 print_Pkg(verbose, pkg);
249 }
250 } else {
251 - /* this name is misleading */
252 - pkg_fetch(argc, argv, pkg);
253 + pkg_process(argc, argv, pkg);
254 }
255 free(pkg);
256 }