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())
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())
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)
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__)
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)
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__)
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')
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')