1 |
On Sat, Mar 18, 2017 at 1:12 PM, Zac Medico <zmedico@g.o> wrote: |
2 |
> On Sat, Mar 18, 2017 at 12:57 PM, Zac Medico <zmedico@g.o> wrote: |
3 |
>> On Sat, Mar 18, 2017 at 12:04 PM, Michał Górny <mgorny@g.o> wrote: |
4 |
>>> Ensure that DISTDIR is always defined to the path to the shadow |
5 |
>>> directory. This ensures that PMS rules for consistent value are |
6 |
>>> followed, and that no global scope calls should be able to access |
7 |
>>> the distfile directory. This also ensures that global-scope assignments |
8 |
>>> (e.g. in PATCHES) do not work around the shadow directory. |
9 |
>>> --- |
10 |
>>> pym/portage/package/ebuild/doebuild.py | 9 +++++---- |
11 |
>>> pym/portage/package/ebuild/prepare_build_dirs.py | 6 ++---- |
12 |
>>> 2 files changed, 7 insertions(+), 8 deletions(-) |
13 |
>>> |
14 |
>>> diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py |
15 |
>>> index 15e4abb48..8efc08334 100644 |
16 |
>>> --- a/pym/portage/package/ebuild/doebuild.py |
17 |
>>> +++ b/pym/portage/package/ebuild/doebuild.py |
18 |
>>> @@ -348,7 +348,8 @@ def doebuild_environment(myebuild, mydo, myroot=None, settings=None, |
19 |
>>> |
20 |
>>> mysettings["PORTDIR"] = os.path.realpath(mysettings["PORTDIR"]) |
21 |
>>> mysettings.pop("PORTDIR_OVERLAY", None) |
22 |
>>> - mysettings["DISTDIR"] = os.path.realpath(mysettings["DISTDIR"]) |
23 |
>>> + if "PORTAGE_ACTUAL_DISTDIR" not in mysettings: |
24 |
>>> + mysettings["PORTAGE_ACTUAL_DISTDIR"] = os.path.realpath(mysettings["DISTDIR"]) |
25 |
>>> mysettings["RPMDIR"] = os.path.realpath(mysettings["RPMDIR"]) |
26 |
>>> |
27 |
>>> mysettings["ECLASSDIR"] = mysettings["PORTDIR"]+"/eclass" |
28 |
>>> @@ -390,6 +391,7 @@ def doebuild_environment(myebuild, mydo, myroot=None, settings=None, |
29 |
>>> mysettings["WORKDIR"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "work") |
30 |
>>> mysettings["D"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "image") + os.sep |
31 |
>>> mysettings["T"] = os.path.join(mysettings["PORTAGE_BUILDDIR"], "temp") |
32 |
>>> + mysettings["DISTDIR"] = os.path.join(settings["PORTAGE_BUILDDIR"], "distdir") |
33 |
>>> mysettings["FILESDIR"] = os.path.join(settings["PORTAGE_BUILDDIR"], "files") |
34 |
>> |
35 |
>> The EbuildFetcher already_fetched and _prefetch_size_ok methods use |
36 |
>> DISTDIR after doebuild_environment has been called, so they need to be |
37 |
>> updated to use PORTAGE_ACTUAL_DISTDIR. |
38 |
> |
39 |
> Also, this code in doebuild uses DISTDIR before _prepare_fake_distdir |
40 |
> gets called called: |
41 |
> |
42 |
> for x in alist: |
43 |
> writemsg_stdout(">>> Checking %s's mtime...\n" % x) |
44 |
> try: |
45 |
> x_st = os.stat(os.path.join( |
46 |
> mysettings["DISTDIR"], x)) |
47 |
> |
48 |
> Also, bin/ebuild calls doebuild_environment before doebuild, which |
49 |
> means that this doebuild code also needs to use PORTAGE_ACTUAL_DISTDIR |
50 |
> if it's in mysettings: |
51 |
> |
52 |
> mf = repo_config.load_manifest(pkgdir, mysettings["DISTDIR"]) |
53 |
|
54 |
We should probably implement the fake DISTDIR setting inside the |
55 |
config environ method, so that we can eliminate all of this |
56 |
error-prone DISTDIR/PORTAGE_ACTUAL_DISTDIR stuff. |
57 |
-- |
58 |
Thanks, |
59 |
Zac |