reposync: add TDNFDownloadPackageToTree() function

This commit is contained in:
Oliver Kurth 2021-05-12 10:16:21 -07:00
parent 9089cce071
commit 3edb3e0f3f
3 changed files with 73 additions and 10 deletions

View File

@ -1125,7 +1125,7 @@ TDNFRepoSync(
} }
else else
{ {
dwError = TDNFAllocateString(pReposyncArgs->pszDownloadPath, &pszRootPath); dwError = TDNFNormalizePath(pReposyncArgs->pszDownloadPath, &pszRootPath);
BAIL_ON_TDNF_ERROR(dwError); BAIL_ON_TDNF_ERROR(dwError);
} }
@ -1154,7 +1154,7 @@ TDNFRepoSync(
dwError = TDNFUtilsMakeDir(pszDir); dwError = TDNFUtilsMakeDir(pszDir);
BAIL_ON_TDNF_ERROR(dwError); BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFDownloadPackageToDirectory(pTdnf, dwError = TDNFDownloadPackageToTree(pTdnf,
pPkgInfo->pszLocation, pPkgInfo->pszName, pPkgInfo->pszLocation, pPkgInfo->pszName,
pPkgInfo->pszRepoName, pszDir, pPkgInfo->pszRepoName, pszDir,
&pszFilePath); &pszFilePath);

View File

@ -291,6 +291,16 @@ TDNFDownloadPackageToCache(
char** ppszFilePath char** ppszFilePath
); );
uint32_t
TDNFDownloadPackageToTree(
PTDNF pTdnf,
const char* pszPackageLocation,
const char* pszPkgName,
const char* pszRepoName,
char* pszNormalRpmCacheDir,
char** ppszFilePath
);
uint32_t uint32_t
TDNFDownloadPackageToDirectory( TDNFDownloadPackageToDirectory(
PTDNF pTdnf, PTDNF pTdnf,

View File

@ -992,11 +992,6 @@ TDNFDownloadPackageToCache(
uint32_t dwError = 0; uint32_t dwError = 0;
char* pszRpmCacheDir = NULL; char* pszRpmCacheDir = NULL;
char* pszNormalRpmCacheDir = NULL; char* pszNormalRpmCacheDir = NULL;
char* pszFilePath = NULL;
char* pszNormalPath = NULL;
char* pszFilePathCopy = NULL;
char* pszDownloadCacheDir = NULL;
char* pszRemotePath = NULL;
if(!pTdnf || if(!pTdnf ||
IsNullOrEmptyString(pszPackageLocation) || IsNullOrEmptyString(pszPackageLocation) ||
@ -1020,6 +1015,58 @@ TDNFDownloadPackageToCache(
&pszNormalRpmCacheDir); &pszNormalRpmCacheDir);
BAIL_ON_TDNF_ERROR(dwError); BAIL_ON_TDNF_ERROR(dwError);
dwError = TDNFDownloadPackageToTree(pTdnf,
pszPackageLocation,
pszPkgName,
pszRepoName,
pszNormalRpmCacheDir,
ppszFilePath);
BAIL_ON_TDNF_ERROR(dwError);
cleanup:
TDNF_SAFE_FREE_MEMORY(pszNormalRpmCacheDir);
TDNF_SAFE_FREE_MEMORY(pszRpmCacheDir);
return dwError;
error:
goto cleanup;
}
/*
* TDNFDownloadPackageToTree()
*
* Download a package while preserving the directory path. For example,
* if pszPackageLocation is "RPMS/x86_64/foo-1.2-3.rpm, the destination will
* be downloaded under the destination directory in RPMS/x86_64/foo-1.2-3.rpm
* (so 'RPMS/x86_64/' will be preserved).
*/
uint32_t
TDNFDownloadPackageToTree(
PTDNF pTdnf,
const char* pszPackageLocation,
const char* pszPkgName,
const char* pszRepoName,
char* pszNormalRpmCacheDir,
char** ppszFilePath
)
{
uint32_t dwError = 0;
char* pszFilePath = NULL;
char* pszNormalPath = NULL;
char* pszFilePathCopy = NULL;
char* pszDownloadCacheDir = NULL;
char* pszRemotePath = NULL;
if(!pTdnf ||
IsNullOrEmptyString(pszPackageLocation) ||
IsNullOrEmptyString(pszPkgName) ||
IsNullOrEmptyString(pszRepoName) ||
IsNullOrEmptyString(pszNormalRpmCacheDir) ||
!ppszFilePath)
{
dwError = ERROR_TDNF_INVALID_PARAMETER;
BAIL_ON_TDNF_ERROR(dwError);
}
dwError = TDNFPathFromUri(pszPackageLocation, &pszRemotePath); dwError = TDNFPathFromUri(pszPackageLocation, &pszRemotePath);
if (dwError == ERROR_TDNF_URL_INVALID) if (dwError == ERROR_TDNF_URL_INVALID)
{ {
@ -1030,7 +1077,7 @@ TDNFDownloadPackageToCache(
dwError = TDNFAllocateStringPrintf( dwError = TDNFAllocateStringPrintf(
&pszFilePath, &pszFilePath,
"%s/%s", "%s/%s",
pszRpmCacheDir, pszNormalRpmCacheDir,
pszRemotePath); pszRemotePath);
BAIL_ON_TDNF_ERROR(dwError); BAIL_ON_TDNF_ERROR(dwError);
@ -1085,8 +1132,6 @@ TDNFDownloadPackageToCache(
cleanup: cleanup:
TDNF_SAFE_FREE_MEMORY(pszFilePath); TDNF_SAFE_FREE_MEMORY(pszFilePath);
TDNF_SAFE_FREE_MEMORY(pszFilePathCopy); TDNF_SAFE_FREE_MEMORY(pszFilePathCopy);
TDNF_SAFE_FREE_MEMORY(pszRpmCacheDir);
TDNF_SAFE_FREE_MEMORY(pszNormalRpmCacheDir);
TDNF_SAFE_FREE_MEMORY(pszRemotePath); TDNF_SAFE_FREE_MEMORY(pszRemotePath);
return dwError; return dwError;
@ -1096,6 +1141,14 @@ error:
} }
/*
* TDNFDownloadPackageToDirectory()
*
* Download a package withou preserving the directory path. For example,
* if pszPackageLocation is "RPMS/x86_64/foo-1.2-3.rpm, the destination will
* be downloaded under the destination directory (pszDirectory) as foo-1.2-3.rpm
* (so RPMS/x86_64/ will be stripped).
*/
uint32_t uint32_t
TDNFDownloadPackageToDirectory( TDNFDownloadPackageToDirectory(