Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 14 additions & 16 deletions pkgs/build-support/fetchhg/nix-prefetch-hg
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#! /usr/bin/env bash
#!/bin/sh
set -e

url=$1
rev=$2
expHash=$3
url="$1"
rev="$2"
expHash="$3"

hashType="${NIX_HASH_ALGO:-sha256}"
hashFormat=${hashFormat:-"--base32"}
hashFormat="${hashFormat:-"--base32"}"
rev="${rev:-tip}"

LOG() {
Expand All @@ -18,19 +18,19 @@ die() {
exit 1
}

if [[ -z "$url" || "$url" == "--help" ]]; then
if [ -z "$url" ] || [ "$url" = "--help" ]; then
die "Usage: nix-prefetch-hg URL [rev [EXPECTED-HASH]]"
fi

if [[ "${fetchSubrepos:-0}" == 1 ]]; then
if [ "${fetchSubrepos:-0}" -eq 1 ]; then
subrepoClause=S
else
subrepoClause=
fi

# If the hash was given, a file with that hash may already be in the
# store.
if [[ -n "$expHash" ]]; then
if [ -n "$expHash" ]; then
finalPath=$(nix-store --print-fixed-path --recursive "$hashType" "$expHash" hg-archive)
if ! nix-store --check-validity "$finalPath" 2> /dev/null; then
finalPath=
Expand All @@ -41,7 +41,7 @@ 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 [[ -z "$finalPath" ]]; then
if [ -z "$finalPath" ]; then
# nix>=2.20 rejects adding symlinked paths to the store, so use realpath
# to resolve to a physical path. https://github.com/NixOS/nix/issues/11941
tmpPath="$(realpath "$(mktemp -d --tmpdir hg-checkout-tmp-XXXXXXXX)")"
Expand All @@ -50,7 +50,7 @@ if [[ -z "$finalPath" ]]; then
tmpArchive="$tmpPath/hg-archive"

# Perform the checkout.
if [[ "$url" != /* ]]; then
if [ "${url#/*}" = "$url" ]; then
tmpClone="$tmpPath/hg-clone"
hg clone -q -y -U "$url" "$tmpClone" >&2
else
Expand All @@ -63,22 +63,20 @@ if [[ -z "$finalPath" ]]; then

# Compute the hash.
hash=$(nix-hash --type "$hashType" "$hashFormat" "$tmpArchive")
if [[ -z "$QUIET" ]]; then LOG "hash is $hash"; fi
if [ -z "$QUIET" ]; then LOG "hash is $hash"; fi

# Add the downloaded file to the Nix store.
finalPath=$(nix-store --add-fixed --recursive "$hashType" "$tmpArchive")

if [[ -n "$expHash" && "$expHash" != "$hash" ]]; then
if [ -n "$expHash" ] && [ "$expHash" != "$hash" ]; then
die "ERROR: hash mismatch for URL \`$url'"
fi


fi

if [[ -z "$QUIET" ]]; then LOG "path is $finalPath"; fi
if [ -z "$QUIET" ]; then LOG "path is $finalPath"; fi

echo "$hash"

if [[ -n "$PRINT_PATH" ]]; then
if [ -n "$PRINT_PATH" ]; then
echo "$finalPath"
fi
Loading