Gentoo Archives: gentoo-portage-dev

From: "Michał Górny" <mgorny@g.o>
To: gentoo-portage-dev@l.g.o
Cc: "Michał Górny" <mgorny@g.o>
Subject: [gentoo-portage-dev] [PATCH 1/4] portage.package.ebuild: Move _prepare_fake_distdir to .prepare_build_dirs
Date: Sat, 18 Mar 2017 19:04:54
Message-Id: 20170318190404.21415-2-mgorny@gentoo.org
In Reply to: [gentoo-portage-dev] [PATCHES] Restrict DISTDIR to src_unpack and further by "Michał Górny"
1 ---
2 pym/_emerge/EbuildExecuter.py | 2 +-
3 pym/portage/package/ebuild/doebuild.py | 32 +-----------------------
4 pym/portage/package/ebuild/prepare_build_dirs.py | 31 +++++++++++++++++++++++
5 3 files changed, 33 insertions(+), 32 deletions(-)
6
7 diff --git a/pym/_emerge/EbuildExecuter.py b/pym/_emerge/EbuildExecuter.py
8 index 5587d4eb0..7a454c3e6 100644
9 --- a/pym/_emerge/EbuildExecuter.py
10 +++ b/pym/_emerge/EbuildExecuter.py
11 @@ -8,7 +8,7 @@ import portage
12 from portage import os
13 from portage.eapi import eapi_has_src_prepare_and_src_configure, \
14 eapi_exports_replace_vars
15 -from portage.package.ebuild.doebuild import _prepare_fake_distdir
16 +from portage.package.ebuild.prepare_build_dirs import _prepare_fake_distdir
17
18 class EbuildExecuter(CompositeTask):
19
20 diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py
21 index e7db54bcf..15e4abb48 100644
22 --- a/pym/portage/package/ebuild/doebuild.py
23 +++ b/pym/portage/package/ebuild/doebuild.py
24 @@ -31,6 +31,7 @@ portage.proxy.lazyimport.lazyimport(globals(),
25 'portage.package.ebuild.digestcheck:digestcheck',
26 'portage.package.ebuild.digestgen:digestgen',
27 'portage.package.ebuild.fetch:fetch',
28 + 'portage.package.ebuild.prepare_build_dirs:_prepare_fake_distdir',
29 'portage.package.ebuild._ipc.QueryCommand:QueryCommand',
30 'portage.dep._slot_operator:evaluate_slot_operator_equal_deps',
31 'portage.package.ebuild._spawn_nofetch:spawn_nofetch',
32 @@ -1307,37 +1308,6 @@ def _prepare_env_file(settings):
33 env_extractor.wait()
34 return env_extractor.returncode
35
36 -def _prepare_fake_distdir(settings, alist):
37 - orig_distdir = settings["DISTDIR"]
38 - settings["PORTAGE_ACTUAL_DISTDIR"] = orig_distdir
39 - edpath = settings["DISTDIR"] = \
40 - os.path.join(settings["PORTAGE_BUILDDIR"], "distdir")
41 - portage.util.ensure_dirs(edpath, gid=portage_gid, mode=0o755)
42 -
43 - # Remove any unexpected files or directories.
44 - for x in os.listdir(edpath):
45 - symlink_path = os.path.join(edpath, x)
46 - st = os.lstat(symlink_path)
47 - if x in alist and stat.S_ISLNK(st.st_mode):
48 - continue
49 - if stat.S_ISDIR(st.st_mode):
50 - shutil.rmtree(symlink_path)
51 - else:
52 - os.unlink(symlink_path)
53 -
54 - # Check for existing symlinks and recreate if necessary.
55 - for x in alist:
56 - symlink_path = os.path.join(edpath, x)
57 - target = os.path.join(orig_distdir, x)
58 - try:
59 - link_target = os.readlink(symlink_path)
60 - except OSError:
61 - os.symlink(target, symlink_path)
62 - else:
63 - if link_target != target:
64 - os.unlink(symlink_path)
65 - os.symlink(target, symlink_path)
66 -
67 def _spawn_actionmap(settings):
68 features = settings.features
69 restrict = settings["PORTAGE_RESTRICT"].split()
70 diff --git a/pym/portage/package/ebuild/prepare_build_dirs.py b/pym/portage/package/ebuild/prepare_build_dirs.py
71 index e3ae318bd..0fa43ba59 100644
72 --- a/pym/portage/package/ebuild/prepare_build_dirs.py
73 +++ b/pym/portage/package/ebuild/prepare_build_dirs.py
74 @@ -409,3 +409,34 @@ def _prepare_fake_filesdir(settings):
75 if link_target != real_filesdir:
76 os.unlink(symlink_path)
77 os.symlink(real_filesdir, symlink_path)
78 +
79 +def _prepare_fake_distdir(settings, alist):
80 + orig_distdir = settings["DISTDIR"]
81 + settings["PORTAGE_ACTUAL_DISTDIR"] = orig_distdir
82 + edpath = settings["DISTDIR"] = \
83 + os.path.join(settings["PORTAGE_BUILDDIR"], "distdir")
84 + portage.util.ensure_dirs(edpath, gid=portage_gid, mode=0o755)
85 +
86 + # Remove any unexpected files or directories.
87 + for x in os.listdir(edpath):
88 + symlink_path = os.path.join(edpath, x)
89 + st = os.lstat(symlink_path)
90 + if x in alist and stat.S_ISLNK(st.st_mode):
91 + continue
92 + if stat.S_ISDIR(st.st_mode):
93 + shutil.rmtree(symlink_path)
94 + else:
95 + os.unlink(symlink_path)
96 +
97 + # Check for existing symlinks and recreate if necessary.
98 + for x in alist:
99 + symlink_path = os.path.join(edpath, x)
100 + target = os.path.join(orig_distdir, x)
101 + try:
102 + link_target = os.readlink(symlink_path)
103 + except OSError:
104 + os.symlink(target, symlink_path)
105 + else:
106 + if link_target != target:
107 + os.unlink(symlink_path)
108 + os.symlink(target, symlink_path)
109 --
110 2.12.0