Skip to content
Merged
Show file tree
Hide file tree
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
21 changes: 20 additions & 1 deletion pkgs/common-updater/scripts/update-source-version
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ die() {

usage() {
echo "Usage: $scriptName <attr> <version> [<new-source-hash>] [<new-source-url>]"
echo " [--version-key=<version-key>] [--system=<system>] [--file=<file-to-update>]"
echo " [--version-key=<version-key>] [--system=<system>] [--file=<file-to-update>] [--rev=<revision>]"
echo " [--ignore-same-hash] [--print-changes]"
}

Expand All @@ -30,6 +30,9 @@ for arg in "$@"; do
die "Could not find provided file $nixFile"
fi
;;
--rev=*)
newRevision="${arg#*=}"
;;
--ignore-same-hash)
ignoreSameHash="true"
;;
Expand Down Expand Up @@ -111,6 +114,13 @@ if [[ "$oldVersion" = "$newVersion" ]]; then
exit 0
fi

if [[ -n "$newRevision" ]]; then
oldRevision=$(nix-instantiate $systemArg --eval -E "with import ./. {}; $attr.src.rev" | tr -d '"')
if [[ -z "$oldRevision" ]]; then
die "Couldn't evaluate source revision from '$attr.src'!"
fi
fi

# Escape regex metacharacter that are allowed in store path names
oldVersionEscaped=$(echo "$oldVersion" | sed -re 's|[.+]|\\&|g')
oldUrlEscaped=$(echo "$oldUrl" | sed -re 's|[${}.+]|\\&|g')
Expand Down Expand Up @@ -174,6 +184,15 @@ if cmp -s "$nixFile" "$nixFile.bak"; then
die "Failed to replace source hash of '$attr' to a temporary hash!"
fi

# Replace new revision, if given
if [[ -n "$newRevision" ]]; then
sed -i "$nixFile" -re "s|\"$oldRevision\"|\"$newRevision\"|"

if cmp -s "$nixFile" "$nixFile.bak"; then
die "Failed to replace source revision '$oldRevision' to '$newRevision' in '$attr'!"
fi
fi

# If new hash not given on the command line, recalculate it ourselves.
if [[ -z "$newHash" ]]; then
nix-build $systemArg --no-out-link -A "$attr.src" 2>"$attr.fetchlog" >/dev/null || true
Expand Down
44 changes: 44 additions & 0 deletions pkgs/common-updater/unstable-updater.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{ stdenv
, writeShellScript
, coreutils
, git
, nix
, common-updater-scripts
}:

# This is an updater for unstable packages that should always use the latest
# commit.
{ url ? null # The git url, if empty it will be set to src.url
}:

let
updateScript = writeShellScript "unstable-update-script.sh" ''
set -ex

url="$1"

# By default we set url to src.url
if [[ -z "$url" ]]; then
url="$(${nix}/bin/nix-instantiate $systemArg --eval -E \
"with import ./. {}; $UPDATE_NIX_ATTR_PATH.src.url" \
| tr -d '"')"
fi

# Get info about HEAD from a shallow git clone
tmpdir="$(${coreutils}/bin/mktemp -d)"
${git}/bin/git clone --bare --depth=1 "$url" "$tmpdir"
pushd "$tmpdir"
commit_date="$(${git}/bin/git show -s --pretty='format:%cs')"
commit_sha="$(${git}/bin/git show -s --pretty='format:%H')"
popd
${coreutils}/bin/rm -rf "$tmpdir"

# update the nix expression
${common-updater-scripts}/bin/update-source-version \
"$UPDATE_NIX_ATTR_PATH" \
"unstable-$commit_date" \
--rev="$commit_sha"
'';

in [ updateScript url ]

10 changes: 8 additions & 2 deletions pkgs/development/compilers/qbe/default.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
{ stdenv, fetchgit }:
{ stdenv
, fetchgit
, unstableGitUpdater
}:

stdenv.mkDerivation {
stdenv.mkDerivation rec {
pname = "qbe";
version = "unstable-2019-07-11";

Expand All @@ -11,6 +14,9 @@ stdenv.mkDerivation {
};

makeFlags = [ "PREFIX=$(out)" ];

passthru.updateScript = unstableGitUpdater { };

meta = with stdenv.lib; {
homepage = "https://c9x.me/compile/";
description = "A small compiler backend written in C";
Expand Down
2 changes: 2 additions & 0 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ in

genericUpdater = callPackage ../common-updater/generic-updater.nix { };

unstableGitUpdater = callPackage ../common-updater/unstable-updater.nix { };

nix-update-script = callPackage ../common-updater/nix-update.nix { };

### Push NixOS tests inside the fixed point
Expand Down