Don't use object returned from vector::end()
Replace all use of c->name by it->file() in updateChildrenBasedOnHash()'s fsChildren loop to avoid confusion. Thanks to Geoff for spotting this!
This commit is contained in:
@@ -268,21 +268,21 @@ public:
|
|||||||
SG_LOG(SG_TERRASYNC, SG_DEBUG, "is orphan '" << it->file() << "'" );
|
SG_LOG(SG_TERRASYNC, SG_DEBUG, "is orphan '" << it->file() << "'" );
|
||||||
orphans.push_back(it->file());
|
orphans.push_back(it->file());
|
||||||
} else if (c->hash != hash) {
|
} else if (c->hash != hash) {
|
||||||
SG_LOG(SG_TERRASYNC, SG_DEBUG, "hash mismatch'" << it->file() << "', c->name=" << c->name );
|
SG_LOG(SG_TERRASYNC, SG_DEBUG, "hash mismatch'" << it->file() );
|
||||||
// file exists, but hash mismatch, schedule update
|
// file exists, but hash mismatch, schedule update
|
||||||
if (!hash.empty()) {
|
if (!hash.empty()) {
|
||||||
SG_LOG(SG_TERRASYNC, SG_DEBUG, "file exists but hash is wrong for:" << c->name);
|
SG_LOG(SG_TERRASYNC, SG_DEBUG, "file exists but hash is wrong for:" << it->file() );
|
||||||
SG_LOG(SG_TERRASYNC, SG_DEBUG, "on disk:" << hash << " vs in info:" << c->hash);
|
SG_LOG(SG_TERRASYNC, SG_DEBUG, "on disk:" << hash << " vs in info:" << c->hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
toBeUpdated.push_back(c->name);
|
toBeUpdated.push_back(it->file() );
|
||||||
} else {
|
} else {
|
||||||
// file exists and hash is valid. If it's a directory,
|
// file exists and hash is valid. If it's a directory,
|
||||||
// perform a recursive check.
|
// perform a recursive check.
|
||||||
SG_LOG(SG_TERRASYNC, SG_DEBUG, "file exists hash is good:" << c->name);
|
SG_LOG(SG_TERRASYNC, SG_DEBUG, "file exists hash is good:" << it->file() );
|
||||||
if (c->type == ChildInfo::DirectoryType) {
|
if (c->type == ChildInfo::DirectoryType) {
|
||||||
SGPath p(relativePath());
|
SGPath p(relativePath());
|
||||||
p.append(c->name);
|
p.append(it->file());
|
||||||
HTTPDirectory* childDir = _repository->getOrCreateDirectory(p.str());
|
HTTPDirectory* childDir = _repository->getOrCreateDirectory(p.str());
|
||||||
childDir->updateChildrenBasedOnHash();
|
childDir->updateChildrenBasedOnHash();
|
||||||
}
|
}
|
||||||
@@ -291,7 +291,7 @@ public:
|
|||||||
// remove existing file system children from the index list,
|
// remove existing file system children from the index list,
|
||||||
// so we can detect new children
|
// so we can detect new children
|
||||||
// https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Erase-Remove
|
// https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Erase-Remove
|
||||||
indexNames.erase(std::remove(indexNames.begin(), indexNames.end(), c->name), indexNames.end());
|
indexNames.erase(std::remove(indexNames.begin(), indexNames.end(), it->file()), indexNames.end());
|
||||||
} // of real children iteration
|
} // of real children iteration
|
||||||
|
|
||||||
// all remaining names in indexChilden are new children
|
// all remaining names in indexChilden are new children
|
||||||
@@ -330,6 +330,7 @@ public:
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SG_LOG(SG_TERRASYNC,SG_DEBUG, "scheduling update for " << *it );
|
||||||
if (cit->type == ChildInfo::FileType) {
|
if (cit->type == ChildInfo::FileType) {
|
||||||
_repository->updateFile(this, *it, cit->sizeInBytes);
|
_repository->updateFile(this, *it, cit->sizeInBytes);
|
||||||
} else {
|
} else {
|
||||||
@@ -630,10 +631,12 @@ HTTPRepository::failure() const
|
|||||||
if (responseCode() == 200) {
|
if (responseCode() == 200) {
|
||||||
std::string hash = strutils::encodeHex(sha1_result(&hashContext), HASH_LENGTH);
|
std::string hash = strutils::encodeHex(sha1_result(&hashContext), HASH_LENGTH);
|
||||||
_directory->didUpdateFile(fileName, hash, contentSize());
|
_directory->didUpdateFile(fileName, hash, contentSize());
|
||||||
//SG_LOG(SG_TERRASYNC, SG_INFO, "got file " << fileName << " in " << _directory->absolutePath());
|
SG_LOG(SG_TERRASYNC, SG_DEBUG, "got file " << fileName << " in " << _directory->absolutePath());
|
||||||
} else if (responseCode() == 404) {
|
} else if (responseCode() == 404) {
|
||||||
|
SG_LOG(SG_TERRASYNC, SG_WARN, "terrasync file not found on server: " << fileName << " for " << _directory->absolutePath());
|
||||||
_directory->didFailToUpdateFile(fileName, AbstractRepository::REPO_ERROR_FILE_NOT_FOUND);
|
_directory->didFailToUpdateFile(fileName, AbstractRepository::REPO_ERROR_FILE_NOT_FOUND);
|
||||||
} else {
|
} else {
|
||||||
|
SG_LOG(SG_TERRASYNC, SG_WARN, "terrasync file download error on server: " << fileName << " for " << _directory->absolutePath() << ": " << responseCode() );
|
||||||
_directory->didFailToUpdateFile(fileName, AbstractRepository::REPO_ERROR_HTTP);
|
_directory->didFailToUpdateFile(fileName, AbstractRepository::REPO_ERROR_HTTP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user