Skip to content

Commit

Permalink
builtins.fetchgit: Respect tarball-ttl
Browse files Browse the repository at this point in the history
I.e. if the local ref is more recent than tarball-ttl seconds, then
don't check the remote.
  • Loading branch information
edolstra committed Jul 27, 2017
1 parent 69deca1 commit 9f64cb8
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/libexpr/primops/fetchgit.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
#include "store-api.hh"
#include "pathlocks.hh"

#include <sys/time.h>

namespace nix {

Path exportGit(ref<Store> store, const std::string & uri, const std::string & rev)
Expand All @@ -24,7 +26,23 @@ Path exportGit(ref<Store> store, const std::string & uri, const std::string & re

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));

Expand Down

0 comments on commit 9f64cb8

Please sign in to comment.