|
@@ -204,19 +204,22 @@ bool pkgAcquire::Worker::RunMessages()
|
|
|
return _error->Error("Invalid message from method %s: %s",Access.c_str(),Message.c_str());
|
|
return _error->Error("Invalid message from method %s: %s",Access.c_str(),Message.c_str());
|
|
|
|
|
|
|
|
string URI = LookupTag(Message,"URI");
|
|
string URI = LookupTag(Message,"URI");
|
|
|
- pkgAcquire::Queue::QItem *Itm = 0;
|
|
|
|
|
|
|
+ pkgAcquire::Queue::QItem *Itm = NULL;
|
|
|
if (URI.empty() == false)
|
|
if (URI.empty() == false)
|
|
|
Itm = OwnerQ->FindItem(URI,this);
|
|
Itm = OwnerQ->FindItem(URI,this);
|
|
|
|
|
|
|
|
- // update used mirror
|
|
|
|
|
- string UsedMirror = LookupTag(Message,"UsedMirror", "");
|
|
|
|
|
- if (!UsedMirror.empty() &&
|
|
|
|
|
- Itm &&
|
|
|
|
|
- Itm->Description.find(" ") != string::npos)
|
|
|
|
|
|
|
+ if (Itm != NULL)
|
|
|
{
|
|
{
|
|
|
- Itm->Description.replace(0, Itm->Description.find(" "), UsedMirror);
|
|
|
|
|
- // FIXME: will we need this as well?
|
|
|
|
|
- //Itm->ShortDesc = UsedMirror;
|
|
|
|
|
|
|
+ // update used mirror
|
|
|
|
|
+ string UsedMirror = LookupTag(Message,"UsedMirror", "");
|
|
|
|
|
+ if (UsedMirror.empty() == false)
|
|
|
|
|
+ {
|
|
|
|
|
+ for (pkgAcquire::Queue::QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
|
|
|
|
|
+ (*O)->UsedMirror = UsedMirror;
|
|
|
|
|
+
|
|
|
|
|
+ if (Itm->Description.find(" ") != string::npos)
|
|
|
|
|
+ Itm->Description.replace(0, Itm->Description.find(" "), UsedMirror);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Determine the message number and dispatch
|
|
// Determine the message number and dispatch
|
|
@@ -248,17 +251,14 @@ bool pkgAcquire::Worker::RunMessages()
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- string NewURI = LookupTag(Message,"New-URI",URI.c_str());
|
|
|
|
|
|
|
+ std::string const NewURI = LookupTag(Message,"New-URI",URI.c_str());
|
|
|
Itm->URI = NewURI;
|
|
Itm->URI = NewURI;
|
|
|
|
|
|
|
|
ItemDone();
|
|
ItemDone();
|
|
|
|
|
|
|
|
// Change the status so that it can be dequeued
|
|
// Change the status so that it can be dequeued
|
|
|
for (pkgAcquire::Queue::QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
|
|
for (pkgAcquire::Queue::QItem::owner_iterator O = Itm->Owners.begin(); O != Itm->Owners.end(); ++O)
|
|
|
- {
|
|
|
|
|
- pkgAcquire::Item *Owner = *O;
|
|
|
|
|
- Owner->Status = pkgAcquire::Item::StatIdle;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ (*O)->Status = pkgAcquire::Item::StatIdle;
|
|
|
// Mark the item as done (taking care of all queues)
|
|
// Mark the item as done (taking care of all queues)
|
|
|
// and then put it in the main queue again
|
|
// and then put it in the main queue again
|
|
|
std::vector<Item*> const ItmOwners = Itm->Owners;
|
|
std::vector<Item*> const ItmOwners = Itm->Owners;
|
|
@@ -267,12 +267,28 @@ bool pkgAcquire::Worker::RunMessages()
|
|
|
for (pkgAcquire::Queue::QItem::owner_iterator O = ItmOwners.begin(); O != ItmOwners.end(); ++O)
|
|
for (pkgAcquire::Queue::QItem::owner_iterator O = ItmOwners.begin(); O != ItmOwners.end(); ++O)
|
|
|
{
|
|
{
|
|
|
pkgAcquire::Item *Owner = *O;
|
|
pkgAcquire::Item *Owner = *O;
|
|
|
- pkgAcquire::ItemDesc desc = Owner->GetItemDesc();
|
|
|
|
|
|
|
+ pkgAcquire::ItemDesc &desc = Owner->GetItemDesc();
|
|
|
|
|
+ // if we change site, treat it as a mirror change
|
|
|
|
|
+ if (URI::SiteOnly(NewURI) != URI::SiteOnly(desc.URI))
|
|
|
|
|
+ {
|
|
|
|
|
+ std::string const OldSite = desc.Description.substr(0, desc.Description.find(" "));
|
|
|
|
|
+ if (likely(APT::String::Startswith(desc.URI, OldSite)))
|
|
|
|
|
+ {
|
|
|
|
|
+ std::string const OldExtra = desc.URI.substr(OldSite.length() + 1);
|
|
|
|
|
+ if (likely(APT::String::Endswith(NewURI, OldExtra)))
|
|
|
|
|
+ {
|
|
|
|
|
+ std::string const NewSite = NewURI.substr(0, NewURI.length() - OldExtra.length());
|
|
|
|
|
+ Owner->UsedMirror = URI::ArchiveOnly(NewSite);
|
|
|
|
|
+ if (desc.Description.find(" ") != string::npos)
|
|
|
|
|
+ desc.Description.replace(0, desc.Description.find(" "), Owner->UsedMirror);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
desc.URI = NewURI;
|
|
desc.URI = NewURI;
|
|
|
OwnerQ->Owner->Enqueue(desc);
|
|
OwnerQ->Owner->Enqueue(desc);
|
|
|
|
|
|
|
|
if (Log != 0)
|
|
if (Log != 0)
|
|
|
- Log->Done(Owner->GetItemDesc());
|
|
|
|
|
|
|
+ Log->Done(desc);
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|