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

Replies