summary refs log tree commit diff
path: root/pkgs/desktops/gnome
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2022-10-25 17:40:25 +0200
committerGitHub <noreply@github.com>2022-10-25 17:40:25 +0200
commitdd21d0b041f34b00aa1f4e1781af6a09d93a642e (patch)
tree41bbdb5657cb0046571083432fa91ebd9e9a281d /pkgs/desktops/gnome
parent0ad1d02c6938db498d7ba7ca23a6ca48176bb4e9 (diff)
parent938686871d6f12570fd64a93f0da025dc2a56c37 (diff)
Merge pull request #197238 from NixOS/gnome
GNOME: 43.0 → 43.1
Diffstat (limited to 'pkgs/desktops/gnome')
-rw-r--r--pkgs/desktops/gnome/apps/gnome-calendar/default.nix4
-rw-r--r--pkgs/desktops/gnome/apps/gnome-maps/default.nix4
-rw-r--r--pkgs/desktops/gnome/core/eog/default.nix4
-rw-r--r--pkgs/desktops/gnome/core/evolution-data-server/default.nix4
-rw-r--r--pkgs/desktops/gnome/core/evolution-data-server/hardcode-gsettings.patch4
-rw-r--r--pkgs/desktops/gnome/core/gnome-control-center/default.nix4
-rw-r--r--pkgs/desktops/gnome/core/gnome-initial-setup/default.nix4
-rw-r--r--pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix4
-rw-r--r--pkgs/desktops/gnome/core/gnome-software/default.nix4
-rw-r--r--pkgs/desktops/gnome/find-latest-version.py143
-rw-r--r--pkgs/desktops/gnome/update.nix76
11 files changed, 184 insertions, 71 deletions
diff --git a/pkgs/desktops/gnome/apps/gnome-calendar/default.nix b/pkgs/desktops/gnome/apps/gnome-calendar/default.nix
index 1f178d964f6d1..f2c0a3aaee351 100644
--- a/pkgs/desktops/gnome/apps/gnome-calendar/default.nix
+++ b/pkgs/desktops/gnome/apps/gnome-calendar/default.nix
@@ -22,11 +22,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-calendar";
-  version = "43.0";
+  version = "43.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
-    sha256 = "CeXA+TYPP4Vt6qfA2zD12rAVEYDfQYOAfGzzYCmS9cw=";
+    sha256 = "r6X8ZuL2kVU8x9UX2yNjz/LWLNG130VeX09xMxOdIfI=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome/apps/gnome-maps/default.nix b/pkgs/desktops/gnome/apps/gnome-maps/default.nix
index bca540feeb0a5..1e74521d3e9d4 100644
--- a/pkgs/desktops/gnome/apps/gnome-maps/default.nix
+++ b/pkgs/desktops/gnome/apps/gnome-maps/default.nix
@@ -27,11 +27,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-maps";
-  version = "43.0";
+  version = "43.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-CGjPz7eMOiesW+YM2E0wuz08KMiFqY+qCeN/o6UyNOQ=";
+    sha256 = "sha256-H3UaNb1YmteT9bFBNfKT5OxtSywwcz/sdgxofY8UMSY=";
   };
 
   doCheck = true;
