1 |
On Tue, 29 Aug 2006 07:57:43 -0400 |
2 |
Alec Warner <antarus@g.o> wrote: |
3 |
|
4 |
> So I have implemented merging of sets (more or less) in a local |
5 |
> portage branch. |
6 |
|
7 |
Could you elaborate how the implementation of sets would differ from: |
8 |
|
9 |
# emerge $(cat /var/lib/portage/myset) |
10 |
|
11 |
where /var/lib/portage/myset is a file containing a list of atoms? |
12 |
That would help in thinking what the behaviour could be. |
13 |
|
14 |
I'm thinking that perhaps you do everything up to but not including |
15 |
qmerge for all packages then do the qmerge phase for the set in one go, |
16 |
provided they all got to install ok. It might be useful to try to move |
17 |
all actions that might fail during qmerge to the end of the install |
18 |
phase (I'm thinking things like collision-detection, qa checks), so |
19 |
that the only reason qmerge on the set would fail is lack of disk space. |
20 |
|
21 |
Obviously that's simplifying somewhat - if there are build-time DEPEND |
22 |
relationships between elements of the set, the set has to be broken |
23 |
down into sub-sets that don't have such internal dependencies. However |
24 |
I can't think of much else you would do with sets that the $(cat |
25 |
<file>) approach doesn't already supply. Alternatively you could |
26 |
require that sets must not have such internal dependencies. |
27 |
|
28 |
> However there are some use cases for which the |
29 |
> appopriate action is ambiguous. |
30 |
> |
31 |
> Use Case #1: |
32 |
> Set1 = { postfix, gentoolkit, lsof, bind-utils, vixie-cron } |
33 |
> |
34 |
> A set of standard tools to be on a machine. Assume a new install (ie |
35 |
> none of the packages in Set1 are installed). Is it an error if one of |
36 |
> the packages in the set is masked or unavailable? In this case I |
37 |
> would say yes; if you instead just skip the masked package (say |
38 |
> postfix in this case because it's convenient ) vixie-cron will pull |
39 |
> ssmtp instead of postfix. |
40 |
> |
41 |
> Of course this will also occur if postfix is after vixie-cron in the |
42 |
> set; but for our purposes we will assume the administrator put them in |
43 |
> this order such that postfix will get pulled in. |
44 |
> |
45 |
> One could also say that the user should have used emerge -pv set1 and |
46 |
> noticed that ssmtp is being pulled in instead of postfix. |
47 |
> |
48 |
> Use Case #2: |
49 |
> |
50 |
> Set1 = cat /var/lib/portage/world (the world set) |
51 |
> |
52 |
> Assume the world file has 100 packages in it, two which are masked, |
53 |
> and three of which there are no ebuilds in the tree for. If missing |
54 |
> packages cause an error (which in use case 1 they should imho) then |
55 |
> the user cannot update world without unmasking things properly. The |
56 |
> packages for which ebuilds are missing in the tree is in fact a |
57 |
> portage bug(I think), and will probably need to be fixed. |
58 |
|
59 |
For the initial merge case then an error before anything is merged is |
60 |
good. For an upgrade merge, a warning would be more appropriate |
61 |
(perhaps becoming an error with FEATURES=stricter or similar). |
62 |
|
63 |
> Other use cases for sets would be appreciated, as far as behavior. It |
64 |
> would probably be best to provide some sort of switch. |
65 |
|
66 |
The most obvious use is to have a related group of packages that may |
67 |
otherwise include a virtual, making the choice of that virtual explicit |
68 |
(like your cron example above). |
69 |
|
70 |
Other sets would be simply groups of packages that make functional |
71 |
sense together, where perhaps one package might make little sense |
72 |
without others in the set. For example: |
73 |
|
74 |
sylpheed-kev = ( sylpheed-claws sylpheed-claws-mailmbox \ |
75 |
sylpheed-claws-smime sylpheed-claws-rssyl sylpheed-claws-smime \ |
76 |
sylpheed-claws-vcalendar) |
77 |
|
78 |
toolchain4 = ( \ |
79 |
~sys-devel/gcc-4.1.1 \ |
80 |
~sys-devel/binutils-2.16.1 \ |
81 |
~sys-libs/glibc-2.4 ) |
82 |
|
83 |
Are you considering allowing sets to contain other sets? Then world |
84 |
would contain the names of sets, not just CPs. |
85 |
|
86 |
> Unmerging sets is also a fun one, I'm not sure if it's entirely |
87 |
> appropriate yet. |
88 |
|
89 |
Would it do anything more than: |
90 |
|
91 |
# emerge -C $(cat /var/lib/portage/myset) |
92 |
|
93 |
Perhaps it would unmerge any packages merged as dependencies of the |
94 |
set that are no longer dependencies of anything else currently |
95 |
installed - but I think that's better handled separately. |
96 |
|
97 |
Ah; it occurs to me that unmerging a set should only unmerge elements |
98 |
of the set that are not part of any other installed set (including |
99 |
world). So behaviour is less like 'emerge $(cat <set>)' and more like |
100 |
emerge sets/<set> where <sets>/set/set-V.ebuild is like a meta-ebuild. |
101 |
|
102 |
-- |
103 |
Kevin F. Quinn |