{ lib , 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 , branch ? null }: let updateScript = writeShellScript "unstable-update-script.sh" '' set -ex url="" branch="" while (( $# > 0 )); do flag="$1" shift 1 case "$flag" in --url=*) url="''${flag#*=}" ;; --branch=*) branch="''${flag#*=}" ;; *) echo "$0: unknown option ‘''${flag}’" exit 1 ;; esac done # 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 or $UPDATE_NIX_ATTR_PATH.src.meta.homepage" \ | tr -d '"')" fi # Get info about HEAD from a shallow git clone tmpdir="$(${coreutils}/bin/mktemp -d)" cloneArgs=( --bare --depth=1 ) if [[ -n "$branch" ]]; then cloneArgs+=(--branch="$branch") fi ${git}/bin/git clone "''${cloneArgs[@]}" "$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=${builtins.toString url}" ] ++ lib.optionals (branch != null) [ "--branch=${branch}" ]