1 |
commit: 001970d23ff76b451a60ecdc9075344ee8e3c7d5 |
2 |
Author: Zac Medico <zmedico <AT> gentoo <DOT> org> |
3 |
AuthorDate: Wed Nov 16 21:14:42 2011 +0000 |
4 |
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> |
5 |
CommitDate: Wed Nov 16 21:14:42 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=001970d2 |
7 |
|
8 |
pkg_pretend: clean first for bug #390711 |
9 |
|
10 |
--- |
11 |
pym/_emerge/Scheduler.py | 46 ++++++++++++++++++++++--------- |
12 |
pym/portage/tests/emerge/test_simple.py | 4 +++ |
13 |
2 files changed, 37 insertions(+), 13 deletions(-) |
14 |
|
15 |
diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py |
16 |
index 729b2d7..d5e801b 100644 |
17 |
--- a/pym/_emerge/Scheduler.py |
18 |
+++ b/pym/_emerge/Scheduler.py |
19 |
@@ -7,10 +7,8 @@ from collections import deque |
20 |
import gc |
21 |
import gzip |
22 |
import logging |
23 |
-import shutil |
24 |
import signal |
25 |
import sys |
26 |
-import tempfile |
27 |
import textwrap |
28 |
import time |
29 |
import warnings |
30 |
@@ -28,9 +26,10 @@ from portage.output import colorize, create_color_func, red |
31 |
bad = create_color_func("BAD") |
32 |
from portage._sets import SETPREFIX |
33 |
from portage._sets.base import InternalPackageSet |
34 |
-from portage.util import ensure_dirs, writemsg, writemsg_level |
35 |
+from portage.util import writemsg, writemsg_level |
36 |
from portage.package.ebuild.digestcheck import digestcheck |
37 |
from portage.package.ebuild.digestgen import digestgen |
38 |
+from portage.package.ebuild.doebuild import _check_temp_dir |
39 |
from portage.package.ebuild.prepare_build_dirs import prepare_build_dirs |
40 |
|
41 |
import _emerge |
42 |
@@ -44,6 +43,7 @@ from _emerge.create_depgraph_params import create_depgraph_params |
43 |
from _emerge.create_world_atom import create_world_atom |
44 |
from _emerge.DepPriority import DepPriority |
45 |
from _emerge.depgraph import depgraph, resume_depgraph |
46 |
+from _emerge.EbuildBuildDir import EbuildBuildDir |
47 |
from _emerge.EbuildFetcher import EbuildFetcher |
48 |
from _emerge.EbuildPhase import EbuildPhase |
49 |
from _emerge.emergelog import emergelog |
50 |
@@ -52,11 +52,9 @@ from _emerge._find_deep_system_runtime_deps import _find_deep_system_runtime_dep |
51 |
from _emerge._flush_elog_mod_echo import _flush_elog_mod_echo |
52 |
from _emerge.JobStatusDisplay import JobStatusDisplay |
53 |
from _emerge.MergeListItem import MergeListItem |
54 |
-from _emerge.MiscFunctionsProcess import MiscFunctionsProcess |
55 |
from _emerge.Package import Package |
56 |
from _emerge.PackageMerge import PackageMerge |
57 |
from _emerge.PollScheduler import PollScheduler |
58 |
-from _emerge.RootConfig import RootConfig |
59 |
from _emerge.SlotObject import SlotObject |
60 |
from _emerge.SequentialTaskQueue import SequentialTaskQueue |
61 |
|
62 |
@@ -915,11 +913,14 @@ class Scheduler(PollScheduler): |
63 |
root_config = x.root_config |
64 |
settings = self.pkgsettings[root_config.root] |
65 |
settings.setcpv(x) |
66 |
- tmpdir_orig = settings["PORTAGE_TMPDIR"] |
67 |
- build_prefix_orig = os.path.join(tmpdir_orig, 'portage') |
68 |
- ensure_dirs(build_prefix_orig) |
69 |
- tmpdir = tempfile.mkdtemp(dir=build_prefix_orig) |
70 |
- settings["PORTAGE_TMPDIR"] = tmpdir |
71 |
+ |
72 |
+ # setcpv/package.env allows for per-package PORTAGE_TMPDIR so we |
73 |
+ # have to validate it for each package |
74 |
+ rval = _check_temp_dir(settings) |
75 |
+ if rval != os.EX_OK: |
76 |
+ return rval |
77 |
+ |
78 |
+ build_dir = None |
79 |
|
80 |
try: |
81 |
if x.built: |
82 |
@@ -948,7 +949,8 @@ class Scheduler(PollScheduler): |
83 |
if fetched: |
84 |
bintree.inject(x.cpv, filename=fetched) |
85 |
tbz2_file = bintree.getname(x.cpv) |
86 |
- infloc = os.path.join(tmpdir, x.category, x.pf, "build-info") |
87 |
+ infloc = os.path.join(settings["PORTAGE_TMPDIR"], |
88 |
+ x.category, x.pf, "build-info") |
89 |
os.makedirs(infloc) |
90 |
portage.xpak.tbz2(tbz2_file).unpackinfo(infloc) |
91 |
ebuild_path = os.path.join(infloc, x.pf + ".ebuild") |
92 |
@@ -970,6 +972,20 @@ class Scheduler(PollScheduler): |
93 |
portage.package.ebuild.doebuild.doebuild_environment(ebuild_path, |
94 |
"pretend", settings=settings, |
95 |
db=self.trees[settings['EROOT']][tree].dbapi) |
96 |
+ |
97 |
+ existing_buildir = os.path.isdir(settings["PORTAGE_BUILDDIR"]) |
98 |
+ build_dir = EbuildBuildDir(scheduler=sched_iface, |
99 |
+ settings=settings) |
100 |
+ build_dir.lock() |
101 |
+ |
102 |
+ # Clean up the existing build dir, in case pkg_pretend |
103 |
+ # checks for available space (bug #390711). |
104 |
+ if existing_buildir: |
105 |
+ clean_phase = EbuildPhase(background=False, |
106 |
+ phase='clean', scheduler=sched_iface, settings=settings) |
107 |
+ clean_phase.start() |
108 |
+ clean_phase.wait() |
109 |
+ |
110 |
prepare_build_dirs(root_config.root, settings, cleanup=0) |
111 |
|
112 |
vardb = root_config.trees['vartree'].dbapi |
113 |
@@ -987,8 +1003,12 @@ class Scheduler(PollScheduler): |
114 |
failures += 1 |
115 |
portage.elog.elog_process(x.cpv, settings) |
116 |
finally: |
117 |
- shutil.rmtree(tmpdir) |
118 |
- settings["PORTAGE_TMPDIR"] = tmpdir_orig |
119 |
+ if build_dir is not None: |
120 |
+ clean_phase = EbuildPhase(background=False, |
121 |
+ phase='clean', scheduler=sched_iface, settings=settings) |
122 |
+ clean_phase.start() |
123 |
+ clean_phase.wait() |
124 |
+ build_dir.unlock() |
125 |
|
126 |
if failures: |
127 |
return 1 |
128 |
|
129 |
diff --git a/pym/portage/tests/emerge/test_simple.py b/pym/portage/tests/emerge/test_simple.py |
130 |
index db3f496..5f285c2 100644 |
131 |
--- a/pym/portage/tests/emerge/test_simple.py |
132 |
+++ b/pym/portage/tests/emerge/test_simple.py |
133 |
@@ -228,7 +228,11 @@ pkg_preinst() { |
134 |
emerge_cmd + ("-p", "dev-libs/B"), |
135 |
emerge_cmd + ("-B", "dev-libs/B",), |
136 |
emerge_cmd + ("--oneshot", "--usepkg", "dev-libs/B",), |
137 |
+ |
138 |
+ # trigger clean prior to pkg_pretend as in bug #390711 |
139 |
+ ebuild_cmd + (test_ebuild, "unpack"), |
140 |
emerge_cmd + ("--oneshot", "dev-libs/A",), |
141 |
+ |
142 |
emerge_cmd + ("--noreplace", "dev-libs/A",), |
143 |
emerge_cmd + ("--config", "dev-libs/A",), |
144 |
emerge_cmd + ("--info", "dev-libs/A", "dev-libs/B"), |