@ -1021,9 +1021,7 @@ bool pkgAcquire::Item::IsRedirectionLoop(std::string const &NewURI) /*{{{*/
return false ;
}
/*}}}*/
/*}}}*/
int pkgAcquire : : Item : : Priority ( ) /*{{{*/
int pkgAcquire : : Item : : Priority ( ) /*{{{*/
{
// Stage 1: Meta indices and diff indices
// - those need to be fetched first to have progress reporting working
@ -2039,7 +2037,7 @@ void pkgAcqDiffIndex::QueueOnIMSHit() const /*{{{*/
{
// list cleanup needs to know that this file as well as the already
// present index is ours, so we create an empty diff to save it for us
new pkgAcqIndexDiffs ( Owner , TransactionManager , Target ) ;
new pkgAcqIndexDiffs ( Owner , TransactionManager , Target , UsedMirror , Target . URI ) ;
}
/*}}}*/
static bool RemoveFileForBootstrapLinking ( bool const Debug , std : : string const & For , std : : string const & Boot ) /* { { { */
@ -2415,14 +2413,26 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/
}
}
std : : string indexURI = Desc . URI ;
auto const byhashidx = indexURI . find ( " /by-hash/ " ) ;
if ( byhashidx ! = std : : string : : npos )
indexURI = indexURI . substr ( 0 , byhashidx - strlen ( " .diff " ) ) ;
else
{
auto end = indexURI . length ( ) - strlen ( " .diff/Index " ) ;
if ( CurrentCompressionExtension ! = " uncompressed " )
end - = ( 1 + CurrentCompressionExtension . length ( ) ) ;
indexURI = indexURI . substr ( 0 , end ) ;
}
if ( pdiff_merge = = false )
new pkgAcqIndexDiffs ( Owner , TransactionManager , Target , available_patches ) ;
new pkgAcqIndexDiffs ( Owner , TransactionManager , Target , UsedMirror , indexURI , available_patches ) ;
else
{
diffs = new std : : vector < pkgAcqIndexMergeDiffs * > ( available_patches . size ( ) ) ;
for ( size_t i = 0 ; i < available_patches . size ( ) ; + + i )
( * diffs ) [ i ] = new pkgAcqIndexMergeDiffs ( Owner , TransactionManager ,
Target ,
Target , UsedMirror , indexURI ,
available_patches [ i ] ,
diffs ) ;
}
@ -2492,8 +2502,9 @@ pkgAcqDiffIndex::~pkgAcqDiffIndex()
pkgAcqIndexDiffs : : pkgAcqIndexDiffs ( pkgAcquire * const Owner ,
pkgAcqMetaClearSig * const TransactionManager ,
IndexTarget const & Target ,
std : : string const & indexUsedMirror , std : : string const & indexURI ,
vector < DiffInfo > const & diffs )
: pkgAcqBaseIndex ( Owner , TransactionManager , Target ) , d ( NULL ) ,
: pkgAcqBaseIndex ( Owner , TransactionManager , Target ) , indexURI ( indexURI ) ,
available_patches ( diffs )
{
DestFile = GetKeepCompressedFileName ( GetPartialFileNameFromURI ( Target . URI ) , Target ) ;
@ -2504,6 +2515,12 @@ pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire * const Owner,
Description = Target . Description ;
Desc . ShortDesc = Target . ShortDesc ;
UsedMirror = indexUsedMirror ;
if ( UsedMirror = = " DIRECT " )
UsedMirror . clear ( ) ;
else if ( UsedMirror . empty ( ) = = false & & Description . find ( " " ) ! = string : : npos )
Description . replace ( 0 , Description . find ( " " ) , UsedMirror ) ;
if ( available_patches . empty ( ) = = true )
{
// we are done (yeah!), check hashes against the final file
@ -2618,7 +2635,7 @@ bool pkgAcqIndexDiffs::QueueNextDiff() /*{{{*/
}
// queue the right diff
Desc . URI = Target . URI + " .diff/ " + available_patches [ 0 ] . file + " .gz " ;
Desc . URI = index URI + " .diff/ " + available_patches [ 0 ] . file + " .gz " ;
Desc . Description = Description + " " + available_patches [ 0 ] . file + string ( " .pdiff " ) ;
DestFile = GetKeepCompressedFileName ( GetPartialFileNameFromURI ( Target . URI + " .diff/ " + available_patches [ 0 ] . file ) , Target ) ;
@ -2671,7 +2688,7 @@ void pkgAcqIndexDiffs::Done(string const &Message, HashStringList const &Hashes,
// see if there is more to download
if ( available_patches . empty ( ) = = false )
{
new pkgAcqIndexDiffs ( Owner , TransactionManager , Target , available_patches ) ;
new pkgAcqIndexDiffs ( Owner , TransactionManager , Target , UsedMirror , indexURI , available_patches ) ;
Finish ( ) ;
} else {
DestFile = PatchedFile ;
@ -2700,19 +2717,26 @@ pkgAcqIndexDiffs::~pkgAcqIndexDiffs() {}
pkgAcqIndexMergeDiffs : : pkgAcqIndexMergeDiffs ( pkgAcquire * const Owner ,
pkgAcqMetaClearSig * const TransactionManager ,
IndexTarget const & Target ,
std : : string const & indexUsedMirror , std : : string const & indexURI ,
DiffInfo const & patch ,
std : : vector < pkgAcqIndexMergeDiffs * > const * const allPatches )
: pkgAcqBaseIndex ( Owner , TransactionManager , Target ) , d ( NULL ) ,
patch ( patch ) , allPatches ( allPatches ) , State ( StateFetchDiff )
: pkgAcqBaseIndex ( Owner , TransactionManager , Target ) , indexURI ( indexURI ) ,
patch ( patch ) , allPatches ( allPatches ) , State ( StateFetchDiff )
{
Debug = _config - > FindB ( " Debug::pkgAcquire::Diffs " , false ) ;
Desc . Owner = this ;
Description = Target . Description ;
UsedMirror = indexUsedMirror ;
if ( UsedMirror = = " DIRECT " )
UsedMirror . clear ( ) ;
else if ( UsedMirror . empty ( ) = = false & & Description . find ( " " ) ! = string : : npos )
Description . replace ( 0 , Description . find ( " " ) , UsedMirror ) ;
Desc . Owner = this ;
Desc . ShortDesc = Target . ShortDesc ;
Desc . URI = Target . URI + " .diff/ " + patch . file + " .gz " ;
Desc . URI = index URI + " .diff/ " + patch . file + " .gz " ;
Desc . Description = Description + " " + patch . file + " .pdiff " ;
DestFile = GetPartialFileNameFromURI ( Desc . URI ) ;
DestFile = GetPartialFileNameFromURI ( Target . URI + " .diff/ " + patch . file + " .gz " ) ;
if ( Debug )
std : : clog < < " pkgAcqIndexMergeDiffs: " < < Desc . URI < < std : : endl ;