1 |
Author: zmedico |
2 |
Date: 2008-10-12 23:17:56 +0000 (Sun, 12 Oct 2008) |
3 |
New Revision: 11685 |
4 |
|
5 |
Modified: |
6 |
main/trunk/pym/_emerge/__init__.py |
7 |
main/trunk/pym/portage/__init__.py |
8 |
Log: |
9 |
Bug #241118 - Re-enable pkg_nofetch for emerge --pretend --fetch, but direct |
10 |
output to stderr. This requires PORTAGE_BUILDDIR locking for bug #239560 and |
11 |
also for elog message storage. |
12 |
|
13 |
|
14 |
Modified: main/trunk/pym/_emerge/__init__.py |
15 |
=================================================================== |
16 |
--- main/trunk/pym/_emerge/__init__.py 2008-10-12 21:01:12 UTC (rev 11684) |
17 |
+++ main/trunk/pym/_emerge/__init__.py 2008-10-12 23:17:56 UTC (rev 11685) |
18 |
@@ -1588,6 +1588,13 @@ |
19 |
__slots__ = ("fetch_all", "pkg", "settings") |
20 |
|
21 |
def execute(self): |
22 |
+ # To spawn pkg_nofetch requires PORTAGE_BUILDDIR for |
23 |
+ # ensuring sane $PWD (bug #239560) and storing elog |
24 |
+ # messages. |
25 |
+ build_dir = EbuildBuildDir(pkg=self.pkg, settings=self.settings) |
26 |
+ build_dir.lock() |
27 |
+ build_dir.clean() |
28 |
+ portage.prepare_build_dirs(self.pkg.root, self.settings, 0) |
29 |
portdb = self.pkg.root_config.trees["porttree"].dbapi |
30 |
ebuild_path = portdb.findname(self.pkg.cpv) |
31 |
debug = self.settings.get("PORTAGE_DEBUG") == "1" |
32 |
@@ -1596,6 +1603,10 @@ |
33 |
self.settings["ROOT"], self.settings, debug=debug, |
34 |
listonly=1, fetchonly=1, fetchall=self.fetch_all, |
35 |
mydbapi=portdb, tree="porttree") |
36 |
+ |
37 |
+ portage.elog.elog_process(self.pkg.cpv, self.settings) |
38 |
+ build_dir.clean() |
39 |
+ build_dir.unlock() |
40 |
return retval |
41 |
|
42 |
class AsynchronousTask(SlotObject): |
43 |
@@ -2248,7 +2259,7 @@ |
44 |
settings = self.config_pool.allocate() |
45 |
self._build_dir = EbuildBuildDir(pkg=self.pkg, settings=settings) |
46 |
self._build_dir.lock() |
47 |
- self._clean_builddir() |
48 |
+ self._build_dir.clean() |
49 |
portage.prepare_build_dirs(self.pkg.root, self._build_dir.settings, 0) |
50 |
if self.logfile is None: |
51 |
self.logfile = settings.get("PORTAGE_LOG_FILE") |
52 |
@@ -2291,18 +2302,6 @@ |
53 |
portage._create_pty_or_pipe(copy_term_size=stdout_pipe) |
54 |
return (master_fd, slave_fd) |
55 |
|
56 |
- def _clean_builddir(self): |
57 |
- """Uses shutil.rmtree() rather than spawning a 'clean' phase. Disabled |
58 |
- by keepwork or keeptemp in FEATURES.""" |
59 |
- features = self._build_dir.settings.features |
60 |
- if not ("keepwork" in features or "keeptemp" in features): |
61 |
- try: |
62 |
- shutil.rmtree(self._build_dir.settings["PORTAGE_BUILDDIR"]) |
63 |
- except EnvironmentError, e: |
64 |
- if e.errno != errno.ENOENT: |
65 |
- raise |
66 |
- del e |
67 |
- |
68 |
def _set_returncode(self, wait_retval): |
69 |
SpawnProcess._set_returncode(self, wait_retval) |
70 |
# Collect elog messages that might have been |
71 |
@@ -2322,7 +2321,7 @@ |
72 |
portage.elog.elog_process(self.pkg.cpv, self._build_dir.settings) |
73 |
features = self._build_dir.settings.features |
74 |
if self.fetchonly or self.returncode == os.EX_OK: |
75 |
- self._clean_builddir() |
76 |
+ self._build_dir.clean() |
77 |
self._build_dir.unlock() |
78 |
self.config_pool.deallocate(self._build_dir.settings) |
79 |
self._build_dir = None |
80 |
@@ -2377,6 +2376,19 @@ |
81 |
if catdir_lock is not None: |
82 |
portage.locks.unlockdir(catdir_lock) |
83 |
|
84 |
+ def clean(self): |
85 |
+ """Uses shutil.rmtree() rather than spawning a 'clean' phase. Disabled |
86 |
+ by keepwork or keeptemp in FEATURES.""" |
87 |
+ settings = self.settings |
88 |
+ features = settings.features |
89 |
+ if not ("keepwork" in features or "keeptemp" in features): |
90 |
+ try: |
91 |
+ shutil.rmtree(settings["PORTAGE_BUILDDIR"]) |
92 |
+ except EnvironmentError, e: |
93 |
+ if e.errno != errno.ENOENT: |
94 |
+ raise |
95 |
+ del e |
96 |
+ |
97 |
def unlock(self): |
98 |
if self._lock_obj is None: |
99 |
return |
100 |
|
101 |
Modified: main/trunk/pym/portage/__init__.py |
102 |
=================================================================== |
103 |
--- main/trunk/pym/portage/__init__.py 2008-10-12 21:01:12 UTC (rev 11684) |
104 |
+++ main/trunk/pym/portage/__init__.py 2008-10-12 23:17:56 UTC (rev 11685) |
105 |
@@ -4060,29 +4060,43 @@ |
106 |
|
107 |
if listonly: |
108 |
writemsg_stdout("\n", noiselevel=-1) |
109 |
- elif fetched != 2: |
110 |
+ if fetched != 2: |
111 |
if restrict_fetch: |
112 |
- print "\n!!!", mysettings["CATEGORY"] + "/" + \ |
113 |
- mysettings["PF"], "has fetch restriction turned on." |
114 |
- print "!!! This probably means that this " + \ |
115 |
- "ebuild's files must be downloaded" |
116 |
- print "!!! manually. See the comments in" + \ |
117 |
- " the ebuild for more information.\n" |
118 |
+ msg = ("\n!!! %s/%s" + \ |
119 |
+ " has fetch restriction turned on.\n" + \ |
120 |
+ "!!! This probably means that this " + \ |
121 |
+ "ebuild's files must be downloaded\n" + \ |
122 |
+ "!!! manually. See the comments in" + \ |
123 |
+ " the ebuild for more information.\n\n") % \ |
124 |
+ (mysettings["CATEGORY"], mysettings["PF"]) |
125 |
+ portage.util.writemsg_level(msg, |
126 |
+ level=logging.ERROR, noiselevel=-1) |
127 |
if not parallel_fetchonly: |
128 |
# To spawn pkg_nofetch requires PORTAGE_BUILDDIR for |
129 |
# ensuring sane $PWD (bug #239560) and storing elog |
130 |
# messages. Therefore, calling code needs to ensure that |
131 |
# PORTAGE_BUILDDIR is already clean and locked here. |
132 |
+ |
133 |
+ # All the pkg_nofetch goes to stderr since it's considered |
134 |
+ # to be an error message. |
135 |
+ fd_pipes = { |
136 |
+ 0 : sys.stdin.fileno(), |
137 |
+ 1 : sys.stderr.fileno(), |
138 |
+ 2 : sys.stderr.fileno(), |
139 |
+ } |
140 |
+ |
141 |
ebuild_phase = mysettings.get("EBUILD_PHASE") |
142 |
try: |
143 |
mysettings["EBUILD_PHASE"] = "nofetch" |
144 |
spawn(_shell_quote(EBUILD_SH_BINARY) + \ |
145 |
- " nofetch", mysettings) |
146 |
+ " nofetch", mysettings, fd_pipes=fd_pipes) |
147 |
finally: |
148 |
if ebuild_phase is None: |
149 |
mysettings.pop("EBUILD_PHASE", None) |
150 |
else: |
151 |
mysettings["EBUILD_PHASE"] = ebuild_phase |
152 |
+ elif listonly: |
153 |
+ continue |
154 |
elif not filedict[myfile]: |
155 |
writemsg("Warning: No mirrors available for file" + \ |
156 |
" '%s'\n" % (myfile), noiselevel=-1) |
157 |
@@ -5436,8 +5450,7 @@ |
158 |
|
159 |
# Build directory creation isn't required for any of these. |
160 |
have_build_dirs = False |
161 |
- if not (mydo in ("digest", "help", "manifest") or \ |
162 |
- (mydo == "fetch" and listonly)): |
163 |
+ if not mydo in ("digest", "help", "manifest"): |
164 |
mystatus = prepare_build_dirs(myroot, mysettings, cleanup) |
165 |
if mystatus: |
166 |
return mystatus |