| Home | Trees | Indices | Help |
|
|---|
|
|
1 # -*- coding: utf-8 -*-
2 """
3
4 @author: Fabio Erculiani <lxnay@sabayonlinux.org>
5 @contact: lxnay@sabayonlinux.org
6 @copyright: Fabio Erculiani
7 @license: GPL-2
8
9 B{Entropy Package Manager Client Cache Interface}.
10
11 """
12 from __future__ import with_statement
13 import os
14 from entropy.const import *
15 from entropy.exceptions import *
16 from entropy.output import red, darkred, darkgreen
17 from entropy.i18n import _
18
20
22 # is the list of repos changed?
23 cached = self.Cacher.pop(etpCache['repolist'])
24 if cached != self.SystemSettings['repositories']['order']:
25 # invalidate matching cache
26 try:
27 self.repository_move_clear_cache()
28 except IOError:
29 pass
30 self.store_repository_list_cache()
31
33 self.Cacher.push(etpCache['repolist'],
34 self.SystemSettings['repositories']['order'],
35 async = False)
36
37 - def generate_cache(self, depcache = True, configcache = True,
38 client_purge = True, install_queue = True):
39
40 # clean first of all
41 self.purge_cache(client_purge = client_purge)
42 if depcache:
43 self.do_depcache(do_install_queue = install_queue)
44 if configcache:
45 self.do_configcache()
46
48 self.updateProgress(
49 darkred(_("Configuration files")),
50 importance = 2,
51 type = "warning"
52 )
53 self.updateProgress(
54 red(_("Scanning hard disk")),
55 importance = 1,
56 type = "warning"
57 )
58 self.FileUpdates.scanfs(dcache = False, quiet = True)
59 self.updateProgress(
60 darkred(_("Cache generation complete.")),
61 importance = 2,
62 type = "info"
63 )
64
66
67 self.updateProgress(
68 darkgreen(_("Resolving metadata")),
69 importance = 1,
70 type = "warning"
71 )
72 # we can barely ignore any exception from here
73 # especially cases where client db does not exist
74 try:
75 update, remove, fine, spm_fine = self.calculate_world_updates()
76 del fine, spm_fine, remove
77 if do_install_queue:
78 self.get_install_queue(update, False, False)
79 self.calculate_available_packages()
80 except: # except SystemDatabaseError @ calculate_world_updates
81 pass
82
83 self.updateProgress(
84 darkred(_("Dependencies cache filled.")),
85 importance = 2,
86 type = "warning"
87 )
88
90 if self.entropyTools.is_user_in_entropy_group():
91 self.Cacher.stop()
92 try:
93 skip = set()
94 if not client_purge:
95 skip.add("/"+etpCache['dbMatch']+"/"+etpConst['clientdbid']) # it's ok this way
96 skip.add("/"+etpCache['dbSearch']+"/"+etpConst['clientdbid']) # it's ok this way
97 for key in etpCache:
98 if showProgress:
99 self.updateProgress(
100 darkred(_("Cleaning %s => dumps...")) % (etpCache[key],),
101 importance = 1,
102 type = "warning",
103 back = True
104 )
105 self.clear_dump_cache(etpCache[key], skip = skip)
106
107 if showProgress:
108 self.updateProgress(
109 darkgreen(_("Cache is now empty.")),
110 importance = 2,
111 type = "info"
112 )
113 finally:
114 self.Cacher.start()
115
119
121 if not self.UGC.is_repository_eapi3_aware(repository):
122 return None
123 status = True
124
125 votes_dict, err_msg = self.UGC.get_all_votes(repository)
126 if isinstance(votes_dict,dict):
127 self.UGC.UGCCache.save_vote_cache(repository, votes_dict)
128 else:
129 status = False
130
131 downloads_dict, err_msg = self.UGC.get_all_downloads(repository)
132 if isinstance(downloads_dict,dict):
133 self.UGC.UGCCache.save_downloads_cache(repository, downloads_dict)
134 else:
135 status = False
136 return status
137
139 return self.SystemSettings._clear_repository_cache(repoid = repoid)
140
142 # client digest not needed, cache is kept updated
143 return str(hash("%s|%s|%s" % (
144 self.all_repositories_checksum(),
145 self.validRepositories,
146 # needed when users do bogus things like editing config files
147 # manually (branch setting)
148 self.SystemSettings['repositories']['branch'],
149 )
150 ))
151
153 sum_hashes = ''
154 for repo in self.validRepositories:
155 try:
156 dbconn = self.open_repository(repo)
157 except (RepositoryError):
158 continue # repo not available
159 try:
160 sum_hashes += dbconn.checksum()
161 except self.dbapi2.OperationalError:
162 pass
163 return sum_hashes
164
166 if myhash == None:
167 myhash = self.get_available_packages_chash()
168 return self.Cacher.pop("%s%s" % (etpCache['world_available'], myhash))
169
171
172 misc_settings = self.SystemSettings[self.sys_settings_client_plugin_id]['misc']
173 ignore_spm_downgrades = misc_settings['ignore_spm_downgrades']
174
175 if self.xcache:
176
177 if db_digest == None:
178 db_digest = self.all_repositories_checksum()
179
180 c_hash = "%s%s" % (etpCache['world_update'],
181 self.get_world_update_cache_hash(db_digest, empty_deps,
182 ignore_spm_downgrades),)
183
184 disk_cache = self.Cacher.pop(c_hash)
185 if isinstance(disk_cache, tuple):
186 return disk_cache
187
190
191 return str(hash("%s|%s|%s|%s|%s|%s" % (
192 db_digest, empty_deps, self.validRepositories,
193 self.SystemSettings['repositories']['order'],
194 ignore_spm_downgrades,
195 # needed when users do bogus things like editing config files
196 # manually (branch setting)
197 self.SystemSettings['repositories']['branch'],
198 )))
199
201
202 if self.xcache:
203
204 if db_digest == None:
205 db_digest = self.all_repositories_checksum()
206
207 c_hash = "%s%s" % (etpCache['critical_update'],
208 self.get_critical_update_cache_hash(db_digest),)
209
210 return self.Cacher.pop(c_hash)
211
213
214 return str(hash("%s|%s|%s|%s" % (
215 db_digest, self.validRepositories,
216 self.SystemSettings['repositories']['order'],
217 # needed when users do bogus things like editing config files
218 # manually (branch setting)
219 self.SystemSettings['repositories']['branch'],
220 )))
221
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Fri Sep 4 11:50:17 2009 | http://epydoc.sourceforge.net |