downloader: search full version in deb-local-binary

Search the full version (include 'epoch') in deb-local-binary,
otherwise, such packages are always missed in repomgr.search_pkg.

Use candidate.architecture of apt_cache get the arch of a package.

Test Plan:

Pass: run "download -b" twice, and no package is reupload in second
time.

Story: 2008846
Task: 44922

Signed-off-by: Yue Tao <yue.tao@windriver.com>

Signed-off-by: hbai <haiqing.bai@windriver.com>
Change-Id: If3bc58242eeac04f38392ad232df05912885b188
This commit is contained in:
hbai 2022-04-19 17:20:32 +08:00
parent c2cc10133c
commit d575c0bbbf

View File

@ -259,22 +259,20 @@ class DebDownloader(BaseDownloader):
sys.exit(1) sys.exit(1)
# strip epoch # strip epoch
pkg_ver = pkg_name_array[1].split(":")[-1] pkg_ver = pkg_name_array[1].split(":")[-1]
# current default arch is 'amd64' try:
pname_arch = '_'.join([pkg_name, pkg_ver, self.arch]) + '.deb' package = self.apt_cache[pkg_name]
pname_all = '_'.join([pkg_name, pkg_ver, 'all']) + '.deb' except Exception as e:
logger.error(str(e))
sys.exit(1)
arch = package.candidate.architecture
pname_arch = '_'.join([pkg_name, pkg_ver, arch]) + '.deb'
self.dl_need.append(pkg_name + '_' + pkg_ver) self.dl_need.append(pkg_name + '_' + pkg_ver)
if self.downloaded and pname_arch in self.downloaded: if self.downloaded and pname_arch in self.downloaded:
logger.debug(''.join([pkg_name, '_', pkg_ver, logger.debug(''.join([pkg_name, '_', pkg_ver,
' has been downloaded, skip'])) ' has been downloaded, skip']))
self.dl_success.append(pkg_name + '_' + pkg_ver) self.dl_success.append(pkg_name + '_' + pkg_ver)
self.need_upload.append(pname_arch) self.need_upload.append([pname_arch, pkg_name_array[1]])
else:
if self.downloaded and pname_all in self.downloaded:
logger.debug(''.join([pkg_name, '_', pkg_ver,
' has been downloaded, skip']))
self.need_upload.append(pname_all)
self.dl_success.append(pkg_name + '_' + pkg_ver)
else: else:
# Tests show that the 'epoch' should be taken when # Tests show that the 'epoch' should be taken when
# fetch the package with 'apt' module, there is not 'epoch' # fetch the package with 'apt' module, there is not 'epoch'
@ -284,13 +282,15 @@ class DebDownloader(BaseDownloader):
previously_uploaded = self.repomgr.list_pkgs(REPO_BIN) previously_uploaded = self.repomgr.list_pkgs(REPO_BIN)
logger.info(' '.join(['previously_uploaded', str(previously_uploaded)])) logger.info(' '.join(['previously_uploaded', str(previously_uploaded)]))
for deb in self.need_upload: for debs in self.need_upload:
deb = debs[0]
fver = debs[1]
if previously_uploaded and deb in previously_uploaded: if previously_uploaded and deb in previously_uploaded:
logger.info(' '.join([os.path.join(stx_bin_mirror, deb), logger.info(' '.join([os.path.join(stx_bin_mirror, deb),
'has already been uploaded to', REPO_BIN, ', skip'])) 'has already been uploaded to', REPO_BIN, ', skip']))
continue continue
name, ver, arch = deb.split('_') name, ver, arch = deb.split('_')
if not self.repomgr.search_pkg(REPO_BIN, name, ver, True): if not self.repomgr.search_pkg(REPO_BIN, name, fver, True):
if name and ver: if name and ver:
logger.debug('Package %s-%s not found in %s', name, ver, REPO_BIN) logger.debug('Package %s-%s not found in %s', name, ver, REPO_BIN)
if self.repomgr.upload_pkg(REPO_BIN, os.path.join(stx_bin_mirror, deb)): if self.repomgr.upload_pkg(REPO_BIN, os.path.join(stx_bin_mirror, deb)):