build-support: Use mktemp -d in nix-prefetch-*.

Instead of relying on $$ to not collide with an existing path.

Quoting the Bash manual about $$:

> Expands to the process ID of the shell. In a () subshell, it expands
> to the process ID of the current shell, not the subshell.

So, this is different from $BASHPID:

> Expands to the process ID of the current bash process. This differs
> from $$ under certain circumstances, such as subshells that do not
> require bash to be re-initialized.

But even $BASHPID is prone to race conditions if the process IDs wrap
around, so to be on the safe side, we're using mktemp here.

Closes #3784.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
This commit is contained in:
aszlig 2014-08-25 15:00:55 +02:00
parent 39b1e2fffc
commit f83af95f8a
No known key found for this signature in database
GPG Key ID: D0EBD0EC8C2DC961
4 changed files with 13 additions and 16 deletions

View File

@ -43,11 +43,10 @@ fi
# If we don't know the hash or a path with that hash doesn't exist, # If we don't know the hash or a path with that hash doesn't exist,
# download the file and add it to the store. # download the file and add it to the store.
if test -z "$finalPath"; then if test -z "$finalPath"; then
tmpPath=/tmp/bzr-checkout-tmp-$$ tmpPath="$(mktemp --tmpdir -d bzr-checkout-tmp-XXXXXXXX)"
tmpFile=$tmpPath/$dstFile trap "rm -rf \"$tmpPath\"" EXIT
mkdir $tmpPath
trap "rm -rf $tmpPath" EXIT tmpFile="$tmpPath/$dstFile"
# Perform the checkout. # Perform the checkout.
bzr -Ossl.cert_reqs=none export $revarg --format=dir "$tmpFile" "$url" bzr -Ossl.cert_reqs=none export $revarg --format=dir "$tmpFile" "$url"

View File

@ -256,11 +256,11 @@ else
# download the file and add it to the store. # download the file and add it to the store.
if test -z "$finalPath"; then if test -z "$finalPath"; then
tmpPath=/tmp/git-checkout-tmp-$$ tmpPath="$(mktemp --tmpdir -d git-checkout-tmp-XXXXXXXX)"
tmpFile=$tmpPath/git-export trap "rm -rf \"$tmpPath\"" EXIT
mkdir $tmpPath $tmpFile
trap "rm -rf $tmpPath" EXIT tmpFile="$tmpPath/git-export"
mkdir "$tmpFile"
# Perform the checkout. # Perform the checkout.
clone_user_rev "$tmpFile" "$url" "$rev" clone_user_rev "$tmpFile" "$url" "$rev"

View File

@ -35,11 +35,10 @@ fi
# download the file and add it to the store. # download the file and add it to the store.
if test -z "$finalPath"; then if test -z "$finalPath"; then
tmpPath=/tmp/hg-checkout-tmp-$$ tmpPath="$(mktemp --tmpdir -d hg-checkout-tmp-XXXXXXXX)"
tmpArchive=$tmpPath/hg-archive trap "rm -rf \"$tmpPath\"" EXIT
mkdir $tmpPath
trap "rm -rf $tmpPath" EXIT tmpArchive="$tmpPath/hg-archive"
# Perform the checkout. # Perform the checkout.
if [[ $url != /* ]]; then if [[ $url != /* ]]; then

View File

@ -41,11 +41,10 @@ fi
# If we don't know the hash or a path with that hash doesn't exist, # If we don't know the hash or a path with that hash doesn't exist,
# download the file and add it to the store. # download the file and add it to the store.
if test -z "$finalPath"; then if test -z "$finalPath"; then
tmpPath=/tmp/svn-checkout-tmp-$$ tmpPath="$(mktemp --tmpdir -d svn-checkout-tmp-XXXXXXXX)"
tmpFile=$tmpPath/$dstFile trap "rm -rf \"$tmpPath\"" EXIT
mkdir $tmpPath
trap "rm -rf $tmpPath" EXIT tmpFile="$tmpPath/$dstFile"
# Perform the checkout. # Perform the checkout.
if test "$NIX_PREFETCH_SVN_LEAVE_DOT_SVN" != 1 if test "$NIX_PREFETCH_SVN_LEAVE_DOT_SVN" != 1