Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/tests/emerge/, pym/_emerge/
Date: Wed, 16 Nov 2011 21:15:01
Message-Id: 001970d23ff76b451a60ecdc9075344ee8e3c7d5.zmedico@gentoo
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"),