Gentoo Archives: gentoo-dev

From: Martin Vaeth <vaeth@××××××××××××××××××××××××.de>
To: gentoo-dev@l.g.o
Subject: [gentoo-dev] Please consider removing use.stable.mask and package.use.stable.mask
Date: Wed, 13 Nov 2013 10:28:46
Message-Id: slrnl86l1s.j7e.vaeth@lounge.imp.fu-berlin.de
1 Hello.
2
3 The new "features" use.stable.mask and package.use.stable.mask
4 have turned maintaining systems with mixed ARCH and ~ARCH keywords
5 into a nightmare:
6
7 Similarly to the (fortunately dropped) concept of forcing
8 useflags if certain packages are installed this forces a
9 magic on the user which can hardly be managed since it is
10 not clearly presented to the user but hidden in some profiles.
11
12 As I understand, it tries to solve a "social" issue
13 (that an ARCH user might set a USE-flag which eventually
14 pulls in an ~ARCH package) on a technical level
15 (by forcibly disabling the USE-flag for the user).
16 Solving social problems by technical means is never a good
17 idea:
18
19 While the former gives the stable user a clear message
20 what is going wrong (after all, many stable users want
21 some package which has not a stable version yet, so this
22 should be something everybody should be able to handle),
23 the latter hides causes and makes things almost unpredictable:
24
25 Even if the user has put the dependency into
26 package.accept_keywords, he will not be able to use the
27 USE-flag on his packages unless
28 *he puts stable versions into package.accept_keywords*
29 (or - simlarly worse - overrides the profile).
30
31 The really bad thing is that this is happening by magic
32 "behind the user's back", i.e. contradicting the user's setting
33 of USE-flag and package.use: If the user does not carefully
34 read emerge's -v output, he even does not get informed that
35 the support for his unstable package is dropped from the
36 stable package, despite he might have specified the corresponding
37 USE-flag globally. Even worse, even when reading the output
38 carefully, the user cannot understand the reason:
39 Since there are many reasons why use-flags can appear in ()
40 he will probably not even conjecture that actually something
41 will not be working as he expected.
42
43 Here are some other examples of negative effects happening
44 just recently to me, ordered from not so severe to very bad:
45
46 1. For several reasons I always want the most current
47 emul-linux-x86* libraries, so they are in package.accept_keywords.
48 Due to global ABI_X86=32 (which I also want), this forced me
49 of course to put several libraries to ~amd64 since only
50 new version support this. Some of the libraries are actually
51 stable, so I have removed them from package.accept_keywords.
52 So far, so good.
53 But suddenly portage spitted unexplainable dependency errors,
54 and I only expert users manually reading the profiles can
55 understand that the reason is that use.stable.mask requires
56 that stable versions need to be keyworded ~amd64
57 (or use.stable.mask has to be overridden in my profile).
58
59 2. Just a few days ago dev-lang/python-exec:2 became stable
60 on amd64, but dev-python/python-exec:2 is still ~amd64.
61 Just to be sure to not miss anything, I have put the latter
62 into package.accept_keywords, and hell break loose:
63 Portaqe wanted me to emerge the git version of
64 dev-lang/python-exec:0 and reemerge dozens of packages.
65 I needed hours to find out what is the actual cause:
66 The package.accept_keywords caused the use.stable.mask of
67 python_targets_pypy2_0 und python_targets_python3_3 to become
68 ineffective for dev-python/python-exec, but of course it is still
69 effective for dev-lang/python-exec which is not be the case
70 if I unmask the git version of dev-lang/python-exec.
71
72 This is completely confusing since nowhere the git-version
73 is marked differently than the non-git version.
74
75 So, yes, portage's behaviour can be explained, but, no,
76 it is not understandable by a user who wants portage
77 to report what is really wrong and who does not want
78 to check manually by reading all profiles and hunt down
79 for reasons why certain flags are magically forced/disabled.
80
81 3. As a side effect of 2., I realized that libreoffice and a dozen
82 further packages get forced a rebuild. So, if eventually
83 python-3.3 becomes stable and is removed from use.stable.mask,
84 all stable users will have to rebuild almost their whole world,
85 because python-exec then has one more "dummy" USE-flag. The same
86 will happen again if pypy-2.0 becomes stable.
87 So a lot of unnecessary rebuilds happen to stable users because
88 of {package.,}use.stable.mask which most of the developers
89 (who are often ~amd64 users) do not realize.
90
91 Best Regards
92 Martin

Replies