diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2015-04-09T09·42+0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2015-04-09T09·42+0200 |
commit | 60340ce3e2f793caf1704997a4d7a5a066e9ef24 (patch) | |
tree | 09b6e74798faa332bfcbb6142b28e7bcaea562ed /src/libutil/util.cc | |
parent | 1711679ea5fd6a37db5a7a1b40eba1f58ad6c999 (diff) |
Implement caching of fetchurl/fetchTarball results
ETags are used to prevent redownloading unchanged files.
Diffstat (limited to 'src/libutil/util.cc')
-rw-r--r-- | src/libutil/util.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc index be0a9bf317d1..ab0a3b303076 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -413,6 +413,17 @@ void createSymlink(const Path & target, const Path & link) } +void replaceSymlink(const Path & target, const Path & link) +{ + Path tmp = canonPath(dirOf(link) + "/.new_" + baseNameOf(link)); + + createSymlink(target, tmp); + + if (rename(tmp.c_str(), link.c_str()) != 0) + throw SysError(format("renaming ‘%1%’ to ‘%2%’") % tmp % link); +} + + LogType logType = ltPretty; Verbosity verbosity = lvlInfo; @@ -1076,6 +1087,15 @@ string chomp(const string & s) } +string trim(const string & s, const string & whitespace) +{ + auto i = s.find_first_not_of(whitespace); + if (i == string::npos) return ""; + auto j = s.find_last_not_of(whitespace); + return string(s, i, j == string::npos ? j : j - i + 1); +} + + string statusToString(int status) { if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { |