Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: "Michał Górny" <mgorny@g.o>
Subject: Re: [gentoo-portage-dev] [PATCH 3/4] portage.package.ebuild.doebuild: Override DISTDIR unconditionally, #612972
Date: Sat, 18 Mar 2017 20:45:22
Message-Id: CAMiTYSqQTArDP8fn6iFSksTrgM6Z4LXXRORUGoU9pxMmqP+0aQ@mail.gmail.com
In Reply to: Re: [gentoo-portage-dev] [PATCH 3/4] portage.package.ebuild.doebuild: Override DISTDIR unconditionally, #612972 by Zac Medico
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

Replies