Viewing file:
arch_site.py (3.59 KB) -rw-r--r--Select action/file-type:

(
+) |

(
+) |

(
+) |
Code (
+) |
Session (
+) |

(
+) |
SDB (
+) |

(
+) |

(
+) |

(
+) |

(
+) |

(
+) |
#
# Copyright (c) 2004 Conectiva, Inc.
#
# Written by Cody Lee <platinummonkey@archlinux.us>
# and Anders F Bjorklund <afb@users.sourceforge.net>
#
# This file is part of Smart Package Manager.
#
# Smart Package Manager is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation; either version 2 of the License, or (at
# your option) any later version.
#
# Smart Package Manager is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Smart Package Manager; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
from smart.backends.arch.loader import ArchSiteLoader
from smart.util.filetools import getFileDigest
from smart.channel import PackageChannel
from smart.const import SUCCEEDED, FAILED, NEVER
from smart import *
from urlparse import urlparse
import posixpath
class ArchSiteChannel(PackageChannel):
def __init__(self, baseurl, treename, *args):
super(ArchSiteChannel, self).__init__(*args)
self._baseurl = baseurl
if not treename:
comps = urlparse(baseurl)
paths = comps.path.rstrip("/").split("/")
treename = paths[-3] # get part before /os/
self._treename = treename
self._dbfile = treename + ".db.tar.gz"
self._flfile = treename + ".files.tar.gz"
def getCacheCompareURLs(self):
return [posixpath.join(self._baseurl, self._dbfile)]
def getFetchSteps(self):
return 2
def fetch(self, fetcher, progress):
fetcher.reset()
# Fetch packages file
url = posixpath.join(self._baseurl, self._dbfile)
item = fetcher.enqueue(url, uncomp=True)
flurl = posixpath.join(self._baseurl, self._flfile)
flitem = fetcher.enqueue(flurl, uncomp=True)
fetcher.run(progress=progress)
if item.getStatus() == SUCCEEDED:
localpath = item.getTargetPath()
digest = getFileDigest(localpath)
if digest == self._digest:
return True
if flitem.getStatus() == SUCCEEDED:
filespath = flitem.getTargetPath()
else:
iface.warning(_("Failed to download. You must fetch channel "
"information to acquire needed filelists.\n"
"%s: %s") % (flitem.getURL(),
flitem.getFailedReason()))
filespath = None
self.removeLoaders()
loader = ArchSiteLoader(localpath, filespath, self._baseurl)
loader.setChannel(self)
self._loaders.append(loader)
elif fetcher.getCaching() is NEVER:
lines = [_("Failed acquiring information for '%s':") % self,
u"%s: %s" % (item.getURL(), item.getFailedReason())]
raise Error, "\n".join(lines)
else:
return False
self._digest = digest
return True
def create(alias, data):
return ArchSiteChannel(data["baseurl"],
data["treename"],
data["type"],
alias,
data["name"],
data["manual"],
data["removable"],
data["priority"])
# vim:ts=4:sw=4:et