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