]> git.pld-linux.org Git - packages/poldek.git/blob - poldek-pkgorder.patch
- re-added my progressbar patch
[packages/poldek.git] / poldek-pkgorder.patch
1 Index: pkgset-order.c
2 ===================================================================
3 RCS file: /cvsroot/installer/poldek/pkgset-order.c,v
4 retrieving revision 1.16
5 diff -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.030126 seconds and 3 git commands to generate.