Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r11685 - in main/trunk/pym: _emerge portage
Date: Sun, 12 Oct 2008 23:18:01
Message-Id: E1KpACE-0002k3-3A@stork.gentoo.org
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