diff --git a/pisi/configfile.py b/pisi/configfile.py index ba5c67f5..3cd45e1b 100644 --- a/pisi/configfile.py +++ b/pisi/configfile.py @@ -31,6 +31,7 @@ #buildno=True # necessary for generating build nos #buildhelper = None / ccache / icecream #compressionlevel = 7 +#fallback = "ftp://ftp.pardus.org.tr/pub/pisi/source" # #[directories] #lib_dir = /var/lib/pisi @@ -75,6 +76,7 @@ class BuildDefaults: buildno = False buildhelper = None compressionlevel = 7 + fallback = "ftp://ftp.pardus.org.tr/pub/pisi/source" class DirectoriesDefaults: "Default values for [directories] section" diff --git a/pisi/sourcearchive.py b/pisi/sourcearchive.py index 76724177..f3918ae9 100644 --- a/pisi/sourcearchive.py +++ b/pisi/sourcearchive.py @@ -14,7 +14,7 @@ # python standard library -from os.path import join +from os.path import join, basename from os import access, R_OK import gettext @@ -47,7 +47,15 @@ class SourceArchive: progress = ctx.ui.Progress else: progress = None - fetch_url(self.url, ctx.config.archives_dir(), progress) + try: + fetch_url(self.url, ctx.config.archives_dir(), progress) + except pisi.fetcher.FetchError: + # if archive can not be reached from the url, try the fallback + # address. + if ctx.config.values.build.fallback: + archive = basename(self.url.get_uri()) + src = join(ctx.config.values.build.fallback, archive) + fetch_url(src, ctx.config.archives_dir(), progress) def is_cached(self, interactive=True): if not access(self.archiveFile, R_OK):