Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10908 - main/trunk/pym/_emerge
Date: Thu, 03 Jul 2008 08:44:36
Message-Id: E1KEKQY-0003b8-5v@stork.gentoo.org
1 Author: zmedico
2 Date: 2008-07-03 08:44:29 +0000 (Thu, 03 Jul 2008)
3 New Revision: 10908
4
5 Modified:
6 main/trunk/pym/_emerge/__init__.py
7 Log:
8 Split out a _restart_if_necessary() method from Scheduler._merge().
9
10
11 Modified: main/trunk/pym/_emerge/__init__.py
12 ===================================================================
13 --- main/trunk/pym/_emerge/__init__.py 2008-07-03 08:17:09 UTC (rev 10907)
14 +++ main/trunk/pym/_emerge/__init__.py 2008-07-03 08:44:29 UTC (rev 10908)
15 @@ -6954,6 +6954,9 @@
16 "--fetchonly", "--fetch-all-uri",
17 "--nodeps", "--pretend"])
18
19 + _bad_resume_opts = set(["--ask", "--changelog",
20 + "--resume", "--skipfirst"])
21 +
22 _fetch_log = "/var/log/emerge-fetch.log"
23
24 class _iface_class(SlotObject):
25 @@ -6993,6 +6996,9 @@
26 for k in self._binpkg_opts.__slots__:
27 setattr(self._binpkg_opts, k, "--" + k.replace("_", "-") in myopts)
28
29 + # The root where the currently running
30 + # portage instance is installed.
31 + self._running_root = trees["/"]["root_config"]
32 self.edebug = 0
33 if settings.get("PORTAGE_DEBUG", "") == "1":
34 self.edebug = 1
35 @@ -7020,6 +7026,9 @@
36 self._prefetchers = weakref.WeakValueDictionary()
37 self._failed_fetches = []
38 self._parallel_fetch = False
39 + self._pkg_count = self._pkg_count_class(
40 + curval=0, maxval=len(mergelist))
41 +
42 features = self.settings.features
43 if "parallel-fetch" in features and \
44 not ("--pretend" in self.myopts or \
45 @@ -7173,6 +7182,58 @@
46
47 sys.stderr.write("\n")
48
49 + def _restart_if_necessary(self, pkg):
50 + """
51 + Use execv() to restart emerge. This happens
52 + if portage upgrades itself and there are
53 + remaining packages in the list.
54 + """
55 +
56 + if "--pretend" in self.myopts or \
57 + "--fetchonly" in self.myopts or \
58 + "--fetch-all-uri" in self.myopts:
59 + return
60 +
61 + # Figure out if we need a restart.
62 + if pkg.root != self._running_root.root or \
63 + not portage.match_from_list(
64 + portage.const.PORTAGE_PACKAGE_ATOM, [pkg]):
65 + return
66 +
67 + if self._pkg_count.curval >= self._pkg_count.maxval:
68 + return
69 +
70 + logger = self._logger
71 + pkg_count = self._pkg_count
72 + mtimedb = self._mtimedb
73 + bad_resume_opts = self._bad_resume_opts
74 +
75 + logger.log(" ::: completed emerge (%s of %s) %s to %s" % \
76 + (pkg_count.curval, pkg_count.maxval, pkg.cpv, pkg.root))
77 +
78 + logger.log(" *** RESTARTING " + \
79 + "emerge via exec() after change of " + \
80 + "portage version.")
81 +
82 + del mtimedb["resume"]["mergelist"][0]
83 + mtimedb.commit()
84 + portage.run_exitfuncs()
85 + mynewargv = [sys.argv[0], "--resume"]
86 + resume_opts = self.myopts.copy()
87 + # For automatic resume, we need to prevent
88 + # any of bad_resume_opts from leaking in
89 + # via EMERGE_DEFAULT_OPTS.
90 + resume_opts["--ignore-default-opts"] = True
91 + for myopt, myarg in resume_opts.iteritems():
92 + if myopt not in bad_resume_opts:
93 + if myarg is True:
94 + mynewargv.append(myopt)
95 + else:
96 + mynewargv.append(myopt +"="+ myarg)
97 + # priority only needs to be adjusted on the first run
98 + os.environ["PORTAGE_NICENESS"] = "0"
99 + os.execv(mynewargv[0], mynewargv)
100 +
101 def merge(self):
102
103 if "--resume" in self.myopts:
104 @@ -7258,6 +7319,8 @@
105 del _eerror, msg
106 del dropped_tasks
107 self._mergelist = mylist
108 + self._pkg_count.curval = 0
109 + self._pkg_count.maxval = len(mylist)
110
111 self._logger.log(" *** Finished. Cleaning up...")
112
113 @@ -7356,8 +7419,6 @@
114 root_config = self.trees[self.target_root]["root_config"]
115 mymergelist = mylist
116 myfeat = self.settings.features[:]
117 - bad_resume_opts = set(["--ask", "--changelog", "--skipfirst",
118 - "--resume"])
119 metadata_keys = [k for k in portage.auxdbkeys \
120 if not k.startswith("UNUSED_")] + ["USE"]
121
122 @@ -7365,8 +7426,7 @@
123 # Filter mymergelist so that all the len(mymergelist) calls
124 # below (for display) do not count Uninstall instances.
125 mymergelist = [x for x in mymergelist if x[-1] == "merge"]
126 - pkg_count = self._pkg_count_class(
127 - curval=0, maxval=len(mymergelist))
128 +
129 for x in task_list:
130 if x[0] == "blocks":
131 continue
132 @@ -7389,24 +7449,21 @@
133 mydbapi = vardb
134 else:
135 raise AssertionError("Package type: '%s'" % pkg_type)
136 - if not x.installed:
137 - pkg_count.curval += 1
138 +
139 try:
140 - self._execute_task(bad_resume_opts,
141 - mydbapi, pkg_count,
142 - myfeat, mymergelist, x)
143 + self._execute_task(x)
144 except self._pkg_failure, e:
145 return e.status
146
147 return os.EX_OK
148
149 - def _execute_task(self, bad_resume_opts,
150 - mydbapi, pkg_count, myfeat,
151 - mymergelist, pkg):
152 + def _execute_task(self, pkg):
153 favorites = self._favorites
154 mtimedb = self._mtimedb
155 prefetchers = self._prefetchers
156 + pkg_count = self._pkg_count
157 mergecount = pkg_count.curval
158 + mymergelist = self._mergelist
159 pkgsettings = self.pkgsettings[pkg.root]
160 buildpkgonly = "--buildpkgonly" in self.myopts
161 fetch_all = "--fetch-all-uri" in self.myopts
162 @@ -7431,7 +7488,10 @@
163 pkg_type, myroot, pkg_key, operation = x
164 pkgindex = 2
165 metadata = pkg.metadata
166 - if pkg.installed:
167 + if not pkg.installed:
168 + pkg_count.curval += 1
169 + mergecount = pkg_count.curval
170 + else:
171 if not (buildpkgonly or fetchonly or pretend):
172 uninstall = PackageUninstall(ldpath_mtimes=ldpath_mtimes,
173 opts=self.myopts, pkg=pkg, settings=pkgsettings)
174 @@ -7496,40 +7556,6 @@
175 world_set.add(myfavkey)
176 world_set.unlock()
177
178 - if "--pretend" not in self.myopts and \
179 - "--fetchonly" not in self.myopts and \
180 - "--fetch-all-uri" not in self.myopts:
181 -
182 - # Figure out if we need a restart.
183 - if myroot == "/" and pkg.cp == "sys-apps/portage":
184 - if len(mymergelist) > mergecount:
185 - emergelog(xterm_titles,
186 - " ::: completed emerge ("+ \
187 - str(mergecount)+" of "+ \
188 - str(len(mymergelist))+") "+ \
189 - x[2]+" to "+x[1])
190 - emergelog(xterm_titles, " *** RESTARTING " + \
191 - "emerge via exec() after change of " + \
192 - "portage version.")
193 - del mtimedb["resume"]["mergelist"][0]
194 - mtimedb.commit()
195 - portage.run_exitfuncs()
196 - mynewargv=[sys.argv[0],"--resume"]
197 - resume_opts = self.myopts.copy()
198 - # For automatic resume, we need to prevent
199 - # any of bad_resume_opts from leaking in
200 - # via EMERGE_DEFAULT_OPTS.
201 - resume_opts["--ignore-default-opts"] = True
202 - for myopt, myarg in resume_opts.iteritems():
203 - if myopt not in bad_resume_opts:
204 - if myarg is True:
205 - mynewargv.append(myopt)
206 - else:
207 - mynewargv.append(myopt +"="+ myarg)
208 - # priority only needs to be adjusted on the first run
209 - os.environ["PORTAGE_NICENESS"] = "0"
210 - os.execv(mynewargv[0], mynewargv)
211 -
212 if "--pretend" not in self.myopts and \
213 "--fetchonly" not in self.myopts and \
214 "--fetch-all-uri" not in self.myopts:
215 @@ -7544,7 +7570,7 @@
216 str(mergecount)+" of "+str(len(mymergelist))+") "+\
217 x[2]+" to "+x[1])
218
219 - # Unsafe for parallel merges
220 + self._restart_if_necessary(pkg)
221 del mtimedb["resume"]["mergelist"][0]
222 if not mtimedb["resume"]["mergelist"]:
223 del mtimedb["resume"]
224
225 --
226 gentoo-commits@l.g.o mailing list