sourcearchive: Pass target dirs to unpack methods

This changes the internal API to make working with
multiple work dirs possible.
This commit is contained in:
Fatih Aşıcı
2011-02-20 14:30:02 +00:00
parent 67e18a7c92
commit 0262a6df57
4 changed files with 24 additions and 29 deletions
+2 -4
View File
@@ -222,9 +222,7 @@ class Builder:
self.read_translations(self.specdir)
self.sourceArchives = pisi.sourcearchive.SourceArchives(
self.spec,
self.pkg_work_dir())
self.sourceArchives = pisi.sourcearchive.SourceArchives(self.spec)
self.set_environment_vars()
@@ -470,7 +468,7 @@ class Builder:
def unpack_source_archives(self):
ctx.ui.info(_("Unpacking archive(s)..."))
self.sourceArchives.unpack()
self.sourceArchives.unpack(self.pkg_work_dir())
# apply the patches and prepare a source directory for build.
if self.apply_patches():
# Grab AdditionalFiles
+9 -10
View File
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2005-2010, TUBITAK/UEKAE
# Copyright (C) 2005-2011, TUBITAK/UEKAE
#
# This program 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
@@ -30,25 +30,24 @@ class Error(pisi.Error):
class SourceArchives:
"""This is a wrapper for supporting multiple SourceArchive objects."""
def __init__(self, spec, pkg_work_dir):
self.sourceArchives = [SourceArchive(a, pkg_work_dir) for a in spec.source.archive]
def __init__(self, spec):
self.sourceArchives = [SourceArchive(a) for a in spec.source.archive]
def fetch(self, interactive=True):
for archive in self.sourceArchives:
archive.fetch(interactive)
def unpack(self, clean_dir=True):
self.sourceArchives[0].unpack(clean_dir)
def unpack(self, target_dir, clean_dir=True):
self.sourceArchives[0].unpack(target_dir, clean_dir)
for archive in self.sourceArchives[1:]:
archive.unpack(clean_dir=False)
archive.unpack(target_dir, clean_dir=False)
class SourceArchive:
"""source archive. this is a class responsible for fetching
and unpacking a source archive"""
def __init__(self, archive, pkg_work_dir):
def __init__(self, archive):
self.url = pisi.uri.URI(archive.uri)
self.pkg_work_dir = pkg_work_dir
self.archiveFile = os.path.join(ctx.config.archives_dir(), self.url.filename())
self.archive = archive
@@ -113,7 +112,7 @@ class SourceArchive:
return False
def unpack(self, clean_dir=True):
def unpack(self, target_dir, clean_dir=True):
# check archive file's integrity
if not util.check_file_hash(self.archiveFile, self.archive.sha1sum):
@@ -125,5 +124,5 @@ class SourceArchive:
raise Error(_("Unknown archive type '%s' is given for '%s'.")
% (self.archive.type, self.url.filename()))
target_dir = os.path.join(self.pkg_work_dir, self.archive.target or "")
target_dir = os.path.join(target_dir, self.archive.target or "")
archive.unpack(target_dir, clean_dir)
+7 -7
View File
@@ -13,8 +13,8 @@ class ArchiveTestCase(unittest.TestCase):
def testTarUnpack(self):
spec = SpecFile('repos/pardus-2007/system/base/curl/pspec.xml')
targetDir = '/tmp/tests'
archives = sourcearchive.SourceArchives(spec, targetDir)
archives.unpack()
archives = sourcearchive.SourceArchives(spec)
archives.unpack(targetDir)
for archive in spec.source.archive:
assert archive.type == 'targz'
@@ -22,7 +22,7 @@ class ArchiveTestCase(unittest.TestCase):
def testUnpackTarCond(self):
spec = SpecFile('repos/pardus-2007/system/base/curl/pspec.xml')
targetDir = '/tmp'
archives = sourcearchive.SourceArchives(spec, targetDir)
archives = sourcearchive.SourceArchives(spec)
for archive in spec.source.archive:
url = uri.URI(archive.uri)
filePath = join(pisi.context.config.archives_dir(), url.filename())
@@ -34,17 +34,17 @@ class ArchiveTestCase(unittest.TestCase):
def testZipUnpack(self):
spec = SpecFile('repos/pardus-2007/system/base/openssl/pspec.xml')
targetDir = '/tmp/tests'
archives = sourcearchive.SourceArchives(spec, targetDir)
archives = sourcearchive.SourceArchives(spec)
archives.fetch()
archives.unpack()
archives.unpack(targetDir)
assert not exists(targetDir + '/openssl')
def testMakeZip(self):
spec = SpecFile('repos/pardus-2007/system/base/openssl/pspec.xml')
targetDir = '/tmp/tests'
archives = sourcearchive.SourceArchives(spec, targetDir)
archives = sourcearchive.SourceArchives(spec)
archives.fetch(interactive = False)
archives.unpack(clean_dir = True)
archives.unpack(targetDir, clean_dir=True)
del archives
newDir = targetDir + '/newZip'
+6 -8
View File
@@ -6,24 +6,22 @@ class SourceArchiveTestCase(unittest.TestCase):
def testFetch(self):
spec = SpecFile('repos/pardus-2007/system/base/curl/pspec.xml')
targetDir = '/tmp/tests'
srcarch = pisi.sourcearchive.SourceArchive(spec.source.archive[0], targetDir)
srcarch = pisi.sourcearchive.SourceArchive(spec.source.archive[0])
self.assert_(not srcarch.fetch())
def testIscached(self):
spec = SpecFile('repos/pardus-2007/system/base/curl/pspec.xml')
targetDir = '/tmp/tests'
srcarch = pisi.sourcearchive.SourceArchive(spec.source.archive[0], targetDir)
srcarch = pisi.sourcearchive.SourceArchive(spec.source.archive[0])
assert srcarch.is_cached()
def testIscached(self):
spec = SpecFile('repos/pardus-2007/system/base/curl/pspec.xml')
targetDir = '/tmp/tests'
srcarch = pisi.sourcearchive.SourceArchive(spec.source.archive[0], targetDir)
self.assert_(not srcarch.unpack())
srcarch = pisi.sourcearchive.SourceArchive(spec.source.archive[0])
self.assert_(not srcarch.unpack(targetDir))
def testUnpack(self):
spec = SpecFile('repos/pardus-2007/system/base/curl/pspec.xml')
targetDir = '/tmp/tests'
srcarch = pisi.sourcearchive.SourceArchive(spec.source.archive[0], targetDir)
srcarch.unpack()
srcarch = pisi.sourcearchive.SourceArchive(spec.source.archive[0])
srcarch.unpack(targetDir)