]> git.pld-linux.org Git - packages/poldek.git/blame - poldek-pkgorder.patch
- added poldek-po.patch; release 8
[packages/poldek.git] / poldek-pkgorder.patch
CommitLineData
95288a9a
JB
1Index: pkgset-order.c
2===================================================================
3RCS file: /cvsroot/installer/poldek/pkgset-order.c,v
4retrieving revision 1.16
5diff -u -r1.16 pkgset-order.c
6--- pkgset-order.c 24 Oct 2002 16:41:04 -0000 1.16
7+++ pkgset-order.c 2 Jul 2004 17:07:02 -0000
8@@ -36,6 +36,7 @@
9 static void mapfn_clean_pkg_color(struct pkg *pkg)
10 {
11 pkg_set_color(pkg, PKG_COLOR_WHITE);
12+ pkg_clr_prereqed(pkg);
13 }
14
15 /*
16@@ -45,11 +46,13 @@
17 tn_array *ordered_pkgs;
18 tn_array *stack;
19 int nerrors;
20+ int prereq_only;
21 };
22
23
24 static
25-int visit_install_order(struct visit_install_order_s *vs, struct pkg *pkg, int deep)
26+int visit_install_order(struct visit_install_order_s *vs, struct pkg *pkg,
27+ int deep)
28 {
29 int i, last_stack_i = -1;
30
31@@ -68,7 +71,7 @@
32 if (verbose > 2) {
33 msg(4, "_\n");
34 msg_i(4, deep, "_ visit %s -> (", pkg->name);
35- for (i=0; i<n_array_size(pkg->reqpkgs); i++) {
36+ for (i=0; i < n_array_size(pkg->reqpkgs); i++) {
37 struct reqpkg *rp;
38
39 rp = n_array_nth(pkg->reqpkgs, i);
40@@ -102,7 +105,9 @@
41 pkg_set_prereqed(rp->pkg);
42 else
43 pkg_clr_prereqed(rp->pkg);
44- visit_install_order(vs, rp->pkg, deep);
45+
46+ if (!vs->prereq_only || (rp->flags & REQPKG_PREREQ))
47+ visit_install_order(vs, rp->pkg, deep);
48
49 } else if (pkg_is_color(rp->pkg, PKG_COLOR_BLACK)) {
50 msg(4, "_\n");
51@@ -178,10 +183,11 @@
52 }
53 }
54 msg(4, "_\n");
55-
56+
57 l_end:
58 pkg_set_color(pkg, PKG_COLOR_BLACK);
59 pkg_clr_prereqed(pkg);
60+ msgn(4, "push %s", pkg_snprintf_s(pkg));
61 n_array_push(vs->ordered_pkgs, pkg_link(pkg));
62 if (last_stack_i != -1)
63 for (i=last_stack_i; i < n_array_size(vs->stack); i++) {
64@@ -192,9 +198,7 @@
65 return 0;
66 }
67
68-
69-/* RET: number of detected loops */
70-int packages_order(tn_array *pkgs, tn_array **ordered_pkgs)
71+static int do_order(tn_array *pkgs, tn_array **ordered_pkgs, int prereq_only)
72 {
73 struct pkg *pkg;
74 struct visit_install_order_s vs;
75@@ -204,15 +208,14 @@
76 (tn_fn_free)pkg_free, NULL);
77 vs.nerrors = 0;
78 vs.stack = n_array_new(128, NULL, NULL);
79+ vs.prereq_only = prereq_only;
80
81 n_array_map(pkgs, (tn_fn_map1)mapfn_clean_pkg_color);
82- n_array_isort_ex(pkgs, (tn_fn_cmp)pkg_cmp_pri);
83-
84+
85 for (i=0; i<n_array_size(pkgs); i++) {
86 pkg = n_array_nth(pkgs, i);
87- //printf("V %d %s\n", i, pkg_snprintf_s(pkg));
88 if (pkg_is_color(pkg, PKG_COLOR_WHITE)) {
89- visit_install_order(&vs, pkg, 1);
90+ visit_install_order(&vs, pkg, 1);
91 n_array_clean(vs.stack);
92 }
93 }
94@@ -222,8 +225,30 @@
95 n_assert(*ordered_pkgs == NULL);
96 n_array_free(vs.stack);
97 *ordered_pkgs = vs.ordered_pkgs;
98- n_array_isort(pkgs);
99 return vs.nerrors;
100+}
101+
102+
103+/* RET: number of detected loops */
104+int packages_order(tn_array *pkgs, tn_array **ordered_pkgs)
105+{
106+ tn_array *ordered = NULL;
107+ int nloops, verbose_;
108+
109+ n_array_isort_ex(pkgs, (tn_fn_cmp)pkg_cmp_pri);
110+
111+ verbose_ = verbose;
112+ verbose = -10;
113+ do_order(pkgs, &ordered, 0);
114+
115+ verbose = verbose_;
116+ *ordered_pkgs = NULL;
117+ nloops = do_order(ordered, ordered_pkgs, 1);
118+
119+ n_array_free(ordered);
120+ n_array_isort(pkgs);
121+
122+ return nloops;
123 }
124
125 int pkgset_order(struct pkgset *ps)
This page took 0.071247 seconds and 4 git commands to generate.