- The option for cloning in nix-prefetch-bzr is removed - ssl certificates are now ignored by fetchbzr This means that no .bzr directory is downloaded. Without this change, the hash of the result is unpredictable, probably because of timestamping in the .bzr directory. Currently, the only package using fetchbzr is kicad.
75 lines
1.7 KiB
Bash
Executable file
75 lines
1.7 KiB
Bash
Executable file
#! /bin/sh -e
|
|
|
|
url=$1
|
|
rev=$2
|
|
expHash=$3
|
|
|
|
hashType=$NIX_HASH_ALGO
|
|
if test -z "$hashType"; then
|
|
hashType=sha256
|
|
fi
|
|
if test -z "$hashFormat"; then
|
|
hashFormat=--base32
|
|
fi
|
|
|
|
if test -z "$url"; then
|
|
echo "syntax: nix-prefetch-bzr URL [REVISION [EXPECTED-HASH]]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
revarg="-r $rev"
|
|
test -n "$rev" || revarg=""
|
|
|
|
repoName=$(echo $url | sed '
|
|
s,.*/\([^/]\+\)/trunk/*$,\1,;t
|
|
s,.*/\([^/]\+\)/branches/\([^/]\+\)/*$,\1-\2,;t
|
|
s,.*/\([^/]\+\)/tags/\([^/]\+\)/*$,\1-\2,;t
|
|
s,.*/\([^/]\+\)/*$,\1,;t
|
|
')
|
|
dstFile=$repoName-r$rev
|
|
test -n "$rev" || dstFile=$repoName
|
|
|
|
# If the hash was given, a file with that hash may already be in the
|
|
# store.
|
|
if test -n "$expHash"; then
|
|
finalPath=$(nix-store --print-fixed-path --recursive "$hashType" "$expHash" $dstFile)
|
|
if ! nix-store --check-validity "$finalPath" 2> /dev/null; then
|
|
finalPath=
|
|
fi
|
|
hash=$expHash
|
|
fi
|
|
|
|
|
|
# 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.
|
|
if test -z "$finalPath"; then
|
|
tmpPath=/tmp/bzr-checkout-tmp-$$
|
|
tmpFile=$tmpPath/$dstFile
|
|
mkdir $tmpPath
|
|
|
|
trap "rm -rf $tmpPath" EXIT
|
|
|
|
# Perform the checkout.
|
|
bzr -Ossl.cert_reqs=none export $revarg --format=dir "$tmpFile" "$url"
|
|
|
|
# Compute the hash.
|
|
hash=$(nix-hash --type $hashType $hashFormat $tmpFile)
|
|
if ! test -n "$QUIET"; then echo "hash is $hash" >&2; fi
|
|
|
|
# Add the downloaded file to the Nix store.
|
|
finalPath=$(nix-store --add-fixed --recursive "$hashType" $tmpFile)
|
|
|
|
if test -n "$expHash" -a "$expHash" != "$hash"; then
|
|
echo "hash mismatch for URL \`$url'"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if ! test -n "$QUIET"; then echo "path is $finalPath" >&2; fi
|
|
|
|
echo $hash
|
|
|
|
if test -n "$PRINT_PATH"; then
|
|
echo $finalPath
|
|
fi
|