diff --git a/pkgs/desktops/gnome/core/eog/default.nix b/pkgs/desktops/gnome/core/eog/default.nix
index e0a943a8e1ca3..fb7ea8404a364 100644
--- a/pkgs/desktops/gnome/core/eog/default.nix
+++ b/pkgs/desktops/gnome/core/eog/default.nix
@@ -30,13 +30,13 @@
 
 stdenv.mkDerivation rec {
   pname = "eog";
-  version = "43.0";
+  version = "43.1";
 
   outputs = [ "out" "dev" "devdoc" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-pSovPrGju1ADijNikCvHlRY+GphnY+6C0gQk566EVG8=";
+    sha256 = "sha256-/tef88oZusYvJxVcm91p7vh1hwuXHm3LCqOMCT0TGXE=";
   };
 
   patches = [
diff --git a/pkgs/desktops/gnome/core/evolution-data-server/default.nix b/pkgs/desktops/gnome/core/evolution-data-server/default.nix
index 9f5721fcd54d8..0f643e1743260 100644
--- a/pkgs/desktops/gnome/core/evolution-data-server/default.nix
+++ b/pkgs/desktops/gnome/core/evolution-data-server/default.nix
@@ -52,13 +52,13 @@
 
 stdenv.mkDerivation rec {
   pname = "evolution-data-server";
-  version = "3.46.0";
+  version = "3.46.1";
 
   outputs = [ "out" "dev" ];
 
   src = fetchurl {
     url = "mirror://gnome/sources/evolution-data-server/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
-    sha256 = "5fooCVoYP3q1qSjjWoKDebSB3e+D7Ux7UaLjxK71zas=";
+    sha256 = "xV5yz/QZC0LmPdbqvG3OSKGh95BAUx8a9tUcHvpKpus=";
   };
 
   patches = [
diff --git a/pkgs/desktops/gnome/core/evolution-data-server/hardcode-gsettings.patch b/pkgs/desktops/gnome/core/evolution-data-server/hardcode-gsettings.patch
index 87d5ca56b7c50..0ad35d4742d21 100644
--- a/pkgs/desktops/gnome/core/evolution-data-server/hardcode-gsettings.patch
+++ b/pkgs/desktops/gnome/core/evolution-data-server/hardcode-gsettings.patch
@@ -298,7 +298,7 @@ index e61160c..d17871a 100644
  		G_CALLBACK (mi_user_headers_settings_changed_cb), NULL);
  	G_UNLOCK (mi_user_headers);
 diff --git a/src/camel/providers/imapx/camel-imapx-server.c b/src/camel/providers/imapx/camel-imapx-server.c
-index 2ed68cf..5dad98f 100644
+index e5645e2..170a0be 100644
 --- a/src/camel/providers/imapx/camel-imapx-server.c
 +++ b/src/camel/providers/imapx/camel-imapx-server.c
 @@ -5573,7 +5573,18 @@ camel_imapx_server_skip_old_flags_update (CamelStore *store)
@@ -442,7 +442,7 @@ index 8e4ee81..bb8f8f7 100644
  		g_object_unref (settings);
  
 diff --git a/src/libedataserver/e-oauth2-service.c b/src/libedataserver/e-oauth2-service.c
-index 5a21872..a56d589 100644
+index 7783781..6fb22cb 100644
 --- a/src/libedataserver/e-oauth2-service.c
 +++ b/src/libedataserver/e-oauth2-service.c
 @@ -90,7 +90,18 @@ eos_default_guess_can_process (EOAuth2Service *service,
diff --git a/pkgs/desktops/gnome/core/gnome-control-center/default.nix b/pkgs/desktops/gnome/core/gnome-control-center/default.nix
index bd2777610fa3d..4161598634f9d 100644
--- a/pkgs/desktops/gnome/core/gnome-control-center/default.nix
+++ b/pkgs/desktops/gnome/core/gnome-control-center/default.nix
@@ -64,11 +64,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-control-center";
-  version = "43.0";
+  version = "43.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-mIyTNZLL3E5/DbqakyYuYXtzniWSeqFuF3lgx1TjHEg=";
+    sha256 = "sha256-6YvGt4Sv0E8pfbXo5sWZEOLNCQMycQd08m3I3omvT8c=";
   };
 
   patches = [
diff --git a/pkgs/desktops/gnome/core/gnome-initial-setup/default.nix b/pkgs/desktops/gnome/core/gnome-initial-setup/default.nix
index 7bf3e42ff3ca5..f1d63a78df168 100644
--- a/pkgs/desktops/gnome/core/gnome-initial-setup/default.nix
+++ b/pkgs/desktops/gnome/core/gnome-initial-setup/default.nix
@@ -38,11 +38,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-initial-setup";
-  version = "43.0";
+  version = "43.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
-    sha256 = "Ap7LgZM/QE+k9spVvuR7A++JDoRGK/FF9u4JR34aOVU=";
+    sha256 = "gQTnBD75uY4rULKrOP2gX9BDf4xVVp+haDC3vle+DfY=";
   };
 
   patches = [
diff --git a/pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix b/pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix
index e1655b2b7c508..daf0e8f4fcdca 100644
--- a/pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix
+++ b/pkgs/desktops/gnome/core/gnome-remote-desktop/default.nix
@@ -30,11 +30,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gnome-remote-desktop";
-  version = "43.0";
+  version = "43.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
-    hash = "sha256-NrWdIeyuRLllzZHmynwMAJ1gcOwxyEt3wERZXddSeAs=";
+    hash = "sha256-vYR8PKdzYJlTNEYs1GnkWhJHnxHAxI6WUCjtXLgHpbI=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/gnome/core/gnome-software/default.nix b/pkgs/desktops/gnome/core/gnome-software/default.nix
index 2ab87cf2924a7..e971d5ce9293c 100644
--- a/pkgs/desktops/gnome/core/gnome-software/default.nix
+++ b/pkgs/desktops/gnome/core/gnome-software/default.nix
@@ -45,11 +45,11 @@ in
 
 stdenv.mkDerivation rec {
   pname = "gnome-software";
-  version = "43.0";
+  version = "43.1";
 
   src = fetchurl {
     url = "mirror://gnome/sources/gnome-software/${lib.versions.major version}/${pname}-${version}.tar.xz";
-    sha256 = "8WUuquJ0pqhwlQAENRZGUgDMdVlNzM2bShWZsKxJ5o8=";
+    sha256 = "wmdWie53vhHY/waq+kFsTK/EjTgRVTpz7PdkvWr/RHA=";
   };
 
   patches = [
diff --git a/pkgs/desktops/gnome/find-latest-version.py b/pkgs/desktops/gnome/find-latest-version.py
index 3078999e3e5bf..1cc2b55fadb3a 100644
--- a/pkgs/desktops/gnome/find-latest-version.py
+++ b/pkgs/desktops/gnome/find-latest-version.py
@@ -3,85 +3,160 @@ import math
 import json
 import requests
 import sys
+from enum import Enum
 from libversion import Version
-from typing import Optional
+from typing import (
+    Callable,
+    Iterable,
+    List,
+    NamedTuple,
+    Optional,
+    Tuple,
+    TypeVar,
+    Type,
+    cast,
+)
 
 
-def version_to_list(version):
+EnumValue = TypeVar("EnumValue", bound=Enum)
+
+
+def enum_to_arg(enum: Enum) -> str:
+    return enum.name.lower().replace("_", "-")
+
+
+def arg_to_enum(enum_meta: Type[EnumValue], name: str) -> EnumValue:
+    return enum_meta[name.upper().replace("-", "_")]
+
+
+def enum_to_arg_choices(enum_meta: Type[EnumValue]) -> Tuple[str, ...]:
+    return tuple(enum_to_arg(v) for v in cast(Iterable[EnumValue], enum_meta))
+
+
+class Stability(Enum):
+    STABLE = "stable"
+    UNSTABLE = "unstable"
+
+
+VersionPolicy = Callable[[Version], bool]
+VersionPredicate = Callable[[Version, Stability], bool]
+
+
+class VersionPredicateHolder(NamedTuple):
+    function: VersionPredicate
+
+
+def version_to_list(version: str) -> List[int]:
     return list(map(int, version.split(".")))
 
 
-def odd_unstable(version: Version, selected):
+def odd_unstable(version: Version, selected: Stability) -> bool:
     try:
-        version = version_to_list(version.value)
+        version_parts = version_to_list(version.value)
     except:
         # Failing to parse as a list of numbers likely means the version contains a string tag like “beta”, therefore it is not a stable release.
-        return selected != "stable"
+        return selected != Stability.STABLE
 
-    if len(version) < 2:
+    if len(version_parts) < 2:
         return True
 
-    even = version[1] % 2 == 0
-    prerelease = (version[1] >= 90 and version[1] < 100) or (version[1] >= 900 and version[1] < 1000)
+    even = version_parts[1] % 2 == 0
+    prerelease = (version_parts[1] >= 90 and version_parts[1] < 100) or (version_parts[1] >= 900 and version_parts[1] < 1000)
     stable = even and not prerelease
-    if selected == "stable":
+    if selected == Stability.STABLE:
         return stable
     else:
         return True
 
 
-def tagged(version: Version, selected):
-    if selected == "stable":
+def tagged(version: Version, selected: Stability) -> bool:
+    if selected == Stability.STABLE:
         return not ("alpha" in version.value or "beta" in version.value or "rc" in version.value)
     else:
         return True
 
 
-def no_policy(version: Version, selected):
+def no_policy(version: Version, selected: Stability) -> bool:
     return True
 
 
-version_policies = {
-    "odd-unstable": odd_unstable,
-    "tagged": tagged,
-    "none": no_policy,
-}
+class VersionPolicyKind(Enum):
+    # HACK: Using function as values directly would make Enum
+    # think they are methods and skip them.
+    ODD_UNSTABLE = VersionPredicateHolder(odd_unstable)
+    TAGGED = VersionPredicateHolder(tagged)
+    NONE = VersionPredicateHolder(no_policy)
 
 
-def make_version_policy(version_predicate, selected, upper_bound: Optional[Version]):
+def make_version_policy(
+    version_policy_kind: VersionPolicyKind,
+    selected: Stability,
+    upper_bound: Optional[Version],
+) -> VersionPolicy:
+    version_predicate = version_policy_kind.value.function
     if not upper_bound:
         return lambda version: version_predicate(version, selected)
     else:
         return lambda version: version_predicate(version, selected) and version < upper_bound
 
 
-parser = argparse.ArgumentParser(description="Find latest version for a GNOME package by crawling their release server.")
-parser.add_argument("package-name", help="Name of the directory in https://ftp.gnome.org/pub/GNOME/sources/ containing the package.")
-parser.add_argument("version-policy", help="Policy determining which versions are considered stable. GNOME packages usually denote stability by alpha/beta/rc tag in the version. For older packages, odd minor versions are unstable but there are exceptions.", choices=version_policies.keys(), nargs="?", default="tagged")
-parser.add_argument("requested-release", help="Most of the time, we will want to update to stable version but sometimes it is useful to test.", choices=["stable", "unstable"], nargs="?", default="stable")
-parser.add_argument("--upper-bound", dest="upper-bound", help="Only look for versions older than this one (useful for pinning dependencies).")
+def find_versions(package_name: str, version_policy: VersionPolicy) -> List[Version]:
+    # The structure of cache.json: https://gitlab.gnome.org/Infrastructure/sysadmin-bin/blob/master/ftpadmin#L762
+    cache = json.loads(requests.get(f"https://ftp.gnome.org/pub/GNOME/sources/{package_name}/cache.json").text)
+    if type(cache) != list or cache[0] != 4:
+        raise Exception("Unknown format of cache.json file.")
+
+    versions: Iterable[Version] = map(Version, cache[2][package_name])
+    versions = sorted(filter(version_policy, versions))
+
+    return versions
+
+
+parser = argparse.ArgumentParser(
+    description="Find latest version for a GNOME package by crawling their release server.",
+)
+parser.add_argument(
+    "package-name",
+    help="Name of the directory in https://ftp.gnome.org/pub/GNOME/sources/ containing the package.",
+)
+parser.add_argument(
+    "version-policy",
+    help="Policy determining which versions are considered stable. GNOME packages usually denote stability by alpha/beta/rc tag in the version. For older packages, odd minor versions are unstable but there are exceptions.",
+    choices=enum_to_arg_choices(VersionPolicyKind),
+    nargs="?",
+    default=enum_to_arg(VersionPolicyKind.TAGGED),
+)
+parser.add_argument(
+    "requested-release",
+    help="Most of the time, we will want to update to stable version but sometimes it is useful to test.",
+    choices=enum_to_arg_choices(Stability),
+    nargs="?",
+    default=enum_to_arg(Stability.STABLE),
+)
+parser.add_argument(
+    "--upper-bound",
+    dest="upper-bound",
+    help="Only look for versions older than this one (useful for pinning dependencies).",
+)
 
 
 if __name__ == "__main__":
     args = parser.parse_args()
 
     package_name = getattr(args, "package-name")
-    requested_release = getattr(args, "requested-release")
+    requested_release = arg_to_enum(Stability, getattr(args, "requested-release"))
     upper_bound = getattr(args, "upper-bound")
-    if upper_bound:
+    if upper_bound is not None:
         upper_bound = Version(upper_bound)
-    version_predicate = version_policies[getattr(args, "version-policy")]
-    version_policy = make_version_policy(version_predicate, requested_release, upper_bound)
+    version_policy_kind = arg_to_enum(VersionPolicyKind, getattr(args, "version-policy"))
+    version_policy = make_version_policy(version_policy_kind, requested_release, upper_bound)
 
-    # The structure of cache.json: https://gitlab.gnome.org/Infrastructure/sysadmin-bin/blob/master/ftpadmin#L762
-    cache = json.loads(requests.get(f"https://ftp.gnome.org/pub/GNOME/sources/{package_name}/cache.json").text)
-    if type(cache) != list or cache[0] != 4:
-        print("Unknown format of cache.json file.", file=sys.stderr)
+    try:
+        versions = find_versions(package_name, version_policy)
+    except Exception as error:
+        print(error, file=sys.stderr)
         sys.exit(1)
 
-    versions = map(Version, cache[2][package_name])
-    versions = sorted(filter(version_policy, versions))
-
     if len(versions) == 0:
         print("No versions matched.", file=sys.stderr)
         sys.exit(1)
diff --git a/pkgs/desktops/gnome/update.nix b/pkgs/desktops/gnome/update.nix
index e945e005d48d0..ce8ed07a5ae3c 100644
--- a/pkgs/desktops/gnome/update.nix
+++ b/pkgs/desktops/gnome/update.nix
@@ -1,4 +1,4 @@
-{ stdenv, bash, pkgs, lib, writeScript, python3, common-updater-scripts }:
+{ stdenv, pkgs, lib, writeScript, python3, common-updater-scripts }:
 { packageName, attrPath ? packageName, versionPolicy ? "tagged", freeze ? false }:
 
 let
@@ -20,24 +20,62 @@ let
     else
       throw "“freeze” argument needs to be either a boolean, or a version string.";
   updateScript = writeScript "gnome-update-script" ''
-    #!${bash}/bin/bash
-    set -o errexit
-    attr_path="$1"
-    package_name="$2"
-    package_version="$3"
-    version_policy="$4"
-
-    flvFlags=("$package_name" "$version_policy" "''${GNOME_UPDATE_STABILITY:-stable}")
-
-    if (( $# >= 5 )); then
-      upper_bound="$5"
-      flvFlags+=("--upper-bound=$upper_bound")
-    fi
-
-    PATH=${lib.makeBinPath [ common-updater-scripts python ]}
-    latest_tag=$(python "${./find-latest-version.py}" "''${flvFlags[@]}")
-    update-source-version "$attr_path" "$latest_tag"
-    echo '[ { "commitBody": "https://gitlab.gnome.org/GNOME/'$package_name'/-/compare/'$package_version'...'$latest_tag'" } ]'
+    #!${python}/bin/python
+    import json
+    import os
+    import subprocess
+    import sys
+    from libversion import Version
+
+    _, attr_path, package_name, package_version, version_policy, *remaining_args = sys.argv
+
+    flv_args = [
+        package_name,
+        version_policy,
+        os.environ.get("GNOME_UPDATE_STABILITY", "stable"),
+    ]
+
+    match remaining_args:
+        case []:
+            pass
+        case [upper_bound]:
+            flv_args.append(f"--upper-bound={upper_bound}")
+        case other:
+            print("gnome-update-script: Received too many arguments.", file=sys.stderr)
+            sys.exit(1)
+
+    latest_tag = subprocess.check_output(
+        [
+            "${python}/bin/python",
+            "${./find-latest-version.py}",
+            *flv_args,
+        ],
+        encoding="utf-8",
+    )
+
+    if Version(latest_tag) <= Version(package_version):
+        # No newer updates found.
+        print(json.dumps([]))
+        sys.exit(0)
+
+    latest_tag = latest_tag.strip()
+    subprocess.run(
+        [
+            "${common-updater-scripts}/bin/update-source-version",
+            attr_path,
+            latest_tag,
+        ],
+        check=True,
+    )
+
+    report = [
+        {
+            "attrPath": attr_path,
+            "commitBody": f"https://gitlab.gnome.org/GNOME/{package_name}/-/compare/{package_version}...{latest_tag}",
+        },
+    ]
+
+    print(json.dumps(report))
   '';
 in {
   name = "gnome-update-script";