diff options
author | Jan Tojnar <jtojnar@gmail.com> | 2022-02-18 08:19:31 +0100 |
---|---|---|
committer | Jan Tojnar <jtojnar@gmail.com> | 2022-02-18 17:26:46 +0100 |
commit | 97276fe65022496b1b925616064546a07eba3ac2 (patch) | |
tree | 7fcf0e5342b911dbc44ada2ebcd7def16e24c80e /pkgs/common-updater | |
parent | 3985dde04ee0eb5d6a2e6778b1ade9aaacbe9d45 (diff) |
unstableGitUpdater: Allow using stable versions
It is important to keep the version as parsed by `builtins.parseDrvName` monotonic for packages that often switch between stable and unstable versions, for nix-env to be able to update them reliably. Let’s optionally use the version format described by RFC 107: https://github.com/NixOS/rfcs/pull/107 The downside is that it requires fetching more commits to be able to determine the latest tag.
Diffstat (limited to 'pkgs/common-updater')
-rw-r--r-- | pkgs/common-updater/unstable-updater.nix | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/pkgs/common-updater/unstable-updater.nix b/pkgs/common-updater/unstable-updater.nix index 966834093711f..14f25a91601cc 100644 --- a/pkgs/common-updater/unstable-updater.nix +++ b/pkgs/common-updater/unstable-updater.nix @@ -10,6 +10,8 @@ # commit. { url ? null # The git url, if empty it will be set to src.url , branch ? null +, stableVersion ? false # Use version format according to RFC 107 (i.e. LAST_TAG+date=YYYY-MM-DD) +, tagPrefix ? "" # strip this prefix from a tag name when using stable version }: let @@ -18,6 +20,8 @@ let url="" branch="" + use_stable_version="" + tag_prefix="" while (( $# > 0 )); do flag="$1" @@ -29,6 +33,12 @@ let --branch=*) branch="''${flag#*=}" ;; + --use-stable-version) + use_stable_version=1 + ;; + --tag-prefix=*) + tag_prefix="''${flag#*=}" + ;; *) echo "$0: unknown option ‘''${flag}’" exit 1 @@ -60,13 +70,34 @@ let pushd "$tmpdir" commit_date="$(${git}/bin/git show -s --pretty='format:%cs')" commit_sha="$(${git}/bin/git show -s --pretty='format:%H')" + if [[ -z "$use_stable_version" ]]; then + new_version="unstable-$commit_date" + else + depth=100 + while (( $depth < 10000 )); do + last_tag="$(${git}/bin/git describe --tags --abbrev=0 2> /dev/null || true)" + if [[ -n "$last_tag" ]]; then + break + fi + ${git}/bin/git fetch --depth="$depth" --tags + depth=$(( $depth * 2 )) + done + if [[ -z "$last_tag" ]]; then + echo "Cound not found a tag within last 10000 commits" > /dev/stderr + exit 1 + fi + if [[ -n "$tag_prefix" ]]; then + last_tag="''${last_tag#$tag_prefix}" + fi + new_version="$last_tag+date=$commit_date" + fi popd - ${coreutils}/bin/rm -rf "$tmpdir" + # ${coreutils}/bin/rm -rf "$tmpdir" # update the nix expression ${common-updater-scripts}/bin/update-source-version \ "$UPDATE_NIX_ATTR_PATH" \ - "unstable-$commit_date" \ + "$new_version" \ --rev="$commit_sha" ''; @@ -75,5 +106,7 @@ in [ "--url=${builtins.toString url}" ] ++ lib.optionals (branch != null) [ "--branch=${branch}" +] ++ lib.optionals stableVersion [ + "--use-stable-version" + "--tag-prefix=${tagPrefix}" ] - |