* Use /tmp/nix-build-<drvpath>-<counter> instead of

/tmp/nix-<pid>-<counter> for temporary build directories.  This
  increases purity a bit: many packages store the temporary build path
  in their output, causing (generally unimportant) binary differences.
This commit is contained in:
Eelco Dolstra 2008-03-27 13:45:17 +00:00
parent 5bb08db55b
commit 329025253d
3 changed files with 17 additions and 8 deletions

View File

@ -1568,7 +1568,7 @@ void DerivationGoal::startBuilder()
/* Create a temporary directory where the build will take
place. */
tmpDir = createTempDir();
tmpDir = createTempDir("", "nix-build-" + baseNameOf(drvPath), false, false);
/* For convenience, set an environment pointing to the top build
directory. */

View File

@ -318,19 +318,27 @@ void makePathReadOnly(const Path & path)
}
static Path tempName(const Path & tmpRoot, const Path & prefix)
static Path tempName(Path tmpRoot, const Path & prefix, bool includePid,
int & counter)
{
static int counter = 0;
Path tmpRoot2 = canonPath(tmpRoot.empty() ? getEnv("TMPDIR", "/tmp") : tmpRoot, true);
return (format("%1%/%2%-%3%-%4%") % tmpRoot2 % prefix % getpid() % counter++).str();
tmpRoot = canonPath(tmpRoot.empty() ? getEnv("TMPDIR", "/tmp") : tmpRoot, true);
if (includePid)
return (format("%1%/%2%-%3%-%4%") % tmpRoot % prefix % getpid() % counter++).str();
else
return (format("%1%/%2%-%3%") % tmpRoot % prefix % counter++).str();
}
Path createTempDir(const Path & tmpRoot, const Path & prefix)
Path createTempDir(const Path & tmpRoot, const Path & prefix,
bool includePid, bool useGlobalCounter)
{
static int globalCounter = 0;
int localCounter = 0;
int & counter(useGlobalCounter ? globalCounter : localCounter);
while (1) {
checkInterrupt();
Path tmpDir = tempName(tmpRoot, prefix);
Path tmpDir = tempName(tmpRoot, prefix, includePid, counter);
if (mkdir(tmpDir.c_str(), 0777) == 0) {
/* Explicitly set the group of the directory. This is to
work around around problems caused by BSD's group

View File

@ -70,7 +70,8 @@ void deletePath(const Path & path, unsigned long long & bytesFreed);
void makePathReadOnly(const Path & path);
/* Create a temporary directory. */
Path createTempDir(const Path & tmpRoot = "", const Path & prefix = "nix");
Path createTempDir(const Path & tmpRoot = "", const Path & prefix = "nix",
bool includePid = true, bool useGlobalCounter = true);
/* Create a directory and all its parents, if necessary. Returns the
list of created directories, in order of creation. */