本文整理汇总了Python中apt.cache.Cache.update方法的典型用法代码示例。如果您正苦于以下问题:Python Cache.update方法的具体用法?Python Cache.update怎么用?Python Cache.update使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类apt.cache.Cache
的用法示例。
在下文中一共展示了Cache.update方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: do_update
# 需要导入模块: from apt.cache import Cache [as 别名]
# 或者: from apt.cache.Cache import update [as 别名]
def do_update(mark_only):
_, progress = query_verbosity()
log.info("Getting list of eligible packages...")
cache = Cache(progress)
f_cache = FilteredCache(cache)
f_cache.set_filter(NvidiaFilter())
names = f_cache.keys()
with unhold(names, cache):
# mark_only means we just want the side-effects of exiting the
# unhold() context manager.
if mark_only:
return False
log.info("Updating package list...")
try:
cache.update()
except FetchFailedException, err:
log.warn(err)
cache.open(progress) # Refresh package list
old_versions = {name: cache[name].installed for name in names}
log.info("Updating all packages...")
for name in names:
if cache[name].is_upgradable:
cache[name].mark_upgrade()
cache.commit(None, None)
log.info("Refreshing package cache...")
cache.open(progress)
new_versions = {name: cache[name].installed for name in names}
log.info("Checking whether packages were upgraded...")
for name in old_versions:
if old_versions[name] != new_versions[name]:
log.info("Kernel module changed")
return True
return False
示例2: IsolatedAptCache
# 需要导入模块: from apt.cache import Cache [as 别名]
# 或者: from apt.cache.Cache import update [as 别名]
class IsolatedAptCache(object):
"""A apt.cache.Cache wrapper that isolates it from the system it runs on.
:ivar cache: the isolated cache.
:type cache: apt.cache.Cache
"""
def __init__(self, sources, architecture=None, prefer_label=None):
"""Create an IsolatedAptCache.
:param sources: a list of sources such that they can be prefixed
with "deb " and fed to apt.
:type sources: an iterable of str
:param architecture: the architecture to fetch packages for.
:type architecture: str
"""
self.sources = sources
self.architecture = architecture
self.tempdir = None
self.prefer_label = prefer_label
def prepare(self):
"""Prepare the IsolatedAptCache for use.
Should be called before use, and after any modification to the list
of sources.
"""
self.cleanup()
logger.debug("Writing apt configs")
self.tempdir = tempfile.mkdtemp(prefix="hwpack-apt-cache-")
dirs = ["var/lib/dpkg",
"etc/apt/sources.list.d",
"var/cache/apt/archives/partial",
"var/lib/apt/lists/partial",
]
for d in dirs:
os.makedirs(os.path.join(self.tempdir, d))
self.set_installed_packages([], reopen=False)
sources_list = os.path.join(
self.tempdir, "etc", "apt", "sources.list")
with open(sources_list, 'w') as f:
for source in self.sources:
# To make a file URL look like an HTTP one (for urlparse)
# We do this to use urlparse, which is probably more robust
# than any regexp we come up with.
mangled_source = source
if re.search("file:/[^/]", source):
mangled_source = re.sub("file:/", "file://", source)
url_parsed = urlparse.urlsplit(mangled_source)
# If the source uses authentication, don't put in sources.list
if url_parsed.password:
url_parts_without_user_pass = [url_parsed.scheme,
url_parsed.hostname,
url_parsed.path,
url_parsed.query,
url_parsed.fragment]
auth_name = os.path.join(
self.tempdir, "etc", "apt", "auth.conf")
with open(auth_name, 'w') as auth:
auth.write(
"machine " + url_parsed.hostname + "\n" +
"login " + url_parsed.username + "\n" +
"password " + url_parsed.password + "\n")
source = urlparse.urlunsplit(url_parts_without_user_pass)
# Get rid of extra / in file URLs
source = re.sub("file://", "file:/", source)
f.write("deb %s\n" % source)
if self.architecture is not None:
apt_conf = os.path.join(self.tempdir, "etc", "apt", "apt.conf")
with open(apt_conf, 'w') as f:
f.write(
'Apt {\nArchitecture "%s";\n'
'Install-Recommends "true";\n}\n' % self.architecture)
if self.prefer_label is not None:
apt_preferences = os.path.join(
self.tempdir, "etc", "apt", "preferences")
with open(apt_preferences, 'w') as f:
f.write(
'Package: *\n'
'Pin: release l=%s\n'
'Pin-Priority: 1001\n' % self.prefer_label)
# XXX: This is a temporary workaround for bug 885895.
apt_pkg.config.set("Dir::bin::dpkg", "/bin/false")
self.cache = Cache(rootdir=self.tempdir, memonly=True)
logger.debug("Updating apt cache")
try:
self.cache.update()
except FetchFailedException, e:
obfuscated_e = re.sub(r"([^ ]https://).+?(@)", r"\1***\2", str(e))
raise FetchFailedException(obfuscated_e)
self.cache.open()
return self
示例3: error
# 需要导入模块: from apt.cache import Cache [as 别名]
# 或者: from apt.cache.Cache import update [as 别名]
# self.apt_status = os.WEXITSTATUS(status)
# self.finished = True
#
# def error(self, pkg, errormsg):
# """Called when an error happens.
#
# Emits: status_error()
# """
# self.emit(QtCore.SIGNAL("status_error()"))
# def conffile(self, current, new):
# """Called during conffile.
#
# Emits: status-conffile()
# """
# self.emit("status-conffile")
#
# def start_update(self):
# """Called when the update starts.
#
# Emits: status-started()
# """
# self.emit("status-started")
if __name__ =='__main__':
from apt.cache import Cache
import apt
c = Cache(QOpProgress())
c.update(QAcquireProgress())
c.commit(QAcquireProgress(), QInstallProgress())