builtins.fetchgit: Respect tarball-ttl
I.e. if the local ref is more recent than tarball-ttl seconds, then don't check the remote.
This commit is contained in:
parent
69deca194e
commit
9f64cb89cb
1 changed files with 19 additions and 1 deletions
|
@ -4,6 +4,8 @@
|
||||||
#include "store-api.hh"
|
#include "store-api.hh"
|
||||||
#include "pathlocks.hh"
|
#include "pathlocks.hh"
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
Path exportGit(ref<Store> store, const std::string & uri, const std::string & rev)
|
Path exportGit(ref<Store> store, const std::string & uri, const std::string & rev)
|
||||||
|
@ -24,7 +26,23 @@ Path exportGit(ref<Store> store, const std::string & uri, const std::string & re
|
||||||
|
|
||||||
Path localRefFile = cacheDir + "/refs/heads/" + localRef;
|
Path localRefFile = cacheDir + "/refs/heads/" + localRef;
|
||||||
|
|
||||||
runProgram("git", true, { "-C", cacheDir, "fetch", "--force", uri, rev + ":" + localRef });
|
/* If the local ref is older than ‘tarball-ttl’ seconds, do a git
|
||||||
|
fetch to update the local ref to the remote ref. */
|
||||||
|
time_t now = time(0);
|
||||||
|
struct stat st;
|
||||||
|
if (stat(localRefFile.c_str(), &st) != 0 ||
|
||||||
|
st.st_mtime < now - settings.tarballTtl)
|
||||||
|
{
|
||||||
|
runProgram("git", true, { "-C", cacheDir, "fetch", "--force", uri, rev + ":" + localRef });
|
||||||
|
|
||||||
|
struct timeval times[2];
|
||||||
|
times[0].tv_sec = now;
|
||||||
|
times[0].tv_usec = 0;
|
||||||
|
times[1].tv_sec = now;
|
||||||
|
times[1].tv_usec = 0;
|
||||||
|
|
||||||
|
utimes(localRefFile.c_str(), times);
|
||||||
|
}
|
||||||
|
|
||||||
std::string commitHash = chomp(readFile(localRefFile));
|
std::string commitHash = chomp(readFile(localRefFile));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue