Browse Source

ensure clean works

tags/debian/1.0.4
Michael Vogt 7 years ago
parent
commit
53ba4e2c2d
4 changed files with 42 additions and 10 deletions
  1. +15
    -5
      ftparchive/apt-ftparchive.cc
  2. +14
    -5
      ftparchive/cachedb.cc
  3. +7
    -0
      test/integration/test-apt-ftparchive-cachedb
  4. +6
    -0
      test/integration/test-apt-ftparchive-src-cachedb

+ 15
- 5
ftparchive/apt-ftparchive.cc View File

@@ -957,23 +957,33 @@ static bool Clean(CommandLine &CmdL)

// Sort by cache DB to improve IO locality.
stable_sort(PkgList.begin(),PkgList.end(),PackageMap::DBCompare());
stable_sort(PkgList.begin(),PkgList.end(),PackageMap::SrcDBCompare());

string CacheDir = Setup.FindDir("Dir::CacheDir");
for (vector<PackageMap>::iterator I = PkgList.begin(); I != PkgList.end(); )
{
c0out << I->BinCacheDB << endl;
if(I->BinCacheDB != "")
c0out << I->BinCacheDB << endl;
if(I->SrcCacheDB != "")
c0out << I->SrcCacheDB << endl;
CacheDB DB(flCombine(CacheDir,I->BinCacheDB));
CacheDB DB_SRC(flCombine(CacheDir,I->SrcCacheDB));
if (DB.Clean() == false)
_error->DumpErrors();
if (DB_SRC.Clean() == false)
_error->DumpErrors();
string CacheDB = I->BinCacheDB;
for (; I != PkgList.end() && I->BinCacheDB == CacheDB; ++I)
;
string SrcCacheDB = I->SrcCacheDB;
while(I != PkgList.end() &&
I->BinCacheDB == CacheDB &&
I->SrcCacheDB == SrcCacheDB)
++I;

}

// FIXME: clean for the SourcesDB
return true;
}
/*}}}*/


+ 14
- 5
ftparchive/cachedb.cc View File

@@ -264,10 +264,11 @@ bool CacheDB::LoadSource()
// Lookup the control information
InitQuery("cs");
if (Get() == true && Dsc.TakeDsc(Data.data, Data.size) == true)
{
return true;
}
CurStat.Flags &= ~FlSource;
}
if (OpenFile() == false)
return false;

@@ -551,16 +552,24 @@ bool CacheDB::Clean()
{
if (stringcmp(Colon + 1, (char *)Key.data+Key.size,"st") == 0 ||
stringcmp(Colon + 1, (char *)Key.data+Key.size,"cl") == 0 ||
stringcmp(Colon + 1, (char *)Key.data+Key.size,"cs") == 0 ||
stringcmp(Colon + 1, (char *)Key.data+Key.size,"cn") == 0)
{
if (FileExists(std::string((const char *)Key.data,Colon)) == true)
continue;
std::string FileName = std::string((const char *)Key.data,Colon);
if (FileExists(FileName) == true) {
continue;
}
}
}
Cursor->c_del(Cursor,0);
}
Dbp->compact(Dbp, NULL, NULL, NULL, NULL, DB_FREE_SPACE, NULL);
int res = Dbp->compact(Dbp, NULL, NULL, NULL, NULL, DB_FREE_SPACE, NULL);
if (res < 0)
_error->Warning("compact failed with result %i", res);

if(_config->FindB("Debug::APT::FTPArchive::Clean", false) == true)
Dbp->stat_print(Dbp, 0);


return true;
}


+ 7
- 0
test/integration/test-apt-ftparchive-cachedb View File

@@ -91,3 +91,10 @@ ensure_correct_contents_file
testequal " Misses in Cache: 0
dists/test/Contents-i386: New 402 B Misses in Cache: 0" grep Misses stats-out.txt

# and clean
rm -rf aptarchive/pool/main/*
testequal "packages-main-i386.db" aptftparchive clean ftparchive.conf
aptftparchive clean ftparchive.conf -o Debug::APT::FTPArchive::Clean=1 > clean-out.txt 2>&1
testequal "0 Number of unique keys in the tree" grep unique clean-out.txt
testequal "packages-main-i386.db" grep packages-main-i386.db clean-out.txt


+ 6
- 0
test/integration/test-apt-ftparchive-src-cachedb View File

@@ -159,4 +159,10 @@ dd if=/dev/zero of="aptarchive/pool/invalid/toobig_1.0.dsc" bs=1k count=129 2>/d
testequal "
E: DSC file 'aptarchive/pool/invalid/toobig_1.0.dsc' is too large!" aptftparchive sources aptarchive/pool/invalid

# ensure clean works
rm -f aptarchive/pool/main/*
aptftparchive clean apt-ftparchive.conf -o Debug::APT::FTPArchive::Clean=1 > clean-out.txt 2>&1
testequal "0 Number of unique keys in the tree" grep unique clean-out.txt
testequal "sources-main.db" grep sources-main.db clean-out.txt



Loading…
Cancel
Save