void checkRepo(HostInfo &infoSnapshot, const std::string &uuid) { map<string, HostInfo *> hostSnapshot; map<string, HostInfo *>::iterator it; RepoInfo localInfo = infoSnapshot.getRepo(uuid); hostSnapshot = hosts; for (it = hostSnapshot.begin(); it != hostSnapshot.end(); it++) { list<string> repos = it->second->listRepos(); list<string>::iterator rIt; for (rIt = repos.begin(); rIt != repos.end(); rIt++) { RepoInfo info = it->second->getRepo(uuid); if (info.getHead() != localInfo.getHead()) { pullRepo(infoSnapshot, *(it->second), uuid); } } } }
void pullRepo(HostInfo &localHost, HostInfo &remoteHost, const std::string &uuid) { RepoInfo local = localHost.getRepo(uuid); RepoInfo remote = remoteHost.getRepo(uuid); RepoControl repo = RepoControl(local.getPath()); DLOG("Local and Remote heads mismatch on repo %s", uuid.c_str()); repo.open(); if (!repo.hasCommit(remote.getHead())) { LOG("Pulling from %s:%s", remoteHost.getPreferredIp().c_str(), remote.getPath().c_str()); repo.pull(remoteHost.getPreferredIp(), remote.getPath()); } repo.close(); }