Merge pull request #119 from keerthanakalyan/topic/keerthanak/fix-tdnf-clean-rpms

tdnf clean all command updates
This commit is contained in:
Priyesh 2020-03-20 10:16:00 -07:00 committed by GitHub
commit 2ddda29bf1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 168 additions and 0 deletions

View File

@ -430,6 +430,12 @@ TDNFClean(
dwError = TDNFRemoveSolvCache(pTdnf, *ppszReposUsed); dwError = TDNFRemoveSolvCache(pTdnf, *ppszReposUsed);
BAIL_ON_TDNF_ERROR(dwError); BAIL_ON_TDNF_ERROR(dwError);
if (!pTdnf->pConf->nKeepCache)
{
dwError = TDNFRemoveRpmCache(pTdnf, *ppszReposUsed);
BAIL_ON_TDNF_ERROR(dwError);
}
++ppszReposUsed; ++ppszReposUsed;
} }
} }

View File

@ -127,6 +127,12 @@ TDNFRepoRemoveCache(
const char* pszRepoId const char* pszRepoId
); );
uint32_t
TDNFRemoveRpmCache(
PTDNF pTdnf,
const char* pszRepoId
);
uint32_t uint32_t
TDNFRemoveLastRefreshMarker( TDNFRemoveLastRefreshMarker(
PTDNF pTdnf, PTDNF pTdnf,

View File

@ -182,6 +182,12 @@ TDNFRepoGetRpmCacheDir(
if(access(pszRpmCacheDir, F_OK)) if(access(pszRpmCacheDir, F_OK))
{ {
dwError = errno; dwError = errno;
if (dwError == ENOENT)
{
dwError = 0;
TDNF_SAFE_FREE_MEMORY(pszRpmCacheDir);
pszRpmCacheDir = NULL;
}
BAIL_ON_TDNF_SYSTEM_ERROR(dwError); BAIL_ON_TDNF_SYSTEM_ERROR(dwError);
} }
@ -276,6 +282,156 @@ error:
goto cleanup; goto cleanup;
} }
uint32_t
TDNFRemoveRpmCache(
PTDNF pTdnf,
const char* pszRepoId
)
{
uint32_t dwError = 0;
char* pszRpmCacheDir = NULL;
char *pszRpmCacheArchDir = NULL;
char *pszRpmCacheNoarchDir = NULL;
char* pszFilePath = NULL;
DIR *pDir = NULL;
struct dirent *pEnt = NULL;
if (!pTdnf || !pTdnf->pConf || IsNullOrEmptyString(pszRepoId))
{
dwError = ERROR_TDNF_INVALID_PARAMETER;
BAIL_ON_TDNF_ERROR(dwError);
}
dwError = TDNFRepoGetRpmCacheDir(pTdnf, pszRepoId, &pszRpmCacheDir);
BAIL_ON_TDNF_ERROR(dwError);
if (!IsNullOrEmptyString(pszRpmCacheDir))
{
dwError = TDNFAllocateStringPrintf(
&pszRpmCacheArchDir,
"%s/%s",
pszRpmCacheDir,
pTdnf->pConf->pszVarBaseArch);
BAIL_ON_TDNF_ERROR(dwError);
pDir = opendir(pszRpmCacheArchDir);
if (pDir == NULL)
{
if (errno == ENOENT)
{
goto cleanup;
}
dwError = errno;
BAIL_ON_TDNF_SYSTEM_ERROR(dwError);
}
while ((pEnt = readdir (pDir)) != NULL )
{
if (!strcmp(pEnt->d_name, ".") || !strcmp(pEnt->d_name, ".."))
{
continue;
}
dwError = TDNFAllocateStringPrintf(
&pszFilePath,
"%s/%s",
pszRpmCacheArchDir,
pEnt->d_name);
BAIL_ON_TDNF_ERROR(dwError);
if(pszFilePath)
{
if(unlink(pszFilePath))
{
dwError = errno;
BAIL_ON_TDNF_SYSTEM_ERROR(dwError);
}
TDNF_SAFE_FREE_MEMORY(pszFilePath);
pszFilePath = NULL;
}
else
{
dwError = ERROR_TDNF_INVALID_PARAMETER;
BAIL_ON_TDNF_ERROR(dwError);
}
}
if(rmdir(pszRpmCacheArchDir))
{
dwError = errno;
BAIL_ON_TDNF_SYSTEM_ERROR(dwError);
}
dwError = TDNFAllocateStringPrintf(
&pszRpmCacheNoarchDir,
"%s/%s",
pszRpmCacheDir,
"noarch");
BAIL_ON_TDNF_ERROR(dwError);
pDir = opendir(pszRpmCacheNoarchDir);
if(pDir == NULL)
{
if (errno == ENOENT)
{
goto cleanup;
}
dwError = errno;
BAIL_ON_TDNF_SYSTEM_ERROR(dwError);
}
while ((pEnt = readdir (pDir)) != NULL )
{
if (!strcmp(pEnt->d_name, ".") || !strcmp(pEnt->d_name, ".."))
{
continue;
}
dwError = TDNFAllocateStringPrintf(
&pszFilePath,
"%s/%s",
pszRpmCacheNoarchDir,
pEnt->d_name);
BAIL_ON_TDNF_ERROR(dwError);
if(pszFilePath)
{
if(unlink(pszFilePath))
{
dwError = errno;
BAIL_ON_TDNF_SYSTEM_ERROR(dwError);
}
TDNF_SAFE_FREE_MEMORY(pszFilePath);
pszFilePath = NULL;
}
else
{
dwError = ERROR_TDNF_INVALID_PARAMETER;
BAIL_ON_TDNF_ERROR(dwError);
}
}
if(rmdir(pszRpmCacheNoarchDir))
{
dwError = errno;
BAIL_ON_TDNF_SYSTEM_ERROR(dwError);
}
}
cleanup:
if (pDir)
{
closedir(pDir);
}
if (!IsNullOrEmptyString(pszRpmCacheDir))
{
rmdir(pszRpmCacheDir);
}
TDNF_SAFE_FREE_MEMORY(pszFilePath);
TDNF_SAFE_FREE_MEMORY(pszRpmCacheDir);
TDNF_SAFE_FREE_MEMORY(pszRpmCacheArchDir);
TDNF_SAFE_FREE_MEMORY(pszRpmCacheNoarchDir);
return dwError;
error:
goto cleanup;
}
uint32_t uint32_t
TDNFRemoveTmpRepodata( TDNFRemoveTmpRepodata(
const char* pszTmpRepodataDir, const char* pszTmpRepodataDir,