/[smeserver]/cdrom.image/updates/dispatch.py
ViewVC logotype

Annotation of /cdrom.image/updates/dispatch.py

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (hide annotations) (download) (as text)
Mon Oct 10 04:14:41 2005 UTC (19 years, 2 months ago) by gordonr
Branch: MAIN
Changes since 1.3: +1 -1 lines
Content type: text/x-python
Put back post-install/post-upgrade message boxes

1 slords 1.1 #
2     # dispatch.py: install/upgrade master flow control
3     #
4     # Erik Troan <ewt@redhat.com>
5     #
6     # Copyright 2001-2002 Red Hat, Inc.
7     #
8     # This software may be freely redistributed under the terms of the GNU
9     # library public license.
10     #
11     # You should have received a copy of the GNU Library Public License
12     # along with this program; if not, write to the Free Software
13     # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
14     #
15    
16     import string
17     from types import *
18     from constants import *
19     from packages import readPackages, checkDependencies, doInstall
20     from packages import handleX11Packages, writeConfiguration, writeXConfiguration
21     from packages import checkMonitorOK, setSaneXSettings
22     from packages import writeKSConfiguration, turnOnFilesystems
23     from packages import doMigrateFilesystems
24     from packages import queryUpgradeContinue
25     from packages import doPreInstall, doPostInstall, doPostAction,copyAnacondaLogs
26     from autopart import doAutoPartition
27     from packages import firstbootConfiguration
28     from packages import betaNagScreen
29     from packages import selectLanguageSupportGroups
30     from packages import setupTimezone
31     from packages import setFileCons
32     from partitioning import partitionMethodSetup, partitionObjectsInitialize
33     from partitioning import partitioningComplete
34     from floppy import makeBootdisk
35     from bootloader import writeBootloader, bootloaderSetupChoices
36     from flags import flags
37     from upgrade import upgradeFindPackages, upgradeMountFilesystems
38     from upgrade import upgradeSwapSuggestion, upgradeMigrateFind
39     from upgrade import findRootParts
40     from network import networkDeviceCheck
41     from installmethod import doMethodComplete
42    
43     from rhpl.log import log
44    
45     # These are all of the install steps, in order. Note that upgrade and
46     # install steps are the same thing! Upgrades skip install steps, while
47     # installs skip upgrade steps.
48    
49     #
50     # items are one of
51     #
52     # ( name, tuple)
53     # ( name, Function, tuple)
54     #
55     # in the second case, the function is called directly from the dispatcher
56    
57     installSteps = [
58     ("welcome", ("id.configFileData",)),
59     ("betanag", betaNagScreen, ("intf", "dir")),
60     ("language", ("intf", "id.instLanguage")),
61     ("keyboard", ("id.instLanguage.getDefaultKeyboard()", "id.keyboard")),
62     ("checkmonitorok", checkMonitorOK, ("id.monitor", "dispatch")),
63     ("monitor", ("id.xsetup", "id.monitor", "intf")),
64     ("setsanex", setSaneXSettings, ("id.xsetup",)),
65     ("findrootparts", findRootParts, ("intf", "id", "dispatch", "dir", "instPath")),
66     ("findinstall", ("dispatch", "intf", "id", "instPath")),
67     ("installtype", ("dispatch", "id", "method", "intf")),
68     ("zfcpconfig", ("id.zfcp", "id.diskset", "intf")),
69     ("partitionmethod", ("id.partitions", "id.instClass")),
70     ("partitionobjinit", partitionObjectsInitialize, ("id.diskset",
71     "id.partitions",
72     "dir", "intf")),
73     ("partitionmethodsetup", partitionMethodSetup, ("id.partitions",
74     "dispatch")),
75     ("autopartition", ("id.diskset", "id.partitions", "intf", "dispatch")),
76     ("autopartitionexecute", doAutoPartition, ("dir", "id.diskset",
77     "id.partitions", "intf",
78     "id.instClass", "dispatch")),
79     ("fdisk", ("id.diskset", "id.partitions", "intf")),
80     ("fdasd", ("id.diskset", "id.partitions", "intf")),
81     ("partition", ("id.fsset", "id.diskset", "id.partitions", "intf")),
82     ("upgrademount", upgradeMountFilesystems, ("intf", "id.upgradeRoot",
83     "id.fsset", "instPath")),
84     ("upgradecontinue", queryUpgradeContinue, ("intf", "dir")),
85     ("upgradeswapsuggestion", upgradeSwapSuggestion, ("dispatch", "id",
86     "instPath")),
87     ("addswap", ("intf", "id.fsset", "instPath",
88     "id.upgradeSwapInfo", "dispatch")),
89     ("partitiondone", partitioningComplete, ("id.bootloader", "id.fsset",
90     "id.diskset", "id.partitions",
91     "intf", "instPath", "dir")),
92     ("upgrademigfind", upgradeMigrateFind, ("dispatch", "id.fsset")),
93     ("upgrademigratefs", ("id.fsset",)),
94     ("upgbootloader", ("dispatch", "id.bootloader")),
95     ("bootloadersetup", bootloaderSetupChoices, ("dispatch", "id.bootloader",
96     "id.fsset", "id.diskset",
97     "dir")),
98     ("bootloader", ("dispatch", "id.bootloader", "id.fsset", "id.diskset")),
99     ("bootloaderadvanced", ("dispatch", "id.bootloader", "id.fsset",
100     "id.diskset")),
101     ("networkdevicecheck", networkDeviceCheck, ("id.network", "dispatch")),
102     ("network", ("id.network", "dir", "intf")),
103     ("firewall", ("intf", "id.network", "id.firewall", "id.security")),
104     ("languagesupport", ("id.langSupport",)),
105     ("timezone", ("id.instLanguage", "id.timezone")),
106     ("accounts", ("intf", "id.rootPassword")),
107     ("authentication", ("id.auth",)),
108     ("readcomps", readPackages, ("intf", "method", "id")),
109     ("desktopchoice", ("intf", "id.instClass", "dispatch", "id.grpset")),
110     ("findpackages", upgradeFindPackages, ("intf", "method", "id",
111     "instPath", "dir")),
112     ("selectlangpackages", selectLanguageSupportGroups, ("id.grpset","id.langSupport")),
113     ("package-selection", ("id.grpset", "id.langSupport", "id.instClass", "dispatch")),
114     ("indivpackage", ("id.grpset",)),
115     ("handleX11pkgs", handleX11Packages, ("dir", "intf", "dispatch",
116     "id", "instPath")),
117     ("checkdeps", checkDependencies, ("dir", "intf", "dispatch",
118     "id", "instPath")),
119     ("dependencies", ("id.grpset", "id.dependencies")),
120     ("confirminstall", ("intf", "id",)),
121     ("confirmupgrade", ("intf", "id",)),
122     ("install", ("dir", "intf", "id")),
123     ("enablefilesystems", turnOnFilesystems, ("dir", "id.fsset",
124     "id.diskset", "id.partitions",
125     "id.upgrade", "instPath")),
126     ("migratefilesystems", doMigrateFilesystems, ("dir", "id.fsset",
127     "id.diskset", "id.upgrade",
128     "instPath")),
129     ("setuptime", setupTimezone, ("id.timezone", "id.upgrade", "instPath",
130     "dir")),
131     ("preinstallconfig", doPreInstall, ("method", "id", "intf", "instPath",
132     "dir")),
133     ("installpackages", doInstall, ("method", "id", "intf", "instPath")),
134     ("postinstallconfig", doPostInstall, ("method", "id", "intf", "instPath")),
135     ("writeconfig", writeConfiguration, ("id", "instPath")),
136     ("firstboot", firstbootConfiguration, ("id", "instPath")),
137     ("instbootloader", writeBootloader, ("intf", "instPath", "id.fsset",
138     "id.bootloader", "id.langSupport",
139     "id.grpset")),
140     ("bootdisk", ("dir", "dispatch", "id.fsset")),
141     ("makebootdisk", makeBootdisk, ("intf", "dir", "id.floppyDevice",
142     "id.grpset", "instPath", "id.bootloader")),
143     #
144     # we dont use videocard and xcustom currently, they are still listed as
145     # steps but are not listed in the list of install steps in installclass.py
146     #
147     ("videocard", ("dispatch", "id.xsetup", "id.videocard", "intf")),
148     #
149     # this got moved up to just after mouse config, only runs if monitor probe
150     # failed. Needs to be here if we enable videocard and xcustom again.
151     # ("monitor", ("id.xsetup", "id.monitor", "intf")),
152     ("xcustom", ("id.xsetup", "id.monitor", "id.videocard",
153     "id.desktop", "id.grpset", "id.instClass", "instPath")),
154     ("writexconfig", writeXConfiguration, ("id", "instPath")),
155     ("writeksconfig", writeKSConfiguration, ("id", "instPath")),
156     ("setfilecon", setFileCons, ("instPath","id.partitions")),
157     ("copylogs", copyAnacondaLogs, ("instPath",)),
158 gordonr 1.4 ("dopostaction", doPostAction, ("id", "instPath", "intf")),
159 slords 1.1 ("methodcomplete", doMethodComplete, ("method",)),
160     ("complete", ()),
161     ]
162    
163     class Dispatcher:
164    
165     def gotoPrev(self):
166     self.dir = -1
167     self.moveStep()
168    
169     def gotoNext(self):
170     self.dir = 1
171     self.moveStep()
172    
173     def canGoBack(self):
174     # begin with the step before this one. If all steps are skipped,
175     # we can not go backwards from this screen
176     i = self.step - 1
177     while i >= self.firstStep:
178     if (not self.skipSteps.has_key(installSteps[i][0])
179     and (type(installSteps[i][1]) != FunctionType)):
180     return 1
181     i = i - 1
182     return 0
183    
184     def setStepList(self, *steps):
185     # only remove non-permanently skipped steps from our skip list
186     for step, state in self.skipSteps.items():
187     if state == 1:
188     del self.skipSteps[step]
189    
190     stepExists = {}
191     for step in installSteps:
192     name = step[0]
193     if not name in steps:
194     self.skipSteps[name] = 1
195    
196     stepExists[name] = 1
197    
198     for name in steps:
199     if not stepExists.has_key(name):
200     raise KeyError, ("step %s does not exist" % name)
201    
202     def stepInSkipList(self, step):
203     return self.skipSteps.has_key(step)
204    
205     def skipStep(self, stepToSkip, skip = 1, permanent = 0):
206     for step in installSteps:
207     name = step[0]
208     if name == stepToSkip:
209     if skip:
210     if permanent:
211     self.skipSteps[name] = 2
212     elif not self.skipSteps.has_key(name):
213     self.skipSteps[name] = 1
214     elif self.skipSteps.has_key(name):
215     # if marked as permanent then dont change
216     if self.skipSteps[name] != 2:
217     del self.skipSteps[name]
218     return
219    
220     raise KeyError, ("unknown step %s" % stepToSkip)
221    
222     def moveStep(self):
223     if self.step == None:
224     self.step = self.firstStep
225     else:
226     self.step = self.step + self.dir
227    
228     if self.step >= len(installSteps):
229     return None
230    
231     while ((self.step >= self.firstStep
232     and self.step < len(installSteps))
233     and (self.skipSteps.has_key(installSteps[self.step][0])
234     or (type(installSteps[self.step][1]) == FunctionType))):
235     info = installSteps[self.step]
236     if ((type(info[1]) == FunctionType)
237     and (not self.skipSteps.has_key(info[0]))):
238     log("moving (%d) to step %s" %(self.dir, info[0]))
239     (func, args) = info[1:]
240     rc = apply(func, self.bindArgs(args))
241     if rc == DISPATCH_BACK:
242     self.dir = -1
243     elif rc == DISPATCH_FORWARD:
244     self.dir = 1
245     # if anything else, leave self.dir alone
246    
247     self.step = self.step + self.dir
248     if self.step == len(installSteps):
249     return None
250    
251     if (self.step < 0):
252     # pick the first step not in the skip list
253     self.step = 0
254     while self.skipSteps.has_key(installSteps[self.step][0]):
255     self.step = self.step + 1
256     elif self.step >= len(installSteps):
257     self.step = len(installSteps) - 1
258     while self.skipSteps.has_key(installSteps[self.step][0]):
259     self.step = self.step - 1
260     log("moving (%d) to step %s" %(self.dir, installSteps[self.step][0]))
261    
262     def bindArgs(self, args):
263     newArgs = ()
264     for arg in args:
265     obj = self
266     for item in string.split(arg, '.'):
267     if not obj.__dict__.has_key(item):
268     exec "obj = self.%s" %(arg,)
269     break
270     obj = obj.__dict__[item]
271     newArgs = newArgs + (obj,)
272    
273     return newArgs
274    
275     def currentStep(self):
276     if self.step == None:
277     self.gotoNext()
278     elif self.step >= len(installSteps):
279     return (None, None)
280    
281     stepInfo = installSteps[self.step]
282     step = stepInfo[0]
283     args = self.bindArgs(stepInfo[1])
284    
285     return (step, args)
286    
287     def __init__(self, intf, id, method, instPath):
288     self.dir = DISPATCH_FORWARD
289     self.step = None
290     self.skipSteps = {}
291    
292     self.id = id
293     self.flags = flags
294     self.intf = intf
295     self.method = method
296     self.dispatch = self
297     self.instPath = instPath
298     self.firstStep = 0

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed