Beispiel #1
0
    def _fetch_cpio(self, defer_error=False):
        """Fetches bdeps from the api in a cpio archive.

        It tries to fetch all bdeps from the self._cpio_todo dict.
        A BuildDependencyFetchError is raised if a bdep cannot be
        fetched.

        Keyword arguments:
        defer_error -- if True it does not fail immediately if a bdep is
                       not found and tries to fetch the remaining bdeps
                       (default: False)

        """
        errors = ''
        missing_bdeps = []
        for prpap in sorted(self._cpio_todo.keys()):
            project, repo, arch, package = prpap.split('/', 4)
            br = BuildResult(project, package, repo, arch)
            binary = []
            # maps a cpio entry name to the corresponding bdep
            cpio_bdep = {}
            bdeps = self._cpio_todo[prpap]
            for bdep in bdeps:
                if package == '_repository':
                    name = bdep.get('name')
                    binary.append(name)
                    cpio_bdep[name + '.' + bdep.get('binarytype')] = bdep
                else:
                    binary.append(bdep.get('filename'))
                    cpio_bdep[bdep.get('filename')] = bdep
                self._notifier.pre_fetch(bdep, self.find_fetch_result(bdep))
            archive = br.binarylist(view='cpio', binary=binary)
            for archive_file in archive:
                if archive_file.hdr.name == '.errors':
                    errors += "\n" + archive_file.read().strip()
                    continue
                bdep = cpio_bdep[archive_file.hdr.name]
                self._cmgr.write(bdep, archive_file)
            # check if we got all files
            for bdep in bdeps:
                exists = self._cmgr.exists(bdep)
                fr = self.find_fetch_result(bdep)
                if fr is None:
                    # fr might be None if fetch was invoked with
                    # use_mirrors=False
                    fr = BuildDependencyFetcher.FetchResult(bdep, exists, [],
                                                            False)
                    self.fetch_results.append(fr)
                if exists:
                    self._notifier.post_fetch(bdep, fr)
                else:
                    missing_bdeps.append(fr)
            if missing_bdeps and not defer_error:
                break
        if missing_bdeps:
            raise BuildDependencyFetchError(missing_bdeps, errors.strip())
Beispiel #2
0
    def _fetch_cpio(self, defer_error=False):
        """Fetches bdeps from the api in a cpio archive.

        It tries to fetch all bdeps from the self._cpio_todo dict.
        A BuildDependencyFetchError is raised if a bdep cannot be
        fetched.

        Keyword arguments:
        defer_error -- if True it does not fail immediately if a bdep is
                       not found and tries to fetch the remaining bdeps
                       (default: False)

        """
        errors = ''
        missing_bdeps = []
        for prpap in sorted(self._cpio_todo.keys()):
            project, repo, arch, package = prpap.split('/', 4)
            br = BuildResult(project, package, repo, arch)
            binary = []
            # maps a cpio entry name to the corresponding bdep
            cpio_bdep = {}
            bdeps = self._cpio_todo[prpap]
            for bdep in bdeps:
                if package == '_repository':
                    name = bdep.get('name')
                    binary.append(name)
                    cpio_bdep[name + '.' + bdep.get('binarytype')] = bdep
                else:
                    binary.append(bdep.get('filename'))
                    cpio_bdep[bdep.get('filename')] = bdep
                self._notifier.pre_fetch(bdep, self.find_fetch_result(bdep))
            archive = br.binarylist(view='cpio', binary=binary)
            for archive_file in archive:
                if archive_file.hdr.name == '.errors':
                    errors += "\n" + archive_file.read().strip()
                    continue
                bdep = cpio_bdep[archive_file.hdr.name]
                self._cmgr.write(bdep, archive_file)
            # check if we got all files
            for bdep in bdeps:
                exists = self._cmgr.exists(bdep)
                fr = self.find_fetch_result(bdep)
                if fr is None:
                    # fr might be None if fetch was invoked with
                    # use_mirrors=False
                    fr = BuildDependencyFetcher.FetchResult(
                        bdep, exists, [], False)
                    self.fetch_results.append(fr)
                if exists:
                    self._notifier.post_fetch(bdep, fr)
                else:
                    missing_bdeps.append(fr)
            if missing_bdeps and not defer_error:
                break
        if missing_bdeps:
            raise BuildDependencyFetchError(missing_bdeps, errors.strip())
Beispiel #3
0
 def test_binarylist5(self):
     """test the cpio view (only some binaries)"""
     br = BuildResult('test', repository='repo', arch='x86_64')
     archive = br.binarylist(view='cpio', binary=['foo', 'bar'])
     it = iter(archive)
     archive_file = it.next()
     self.assertEqual(archive_file.read(), 'foo\n')
     archive_file = it.next()
     self.assertEqual(archive_file.read(), 'bar\n')
     self.assertRaises(StopIteration, it.next)
Beispiel #4
0
 def test_binarylist5(self):
     """test the cpio view (only some binaries)"""
     br = BuildResult('test', repository='repo', arch='x86_64')
     archive = br.binarylist(view='cpio', binary=['foo', 'bar'])
     it = iter(archive)
     archive_file = next(it)
     self.assertEqual(archive_file.read(), 'foo\n')
     archive_file = next(it)
     self.assertEqual(archive_file.read(), 'bar\n')
     self.assertRaises(StopIteration, it.__next__)
Beispiel #5
0
 def test_binarylist4(self):
     """test the cpio view (complete repo)"""
     br = BuildResult('test', repository='repo', arch='x86_64')
     archive = br.binarylist(view='cpio')
     it = iter(archive)
     archive_file = it.next()
     self.assertEqual(archive_file.read(), 'foo\n')
     archive_file = it.next()
     self.assertEqual(archive_file.read(), 'bar\n')
     archive_file = it.next()
     self.assertEqual(archive_file.read(), 'glibc\n')
     self.assertRaises(StopIteration, it.next)
Beispiel #6
0
 def test_binarylist4(self):
     """test the cpio view (complete repo)"""
     br = BuildResult('test', repository='repo', arch='x86_64')
     archive = br.binarylist(view='cpio')
     it = iter(archive)
     archive_file = next(it)
     self.assertEqual(archive_file.read(), 'foo\n')
     archive_file = next(it)
     self.assertEqual(archive_file.read(), 'bar\n')
     archive_file = next(it)
     self.assertEqual(archive_file.read(), 'glibc\n')
     self.assertRaises(StopIteration, it.__next__)
Beispiel #7
0
 def test_binarylist1(self):
     """list binaries for project repo arch"""
     br = BuildResult('test', repository='openSUSE_Factory', arch='i586')
     blist = br.binarylist()
     self.assertTrue(len(blist.binary[:]) == 3)
     self.assertEqual(blist.binary[0].get('filename'), 'osc.rpm')
     self.assertEqual(blist.binary[0].get('size'), '1294')
     self.assertEqual(blist.binary[0].get('mtime'), '1305804056')
     self.assertEqual(blist.binary[1].get('filename'), 'glibc.rpm')
     self.assertEqual(blist.binary[1].get('size'), '12244')
     self.assertEqual(blist.binary[1].get('mtime'), '1355804056')
     self.assertEqual(blist.binary[2].get('filename'), 'glibc-devel.rpm')
     self.assertEqual(blist.binary[2].get('size'), '122')
     self.assertEqual(blist.binary[2].get('mtime'), '1355804055')
Beispiel #8
0
 def test_binarylist1(self):
     """list binaries for project repo arch"""
     br = BuildResult('test', repository='openSUSE_Factory', arch='i586')
     blist = br.binarylist()
     self.assertTrue(len(blist.binary[:]) == 3)
     self.assertEqual(blist.binary[0].get('filename'), 'osc.rpm')
     self.assertEqual(blist.binary[0].get('size'), '1294')
     self.assertEqual(blist.binary[0].get('mtime'), '1305804056')
     self.assertEqual(blist.binary[1].get('filename'), 'glibc.rpm')
     self.assertEqual(blist.binary[1].get('size'), '12244')
     self.assertEqual(blist.binary[1].get('mtime'), '1355804056')
     self.assertEqual(blist.binary[2].get('filename'), 'glibc-devel.rpm')
     self.assertEqual(blist.binary[2].get('size'), '122')
     self.assertEqual(blist.binary[2].get('mtime'), '1355804055')
Beispiel #9
0
 def test_binarylist2(self):
     """list binaries for project repo arch and get each binary file"""
     br = BuildResult('test', repository='repo', arch='i586')
     blist = br.binarylist()
     self.assertTrue(len(blist.binary[:]) == 3)
     self.assertEqual(blist.binary[0].get('filename'), 'osc.rpm')
     self.assertEqual(blist.binary[0].get('size'), '1294')
     self.assertEqual(blist.binary[0].get('mtime'), '1305804056')
     self.assertEqual(blist.binary[1].get('filename'), 'glibc.rpm')
     self.assertEqual(blist.binary[1].get('size'), '12244')
     self.assertEqual(blist.binary[1].get('mtime'), '1355804056')
     self.assertEqual(blist.binary[2].get('filename'), 'glibc-devel.rpm')
     self.assertEqual(blist.binary[2].get('size'), '122')
     self.assertEqual(blist.binary[2].get('mtime'), '1355804055')
     bfile = blist.binary[0].file(a='b', c='d')
     self.assertEqual(bfile.read(), 'osc.rpm')
     bfile = blist.binary[1].file()
     self.assertEqual(bfile.read(), 'glibc.rpm')
     bfile = blist.binary[2].file()
     self.assertEqual(bfile.read(), 'glibc-devel.rpm')
Beispiel #10
0
 def test_binarylist2(self):
     """list binaries for project repo arch and get each binary file"""
     br = BuildResult('test', repository='repo', arch='i586')
     blist = br.binarylist()
     self.assertTrue(len(blist.binary[:]) == 3)
     self.assertEqual(blist.binary[0].get('filename'), 'osc.rpm')
     self.assertEqual(blist.binary[0].get('size'), '1294')
     self.assertEqual(blist.binary[0].get('mtime'), '1305804056')
     self.assertEqual(blist.binary[1].get('filename'), 'glibc.rpm')
     self.assertEqual(blist.binary[1].get('size'), '12244')
     self.assertEqual(blist.binary[1].get('mtime'), '1355804056')
     self.assertEqual(blist.binary[2].get('filename'), 'glibc-devel.rpm')
     self.assertEqual(blist.binary[2].get('size'), '122')
     self.assertEqual(blist.binary[2].get('mtime'), '1355804055')
     bfile = blist.binary[0].file(a='b', c='d')
     self.assertEqual(bfile.read(), 'osc.rpm')
     bfile = blist.binary[1].file()
     self.assertEqual(bfile.read(), 'glibc.rpm')
     bfile = blist.binary[2].file()
     self.assertEqual(bfile.read(), 'glibc-devel.rpm')