import json
import logging
+import os
import random
from config import Config
from urlgrabber.progress import TextMeter
from pakfire.constants import *
+from pakfire.i18n import _
class PakfireGrabber(URLGrabber):
"""
PackageDownloader.__init__(self, pakfire, *args, **kwargs)
+class SourceDownloader(object):
+ def __init__(self, pakfire, mirrors=None):
+ self.pakfire = pakfire
+
+ self.grabber = PakfireGrabber(
+ self.pakfire,
+ progress_obj = TextMeter(),
+ )
+
+ if mirrors:
+ self.grabber = MirrorGroup(self.grabber,
+ [{ "mirror" : m } for m in mirrors])
+
+ def download(self, files):
+ existant_files = []
+ download_files = []
+
+ for file in files:
+ filename = os.path.join(SOURCE_CACHE_DIR, file)
+
+ if os.path.exists(filename):
+ existant_files.append(filename)
+ else:
+ download_files.append(filename)
+
+ if download_files:
+ logging.info(_("Downloading source files:"))
+
+ # Create source download directory.
+ if not os.path.exists(SOURCE_CACHE_DIR):
+ os.makedirs(SOURCE_CACHE_DIR)
+
+ for filename in download_files:
+ try:
+ self.grabber.urlgrab(os.path.basename(filename), filename=filename)
+ except URLGrabError, e:
+ raise DownloadError, "%s %s" % (os.path.basename(filename), e)
+
+ logging.info("")
+
+ return existant_files + download_files
+
+
class Mirror(object):
def __init__(self, url, location=None, preferred=False):
# Save URL of the mirror in full format
import packager
import pakfire.chroot as chroot
+import pakfire.downloader as downloader
import pakfire.util as util
from base import Package
from pakfire.constants import *
from pakfire.i18n import _
-# XXX to be moved to pakfire.downloader
-class SourceDownloader(object):
- def __init__(self, pakfire, mirrors=None):
- self.pakfire = pakfire
- self.mirrors = mirrors
-
- # XXX need to use downloader.py
- self.grabber = URLGrabber(
- prefix = self.pakfire.config.get("source_download_url"),
- progress_obj = TextMeter(),
- quote = 0,
- )
-
- def download(self, filename):
- filename = os.path.join(SOURCE_CACHE_DIR, filename)
-
- if os.path.exists(filename):
- return filename
-
- dirname = os.path.dirname(filename)
- if not os.path.exists(dirname):
- os.makedirs(dirname)
-
- try:
- self.grabber.urlgrab(os.path.basename(filename), filename=filename)
- except URLGrabError, e:
- raise DownloadError, "%s %s" % (os.path.basename(filename), e)
-
- return filename
-
-
class MakefileBase(Package):
def __init__(self, pakfire, filename):
Package.__init__(self, pakfire)
copies.
"""
# Download source files.
- # XXX need to implement mirrors
- downloader = SourceDownloader(self.pakfire, mirrors=self.source_dl)
-
- files = []
- for filename in self.sources:
- filename = downloader.download(filename)
- files.append(filename)
+ grabber = downloader.SourceDownloader(self.pakfire,
+ mirrors=self.source_dl)
- return files
+ return grabber.download(self.sources)
def dist(self, resultdirs):
"""
pb.finish()
# Download source files.
- downloader = SourceDownloader(self.pakfire, mirrors=self.source_dl)
- for filename in self.sources:
- _filename = downloader.download(filename)
- assert _filename
-
+ for _filename in self.download():
filename = "%s/files/%s" % (prefix, os.path.basename(_filename))
dirname = os.path.dirname(filename)
if not os.path.exists(dirname):
os.makedirs(dirname)
-
+
shutil.copy2(_filename, filename)
@property