diff --git a/pkgs/tools/audio/beets/common.nix b/pkgs/tools/audio/beets/common.nix index 440606bdd836..37faff29c728 100644 --- a/pkgs/tools/audio/beets/common.nix +++ b/pkgs/tools/audio/beets/common.nix @@ -26,6 +26,8 @@ , extraPatches ? [ ] , pluginOverrides ? { } , disableAllPlugins ? false +, disabledTests ? [] +, extraNativeBuildInputs ? [] # tests , runCommand @@ -52,12 +54,6 @@ python3Packages.buildPythonApplication { patches = extraPatches; - postPatch = '' - # https://github.com/beetbox/beets/pull/4868 - substituteInPlace beets/util/artresizer.py \ - --replace "Image.ANTIALIAS" "Image.Resampling.LANCZOS" - ''; - propagatedBuildInputs = with python3Packages; [ confuse gst-python @@ -76,7 +72,7 @@ python3Packages.buildPythonApplication { nativeBuildInputs = [ gobject-introspection sphinxHook - ]; + ] ++ extraNativeBuildInputs; buildInputs = [ ] ++ (with gst_all_1; [ @@ -93,24 +89,6 @@ python3Packages.buildPythonApplication { cp extra/_beet $out/share/zsh/site-functions/ ''; - doInstallCheck = true; - - installCheckPhase = '' - runHook preInstallCheck - - tmphome="$(mktemp -d)" - - EDITOR="${writeScript "beetconfig.sh" '' - #!${runtimeShell} - cat > "$1" < "$1" < $out/config.yaml + cat << EOF > $out/config.yaml replaygain: backend: gstreamer EOF - echo $out/config.yaml - ${beets}/bin/beet -c $out/config.yaml > /dev/null + ${beets}/bin/beet -c $out/config.yaml > /dev/null ''; meta = with lib; { diff --git a/pkgs/tools/audio/beets/default.nix b/pkgs/tools/audio/beets/default.nix index 7f5c3bbceae9..c78ccced9a80 100644 --- a/pkgs/tools/audio/beets/default.nix +++ b/pkgs/tools/audio/beets/default.nix @@ -2,6 +2,7 @@ , callPackage , fetchFromGitHub , fetchpatch +, python3Packages }: /* ** To customize the enabled beets plugins, use the pluginOverrides input to the @@ -20,6 +21,7 @@ lib.makeExtensible (self: { beets = self.beets-stable; beets-stable = callPackage ./common.nix rec { + inherit python3Packages; version = "1.6.0"; src = fetchFromGitHub { owner = "beetbox"; @@ -41,27 +43,46 @@ lib.makeExtensible (self: { # https://github.com/beetbox/beets/pull/4839 # The upstream patch does not apply on 1.6.0, as the related code has been refactored since ./patches/fix-embedart-imagick-7.1.1-12.patch + # Pillow 10 compatibility fix, a backport of + # https://github.com/beetbox/beets/pull/4868, which doesn't apply now + ./patches/fix-pillow10-compat.patch + ]; + disabledTests = [ + # This issue is present on this version alone, and can be removed on the + # next stable version version bump. Since this is fixed in branch master, + # we don't have a bug ticket open for this. As of writing, it also seems + # hard to find a patch that can be backported to v1.6.0 that would fix + # the failure, as the master branch has gone through too many changes + # now. + "test_get_single_item_by_path" ]; }; beets-minimal = self.beets.override { disableAllPlugins = true; }; beets-unstable = callPackage ./common.nix { - version = "unstable-2023-07-05"; + inherit python3Packages; + version = "unstable-2023-10-26"; src = fetchFromGitHub { owner = "beetbox"; repo = "beets"; - rev = "9481402b3c20739ca0b879d19adbfca22ccd6a44"; - hash = "sha256-AKmozMNVchysoQcUWd90Ic6bQBKQgylVn0E3i85dGb8="; + rev = "6655760732100f5387fad2d2890c015ee5039981"; + hash = "sha256-Nz9BHtacYpJMLmB3f9WFg6GvMa+BuUhiNbJ9cyannek="; }; extraPatches = [ # Bash completion fix for Nix ./patches/unstable-bash-completion-always-print.patch ]; pluginOverrides = { - # unstable has a new plugin, so we register it here. + # unstable has new plugins, so we register them here. limit = { builtin = true; }; + substitute = { builtin = true; }; + advancedrewrite = { builtin = true; }; + autobpm = { builtin = true; }; }; + extraNativeBuildInputs = [ + python3Packages.pydata-sphinx-theme + ]; }; alternatives = callPackage ./plugins/alternatives.nix { beets = self.beets-minimal; }; diff --git a/pkgs/tools/audio/beets/patches/fix-pillow10-compat.patch b/pkgs/tools/audio/beets/patches/fix-pillow10-compat.patch new file mode 100644 index 000000000000..f85eec20156c --- /dev/null +++ b/pkgs/tools/audio/beets/patches/fix-pillow10-compat.patch @@ -0,0 +1,13 @@ +diff --git i/beets/util/artresizer.py w/beets/util/artresizer.py +index 8683e228..6f99c79e 100644 +--- i/beets/util/artresizer.py ++++ w/beets/util/artresizer.py +@@ -72,7 +72,7 @@ def pil_resize(maxwidth, path_in, path_out=None, quality=0, max_filesize=0): + try: + im = Image.open(util.syspath(path_in)) + size = maxwidth, maxwidth +- im.thumbnail(size, Image.ANTIALIAS) ++ im.thumbnail(size, Image.Resampling.LANCZOS) + + if quality == 0: + # Use PIL's default quality. diff --git a/pkgs/tools/audio/beets/patches/unstable-bash-completion-always-print.patch b/pkgs/tools/audio/beets/patches/unstable-bash-completion-always-print.patch index 395f40f92c98..96b175117572 100644 --- a/pkgs/tools/audio/beets/patches/unstable-bash-completion-always-print.patch +++ b/pkgs/tools/audio/beets/patches/unstable-bash-completion-always-print.patch @@ -1,34 +1,36 @@ -diff --git a/beets/ui/commands.py b/beets/ui/commands.py -index 1377ad0c..e178eeae 100755 ---- a/beets/ui/commands.py -+++ b/beets/ui/commands.py -@@ -1831,20 +1831,6 @@ default_commands.append(config_cmd) +diff --git i/beets/ui/commands.py w/beets/ui/commands.py +index ad4f7821..5077191d 100755 +--- i/beets/ui/commands.py ++++ w/beets/ui/commands.py +@@ -2381,22 +2381,6 @@ default_commands.append(config_cmd) def print_completion(*args): for line in completion_script(default_commands + plugins.commands()): - print_(line, end='') + print_(line, end="") - if not any(os.path.isfile(syspath(p)) for p in BASH_COMPLETION_PATHS): -- log.warning('Warning: Unable to find the bash-completion package. ' -- 'Command line completion might not work.') +- log.warning( +- "Warning: Unable to find the bash-completion package. " +- "Command line completion might not work." +- ) - - -BASH_COMPLETION_PATHS = [ -- b'/etc/bash_completion', -- b'/usr/share/bash-completion/bash_completion', -- b'/usr/local/share/bash-completion/bash_completion', +- b"/etc/bash_completion", +- b"/usr/share/bash-completion/bash_completion", +- b"/usr/local/share/bash-completion/bash_completion", - # SmartOS -- b'/opt/local/share/bash-completion/bash_completion', +- b"/opt/local/share/bash-completion/bash_completion", - # Homebrew (before bash-completion2) -- b'/usr/local/etc/bash_completion', +- b"/usr/local/etc/bash_completion", -] def completion_script(commands): -diff --git a/test/test_ui.py b/test/test_ui.py -index f66917dc..f3d934c6 100644 ---- a/test/test_ui.py -+++ b/test/test_ui.py -@@ -1310,12 +1310,7 @@ class CompletionTest(_common.TestCase, TestHelper): - stdout=subprocess.PIPE, env=env) +diff --git i/test/test_ui.py w/test/test_ui.py +index cae86148..faf266a8 100644 +--- i/test/test_ui.py ++++ w/test/test_ui.py +@@ -1434,12 +1434,7 @@ class CompletionTest(_common.TestCase, TestHelper): + ) # Load bash_completion library. - for path in commands.BASH_COMPLETION_PATHS: @@ -36,8 +38,8 @@ index f66917dc..f3d934c6 100644 - bash_completion = path - break - else: -- self.skipTest('bash-completion script not found') -+ self.skipTest('bash-completion script not found') +- self.skipTest("bash-completion script not found") ++ self.skipTest("bash-completion script not found") try: - with open(util.syspath(bash_completion), 'rb') as f: + with open(util.syspath(bash_completion), "rb") as f: tester.stdin.writelines(f)