openSUSE Commits
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
January 2024
- 1 participants
- 1743 discussions
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kak-lsp for openSUSE:Factory checked in at 2024-01-03 12:27:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kak-lsp (Old)
and /work/SRC/openSUSE:Factory/.kak-lsp.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kak-lsp"
Wed Jan 3 12:27:35 2024 rev:8 rq:1135973 version:15.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/kak-lsp/kak-lsp.changes 2023-11-22 18:55:16.861056742 +0100
+++ /work/SRC/openSUSE:Factory/.kak-lsp.new.28375/kak-lsp.changes 2024-01-03 12:27:41.993420423 +0100
@@ -1,0 +2,10 @@
+Mon Dec 25 09:42:34 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice(a)uncomfyhalomacro.pl>
+
+- Update to version 15.0.1:
+ * Additions:
+ - Default configuration for Markdown via [marksman](https://github.com/artempyanykh/marksman).
+ - Default configuration for Java via [jdtls](https://github.com/eclipse-jdtls/eclipse.jdt.ls).
+ * Fixes:
+ - Fix regression in "lsp-show-message-error" and friends.
+
+-------------------------------------------------------------------
Old:
----
kak-lsp-15.0.0.tar.gz
New:
----
kak-lsp-15.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kak-lsp.spec ++++++
--- /var/tmp/diff_new_pack.5BCh4f/_old 2024-01-03 12:27:44.713519756 +0100
+++ /var/tmp/diff_new_pack.5BCh4f/_new 2024-01-03 12:27:44.713519756 +0100
@@ -17,7 +17,7 @@
Name: kak-lsp
-Version: 15.0.0
+Version: 15.0.1
Release: 0
Summary: Language Server Protocol client for Kakoune
License: (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR BSL-1.0 OR MIT) AND (Apache-2.0 OR MIT) AND (Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT) AND (Apache-2.0 OR MIT OR Zlib) AND (Apache-2.0 OR MIT OR MPL-2.0) AND (MIT OR Unlicense) AND (Apache-2.0 OR Zlib OR MIT) AND MIT AND Zlib AND Unlicense
++++++ kak-lsp-15.0.0.tar.gz -> kak-lsp-15.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/CHANGELOG.md new/kak-lsp-15.0.1/CHANGELOG.md
--- old/kak-lsp-15.0.0/CHANGELOG.md 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/CHANGELOG.md 2023-12-11 10:05:46.000000000 +0100
@@ -1,3 +1,12 @@
+## 15.0.1 - 2023-12-11
+
+Additions:
+- Default configuration for Markdown via [marksman](https://github.com/artempyanykh/marksman).
+- Default configuration for Java via [jdtls](https://github.com/eclipse-jdtls/eclipse.jdt.ls).
+
+Fixes:
+- Fix regression in "lsp-show-message-error" and friends.
+
## 15.0.0 - 2023-11-15
Additions:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/Cargo.lock new/kak-lsp-15.0.1/Cargo.lock
--- old/kak-lsp-15.0.0/Cargo.lock 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/Cargo.lock 2023-12-11 10:05:46.000000000 +0100
@@ -546,7 +546,7 @@
[[package]]
name = "kak-lsp"
-version = "15.0.0"
+version = "15.0.1"
dependencies = [
"clap",
"crossbeam-channel",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/Cargo.toml new/kak-lsp-15.0.1/Cargo.toml
--- old/kak-lsp-15.0.0/Cargo.toml 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/Cargo.toml 2023-12-11 10:05:46.000000000 +0100
@@ -1,7 +1,7 @@
[package]
name = "kak-lsp"
description = "Kakoune Language Server Protocol Client"
-version = "15.0.0"
+version = "15.0.1"
authors = ["Ruslan Prokopchuk <fer.obbee(a)gmail.com>", "Johannes Altmanninger <aclopte(a)gmail.com>"]
edition = "2018"
license = "Unlicense/MIT"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/README.asciidoc new/kak-lsp-15.0.1/README.asciidoc
--- old/kak-lsp-15.0.0/README.asciidoc 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/README.asciidoc 2023-12-11 10:05:46.000000000 +0100
@@ -26,8 +26,8 @@
[source,sh]
----
-curl -O -L https://github.com/kak-lsp/kak-lsp/releases/download/v15.0.0/kak-lsp-v15.0.…
-tar xzvf kak-lsp-v15.0.0-x86_64-apple-darwin.tar.gz
+curl -O -L https://github.com/kak-lsp/kak-lsp/releases/download/v15.0.1/kak-lsp-v15.0.…
+tar xzvf kak-lsp-v15.0.1-x86_64-apple-darwin.tar.gz
# replace `~/.local/bin/` with something on your `$PATH`
mv kak-lsp ~/.local/bin/
@@ -49,8 +49,8 @@
[source,sh]
----
-wget https://github.com/kak-lsp/kak-lsp/releases/download/v15.0.0/kak-lsp-v15.0.…
-tar xzvf kak-lsp-v15.0.0-x86_64-unknown-linux-musl.tar.gz
+wget https://github.com/kak-lsp/kak-lsp/releases/download/v15.0.1/kak-lsp-v15.0.…
+tar xzvf kak-lsp-v15.0.1-x86_64-unknown-linux-musl.tar.gz
# replace `~/.local/bin/` with something on your `$PATH`
mv kak-lsp ~/.local/bin/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/ci/update-homebrew.sh new/kak-lsp-15.0.1/ci/update-homebrew.sh
--- old/kak-lsp-15.0.0/ci/update-homebrew.sh 1970-01-01 01:00:00.000000000 +0100
+++ new/kak-lsp-15.0.1/ci/update-homebrew.sh 2023-12-11 10:05:46.000000000 +0100
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -ex
+
+tag=$(git describe)
+tag=${tag%%-*}
+version=${tag#v}
+url=https://github.com/kak-lsp/kak-lsp/releases/download/$tag/kak-lsp-$tag-x86_64-apple-darwin.tar.gz
+curl -O -L "$url"
+sha=$(sha256sum "kak-lsp-$tag-x86_64-apple-darwin.tar.gz")
+sha=${sha%% *}
+
+cd ../homebrew-kak-lsp/
+sed 4c" url \"$url\"" -i Formula/kak-lsp.rb
+sed 5c" sha256 \"$sha\"" -i Formula/kak-lsp.rb
+sed 6c" version \"$version\"" -i Formula/kak-lsp.rb
+sed '4,6s/^/ /' -i Formula/kak-lsp.rb
+
+git diff
+read
+
+git commit -am "$tag"
+git push
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/kak-lsp.toml new/kak-lsp-15.0.1/kak-lsp.toml
--- old/kak-lsp-15.0.0/kak-lsp.toml 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/kak-lsp.toml 2023-12-11 10:05:46.000000000 +0100
@@ -101,35 +101,13 @@
command = "sh"
args = ["-c", "dart $(dirname $(command -v dart))/snapshots/analysis_server.dart.snapshot --lsp"]
-# # Commented out by default because you still need to set the paths in the JDT
-# # Language Server arguments below before this can become a valid configuration.
-# [language_server.ejdtls]
-# filetypes = ["java"]
-# roots = [".git", "mvnw", "gradlew"]
-# command = "java"
-# args = [
-# "-Declipse.application=org.eclipse.jdt.ls.core.id1",
-# "-Dosgi.bundles.defaultStartLevel=4",
-# "-Declipse.product=org.eclipse.jdt.ls.core.product",
-# "-Dlog.level=ALL",
-# "-Dfile.encoding=utf-8",
-# "--add-modules=ALL-SYSTEM",
-# "--add-opens",
-# "java.base/java.util=ALL-UNNAMED",
-# "--add-opens",
-# "java.base/java.lang=ALL-UNNAMED",
-# "-noverify",
-# "-Xmx1G",
-# "-jar",
-# "/path/to/eclipse.jdt.ls/repository/plugins/org.eclipse.equinox.launcher_1.6.100.v20201223-0822.jar",
-# "-configuration",
-# "/path/to/eclipse.jdt.ls/repository/config_linux",
-# "-data",
-# "/path/to/eclipse-workspace",
-# ]
-# [language_server.ejdtls.settings]
-# # See https://github.dev/eclipse/eclipse.jdt.ls
-# # "java.format.insertSpaces" = true
+[language_server.jdtls]
+filetypes = ["java"]
+roots = ["mvnw", "gradlew", ".git", ".hg"]
+command = "jdtls"
+[language_server.jdtls.settings]
+# See https://github.dev/eclipse/eclipse.jdt.ls
+# "java.format.insertSpaces" = true
[language_server.elixir-ls]
filetypes = ["elixir"]
@@ -265,6 +243,12 @@
# See https://github.com/sumneko/vscode-lua/blob/master/setting/schema.json
# diagnostics.enable = true
+[language_server.markdown]
+filetypes = ["markdown"]
+roots = [".marksman.toml"]
+command = "marksman"
+args = ["server"]
+
[language_server.nimlsp]
filetypes = ["nim"]
roots = ["*.nimble", ".git", ".hg"]
@@ -303,6 +287,15 @@
# command = "pyright-langserver"
# args = ["--stdio"]
+# [language_server.ruff]
+# filetypes = ["python"]
+# roots = ["requirements.txt", "setup.py", ".git", ".hg"]
+# command = "ruff-lsp"
+# settings_section = "_"
+# [language_server.ruff.settings._.globalSettings]
+# organizeImports = true
+# fixAll = true
+
[language_server.r-language-server]
filetypes = ["r"]
roots = ["DESCRIPTION", ".git", ".hg"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/rc/lsp.kak new/kak-lsp-15.0.1/rc/lsp.kak
--- old/kak-lsp-15.0.0/rc/lsp.kak 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/rc/lsp.kak 2023-12-11 10:05:46.000000000 +0100
@@ -387,13 +387,6 @@
}
}}
-declare-option -hidden bool lsp_have_kakoune_feature_filtertext
-declare-option -hidden completions lsp_have_kakoune_feature_filtertext_tmp
-try %{
- set-option global lsp_have_kakoune_feature_filtertext_tmp 1.1@0 insert_text|filter_text|on_select|menu
- set-option global lsp_have_kakoune_feature_filtertext true
-}
-
define-command -hidden lsp-completion -docstring "Request completions for the main cursor position" %{
try %{
# Fail if preceding character is a whitespace (by default; the trigger could be customized).
@@ -425,8 +418,6 @@
column = ${kak_cursor_column}
[params.completion]
offset = ${kak_opt_lsp_completion_offset}
-[params]
-have_kakoune_feature_filtertext = ${kak_opt_lsp_have_kakoune_feature_filtertext}
" | eval "${kak_opt_lsp_cmd} --request") > /dev/null 2>&1 < /dev/null & }
}}
@@ -518,9 +509,33 @@
declare-option -hidden str lsp_symbol_kind_completion %{
symbol_kinds="\
- File Module Namespace Package Class Method Property Field Constructor Enum Interface
- Function Variable Constant String Number Boolean Array Object Key Null EnumMember Struct
- Event Operator TypeParameter"
+ Array
+ Boolean
+ Class
+ Constant
+ Constructor
+ Enum
+ EnumMember
+ Event
+ Field
+ File
+ Function
+ Interface
+ Key
+ Method
+ Module
+ Namespace
+ Null
+ Number
+ Object
+ Operator
+ Package
+ Property
+ String
+ Struct
+ TypeParameter
+ Variable
+ "
printf '%s\n' ${symbol_kinds}
}
@@ -579,7 +594,7 @@
} -shell-script-candidates %{
case $# in
# Search forward or backward?
- (1) printf '%s\n' previous next ;;
+ (1) printf '%s\n' next previous ;;
# Show hover info or goto symbol?
(2) printf '%s\n' hover goto ;;
# Which symbol types?
@@ -630,8 +645,19 @@
" | eval "${kak_opt_lsp_cmd} --request") > /dev/null 2>&1 < /dev/null & }
}
+define-command -hidden lsp-get-word-regex %{
+ try %{
+ execute-keys %exp{<a-i>c\A|[^\w%opt{lsp_extra_word_chars}],\z|[^\w%opt{lsp_extra_word_chars}]<ret>}
+ execute-keys %{"a*}
+ } catch %{
+ set-register a %{}
+ }
+}
+
define-command lsp-definition -docstring "Go to definition" %{
- nop %sh{ (printf %s "
+ evaluate-commands -draft -save-regs a %{
+ lsp-get-word-regex
+ nop %sh{ (printf %s "
session = \"${kak_session}\"
client = \"${kak_client}\"
buffile = \"${kak_buffile}\"
@@ -639,11 +665,13 @@
version = ${kak_timestamp:-0}
method = \"textDocument/definition\"
$([ -z ${kak_hook_param+x} ] || echo hook = true)
+word_regex = '''${kak_reg_a}'''
${kak_opt_lsp_connect_fifo}\
[params.position]
line = ${kak_cursor_line}
column = ${kak_cursor_column}
" | eval "${kak_opt_lsp_cmd} --request") > /dev/null 2>&1 < /dev/null & }
+ }
}
define-command lsp-declaration -docstring "Go to declaration" %{
@@ -817,7 +845,9 @@
}}
define-command lsp-references -docstring "Open buffer with symbol references" %{
- nop %sh{ (printf %s "
+ evaluate-commands -draft -save-regs a %{
+ lsp-get-word-regex
+ nop %sh{ (printf %s "
session = \"${kak_session}\"
client = \"${kak_client}\"
buffile = \"${kak_buffile}\"
@@ -825,15 +855,19 @@
version = ${kak_timestamp:-0}
method = \"textDocument/references\"
$([ -z ${kak_hook_param+x} ] || echo hook = true)
+word_regex = '''${kak_reg_a}'''
${kak_opt_lsp_connect_fifo}\
[params.position]
line = ${kak_cursor_line}
column = ${kak_cursor_column}
" | eval "${kak_opt_lsp_cmd} --request") > /dev/null 2>&1 < /dev/null & }
+ }
}
define-command lsp-highlight-references -docstring "Highlight symbol references" %{
- nop %sh{ (printf %s "
+ evaluate-commands -draft -save-regs a %{
+ lsp-get-word-regex
+ nop %sh{ (printf %s "
session = \"${kak_session}\"
client = \"${kak_client}\"
buffile = \"${kak_buffile}\"
@@ -841,11 +875,13 @@
version = ${kak_timestamp:-0}
method = \"textDocument/documentHighlight\"
$([ -z ${kak_hook_param+x} ] || echo hook = true)
+word_regex = '''${kak_reg_a}'''
${kak_opt_lsp_connect_fifo}\
[params.position]
line = ${kak_cursor_line}
column = ${kak_cursor_column}
" | eval "${kak_opt_lsp_cmd} --request") > /dev/null 2>&1 < /dev/null & }
+ }
}
define-command lsp-rename -params 1 -docstring "lsp-rename <new-name>: rename symbol under the main cursor" %{
@@ -1800,7 +1836,7 @@
lsp-show-message-log <message>
Render language server message of the "log" level.
} %{
- echo -debug "kak-lsp: [%arg{1}] log %arg{1}: %arg{2}"
+ echo -debug "kak-lsp: log from %arg{1}: %arg{2}"
}
define-command -hidden lsp-show-message-request -params 4.. -docstring %{
@@ -2301,7 +2337,7 @@
lsp-inline-diagnostics-disable window
lsp-diagnostic-lines-disable window
try %{ set-option -remove window completers option=lsp_completions }
- set-option window lsp_fail_if_disabled fail
+ unset-option window lsp_fail_if_disabled
remove-hooks window lsp
remove-hooks global lsp-auto-hover
remove-hooks global lsp-auto-hover-insert-mode
@@ -2585,18 +2621,7 @@
# Deprecated commands.
-define-command -hidden lsp -params 1.. -shell-script-candidates %{
- for cmd in start hover definition references signature-help diagnostics document-symbol\
- workspace-symbol workspace-symbol-incr rename rename-prompt\
- capabilities stop formatting formatting-sync highlight-references\
- inline-diagnostics-enable inline-diagnostics-disable\
- diagnostic-lines-enable diagnostic-lines-disable auto-hover-enable auto-hover-disable\
- auto-hover-insert-mode-enable auto-hover-insert-mode-disable auto-signature-help-enable\
- auto-signature-help-disable stop-on-exit-enable stop-on-exit-disable\
- find-error implementation;
- do echo $cmd;
- done
-} %{ evaluate-commands "lsp-%arg{1}" }
+define-command -hidden lsp -params 1.. %{ evaluate-commands "lsp-%arg{1}" }
define-command -hidden lsp-symbols-next-match -docstring 'DEPRECATED, use lsp-next-location. Jump to the next symbols match' %{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/src/capabilities.rs new/kak-lsp-15.0.1/src/capabilities.rs
--- old/kak-lsp-15.0.0/src/capabilities.rs 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/src/capabilities.rs 2023-12-11 10:05:46.000000000 +0100
@@ -248,6 +248,7 @@
"refactor.inline",
"refactor.rewrite",
"source",
+ "source.fixAll",
"source.organizeImports",
]
.iter()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/src/context.rs new/kak-lsp-15.0.1/src/context.rs
--- old/kak-lsp-15.0.0/src/context.rs 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/src/context.rs 2023-12-11 10:05:46.000000000 +0100
@@ -77,7 +77,7 @@
pub outstanding_requests:
HashMap<(ServerName, &'static str, String, Option<String>), OutstandingRequests>,
pub pending_requests: Vec<EditorRequest>,
- pub pending_message_requests: VecDeque<(Id, ShowMessageRequestParams)>,
+ pub pending_message_requests: VecDeque<(Id, ServerName, ShowMessageRequestParams)>,
pub request_counter: u64,
pub response_waitlist: HashMap<Id, (EditorMeta, &'static str, BatchNumber, bool)>,
pub session: SessionId,
@@ -381,6 +381,7 @@
write_response_to_fifo: false,
hook: false,
server: None,
+ word_regex: None,
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/src/controller.rs new/kak-lsp-15.0.1/src/controller.rs
--- old/kak-lsp-15.0.0/src/controller.rs 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/src/controller.rs 2023-12-11 10:05:46.000000000 +0100
@@ -738,7 +738,7 @@
workspace::configuration(request.params, server_name, ctx)
}
request::ShowMessageRequest::METHOD => {
- return show_message::show_message_request(meta, request, ctx);
+ return show_message::show_message_request(meta, server_name, request, ctx);
}
_ => {
warn!("Unsupported method: {}", method);
@@ -778,7 +778,7 @@
let params: ShowMessageParams = params
.parse()
.expect("Failed to parse ShowMessageParams params");
- show_message::show_message(meta, params.typ, ¶ms.message, ctx);
+ show_message::show_message(meta, server_name, params.typ, ¶ms.message, ctx);
}
"window/logMessage" => {
let params: LogMessageParams = params
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/src/language_features/code_action.rs new/kak-lsp-15.0.1/src/language_features/code_action.rs
--- old/kak-lsp-15.0.0/src/language_features/code_action.rs 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/src/language_features/code_action.rs 2023-12-11 10:05:46.000000000 +0100
@@ -144,7 +144,7 @@
return;
}
- let actions: Vec<_> = results
+ let mut actions: Vec<_> = results
.into_iter()
.flat_map(|(server_name, cmd)| {
let cmd: Vec<_> = cmd
@@ -222,6 +222,25 @@
return;
}
+ actions.sort_by_key(|(_server, ca)| {
+ // TODO Group by server?
+ let empty = CodeActionKind::EMPTY;
+ let kind = match ca {
+ CodeActionOrCommand::Command(_) => &empty,
+ CodeActionOrCommand::CodeAction(action) => action.kind.as_ref().unwrap_or(&empty),
+ };
+ // TODO These loosely follow what VSCode does, we should be more accurate.
+ match kind.as_str() {
+ "quickfix" => 0,
+ "refactor" => 1,
+ "refactor.extract" => 2,
+ "refactor.inline" => 3,
+ "refactor.rewrite" => 4,
+ "source" => 5,
+ "source.organizeImports" => 6,
+ _ => 7,
+ }
+ });
let titles_and_commands = actions
.iter()
.map(|(server_name, c)| {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/src/language_features/completion.rs new/kak-lsp-15.0.1/src/language_features/completion.rs
--- old/kak-lsp-15.0.0/src/language_features/completion.rs 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/src/language_features/completion.rs 2023-12-11 10:05:46.000000000 +0100
@@ -51,13 +51,17 @@
);
}
+fn sort_text(item: &CompletionItem) -> &str {
+ item.sort_text.as_ref().unwrap_or(&item.label)
+}
+
fn editor_completion(
meta: EditorMeta,
params: TextDocumentCompletionParams,
results: Vec<(String, Option<CompletionResponse>)>,
ctx: &mut Context,
) {
- let items = results
+ let mut items: Vec<(String, CompletionItem)> = results
.into_iter()
.flat_map(|(server_name, items)| {
let items = match items {
@@ -70,6 +74,11 @@
})
.collect();
+ // TODO Group by server?
+ items.sort_by(|(_left_server, left), (_right_server, right)| {
+ sort_text(left).cmp(sort_text(right))
+ });
+
let version = meta.version;
ctx.completion_items = items;
ctx.completion_items_timestamp = version;
@@ -178,64 +187,15 @@
.or_else(|| x.insert_text.clone())
.unwrap_or_else(|| x.label.clone());
- fn completion_entry(
- insert_text: &str,
- maybe_filter_text: &Option<String>,
- on_select: &str,
- menu: &str,
- ) -> String {
- if let Some(filter_text) = maybe_filter_text {
- editor_quote(&format!(
- "{}|{}|{}|{}",
- escape_tuple_element(insert_text),
- escape_tuple_element(filter_text),
- escape_tuple_element(on_select),
- escape_tuple_element(menu),
- ))
- } else {
- editor_quote(&format!(
- "{}|{}|{}",
- escape_tuple_element(insert_text),
- escape_tuple_element(on_select),
- escape_tuple_element(menu),
- ))
- }
+ fn completion_entry(insert_text: &str, on_select: &str, menu: &str) -> String {
+ editor_quote(&format!(
+ "{}|{}|{}",
+ escape_tuple_element(insert_text),
+ escape_tuple_element(on_select),
+ escape_tuple_element(menu),
+ ))
}
- let maybe_filter_text = {
- let specified_filter_text = x.filter_text.as_ref().unwrap_or(&x.label);
- let specified_insert_text = x
- .text_edit
- .as_ref()
- .map(|cte| match cte {
- CompletionTextEdit::Edit(text_edit) => &text_edit.new_text,
- CompletionTextEdit::InsertAndReplace(text_edit) => &text_edit.new_text,
- })
- .or(x.insert_text.as_ref())
- .unwrap_or(&x.label);
- if !params.have_kakoune_feature_filtertext
- && specified_filter_text != specified_insert_text
- && x.insert_text_format != Some(InsertTextFormat::SNIPPET)
- {
- // Simulate filter-text support by giving the filter-text to Kakoune
- // but expand to the insert-text when the completion is accepted.
- let command = formatdoc!(
- "{on_select}
- lsp-snippets-insert-completion {}",
- editor_quote(&(insert_text + "$0"))
- );
- let insert_text = specified_filter_text;
- return completion_entry(insert_text, &None, &command, &entry);
- }
- if params.have_kakoune_feature_filtertext
- && specified_filter_text != specified_insert_text
- {
- Some(specified_filter_text.clone())
- } else {
- None
- }
- };
-
// If snippet support is both enabled and provided by the server,
// we'll need to perform some transformations on the completion commands.
if ctx.config.snippet_support && x.insert_text_format == Some(InsertTextFormat::SNIPPET)
@@ -260,9 +220,33 @@
editor_quote(&snippet)
);
- completion_entry(&insert_text, &maybe_filter_text, &command, &entry)
+ completion_entry(&insert_text, &command, &entry)
} else {
- completion_entry(&insert_text, &maybe_filter_text, &on_select, &entry)
+ // Due to implementation reasons, we currently do not support filter text
+ // with snippets.
+ let specified_filter_text = x.filter_text.as_ref().unwrap_or(&x.label);
+ let specified_insert_text = x
+ .text_edit
+ .as_ref()
+ .map(|cte| match cte {
+ CompletionTextEdit::Edit(text_edit) => &text_edit.new_text,
+ CompletionTextEdit::InsertAndReplace(text_edit) => &text_edit.new_text,
+ })
+ .or(x.insert_text.as_ref())
+ .unwrap_or(&x.label);
+ let (insert_text, on_select) = if specified_filter_text != specified_insert_text {
+ // Simulate filter-text support by giving the filter-text to Kakoune
+ // but expand to the insert-text when the completion is accepted.
+ let on_select = formatdoc!(
+ "{on_select}
+ lsp-snippets-insert-completion {}",
+ editor_quote(&(insert_text + "$0"))
+ );
+ (specified_filter_text, on_select)
+ } else {
+ (&insert_text, on_select)
+ };
+ completion_entry(insert_text, &on_select, &entry)
}
})
.join(" ");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/src/session.rs new/kak-lsp-15.0.1/src/session.rs
--- old/kak-lsp-15.0.0/src/session.rs 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/src/session.rs 2023-12-11 10:05:46.000000000 +0100
@@ -6,8 +6,10 @@
use crate::types::*;
use crate::util::*;
use crossbeam_channel::{after, never, select, Sender};
+use indoc::formatdoc;
use lazy_static::lazy_static;
use lsp_types::notification::Notification;
+use lsp_types::request::Request;
use lsp_types::*;
use regex::Regex;
use std::collections::HashMap;
@@ -110,7 +112,7 @@
.iter()
.map(|server_name| {
let language = &languages[server_name];
- let root = find_project_root(&language_id, &language.roots, &request.meta.buffile);
+ let root = find_project_root(language_id, &language.roots, &request.meta.buffile);
let route = Route {
session: request.meta.session.clone(),
server_name: server_name.clone(),
@@ -201,7 +203,35 @@
/// This will cancel any blocking requests and also print an error if the
/// request was not triggered by an editor hook.
fn return_request_error(to_editor: &Sender<EditorResponse>, request: &EditorRequest, msg: &str) {
- let command = format!("lsp-show-error {}", editor_quote(msg));
+ let word_regex = request.meta.word_regex.as_ref();
+ let command =
+ if let Some(multi_cmds) =
+ match request.method.as_str() {
+ _ if request.meta.hook => None,
+ request::GotoDefinition::METHOD | request::References::METHOD => Some(formatdoc!(
+ "grep {}
+ lsp-show-error {}",
+ editor_quote(word_regex.unwrap()),
+ editor_quote(msg),
+ )),
+ request::DocumentHighlightRequest::METHOD => Some(formatdoc!(
+ "evaluate-commands -save-regs a/^ %|
+ execute-keys -save-regs '' %[\"aZ]
+ set-register / {}
+ execute-keys -save-regs '' <percent>s<ret>Z
+ execute-keys %[\"az<a-z>a]
+ |
+ lsp-show-error {}",
+ editor_quote(word_regex.unwrap()).replace('|', "||"),
+ editor_quote(
+ &format!("{msg}, falling_back to %s{}<ret>", word_regex.unwrap()))
+ )),
+ _ => None,
+ } {
+ format!( "evaluate-commands {}", &editor_quote(&multi_cmds))
+ }else {
+ format!("lsp-show-error {}", editor_quote(msg))
+ };
// If editor is expecting a fifo response, give it one, so it won't hang.
if let Some(ref fifo) = request.meta.fifo {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/src/show_message.rs new/kak-lsp-15.0.1/src/show_message.rs
--- old/kak-lsp-15.0.0/src/show_message.rs 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/src/show_message.rs 2023-12-11 10:05:46.000000000 +0100
@@ -5,20 +5,30 @@
use lsp_types::{MessageActionItem, MessageType, ShowMessageRequestParams};
use serde::Deserialize;
-use crate::{context::Context, types::EditorMeta, util::editor_quote};
+use crate::{
+ context::Context,
+ types::{EditorMeta, ServerName},
+ util::editor_quote,
+};
// commands to be handled
pub const SHOW_MESSAGE_REQUEST_NEXT: &str = "window/showMessageRequest/showNext";
pub const SHOW_MESSAGE_REQUEST_RESPOND: &str = "window/showMessageRequest/respond";
/// Queues the message request from the LSP server.
-pub fn show_message_request(meta: EditorMeta, request: MethodCall, ctx: &mut Context) {
+pub fn show_message_request(
+ meta: EditorMeta,
+ server_name: &ServerName,
+ request: MethodCall,
+ ctx: &mut Context,
+) {
let request_id = request.id;
let params: ShowMessageRequestParams = request
.params
.parse()
.expect("Failed to parse ShowMessageRequest params");
- ctx.pending_message_requests.push_back((request_id, params));
+ ctx.pending_message_requests
+ .push_back((request_id, server_name.clone(), params));
update_modeline(meta, ctx)
}
@@ -46,7 +56,7 @@
}
pub fn show_message_request_next(meta: EditorMeta, ctx: &mut Context) {
- let (id, params) = match ctx.pending_message_requests.pop_front() {
+ let (id, server_name, params) = match ctx.pending_message_requests.pop_front() {
Some(v) => v,
None => {
return ctx.exec(meta, "lsp-show-error 'No pending message requests.'");
@@ -57,12 +67,9 @@
Some(opts) if !opts.is_empty() => &opts[..],
_ => {
// a ShowMessageRequest with no actions is just a ShowMessage notification.
- show_message(meta, params.typ, ¶ms.message, ctx);
+ show_message(meta, &server_name, params.typ, ¶ms.message, ctx);
- let servers: Vec<_> = ctx.language_servers.keys().cloned().collect();
- for server_name in &servers {
- ctx.reply(server_name, id.clone(), Ok(serde_json::Value::Null));
- }
+ ctx.reply(&server_name, id.clone(), Ok(serde_json::Value::Null));
return;
}
};
@@ -101,9 +108,23 @@
}
/// Implements ShowMessage notification.
-pub fn show_message(meta: EditorMeta, typ: MessageType, msg: &str, ctx: &Context) {
+pub fn show_message(
+ meta: EditorMeta,
+ server_name: &ServerName,
+ typ: MessageType,
+ msg: &str,
+ ctx: &Context,
+) {
let command = message_type(typ).unwrap_or("nop");
- ctx.exec(meta, format!("{} {}", command, editor_quote(msg)));
+ ctx.exec(
+ meta,
+ format!(
+ "{} {} {}",
+ command,
+ editor_quote(server_name),
+ editor_quote(msg)
+ ),
+ );
}
fn update_modeline(meta: EditorMeta, ctx: &Context) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kak-lsp-15.0.0/src/types.rs new/kak-lsp-15.0.1/src/types.rs
--- old/kak-lsp-15.0.0/src/types.rs 2023-11-15 09:55:21.000000000 +0100
+++ new/kak-lsp-15.0.1/src/types.rs 2023-12-11 10:05:46.000000000 +0100
@@ -146,6 +146,7 @@
#[serde(default)]
pub hook: bool,
pub server: Option<ServerName>,
+ pub word_regex: Option<String>,
}
pub type EditorParams = toml::Value;
@@ -205,7 +206,6 @@
pub struct TextDocumentCompletionParams {
pub position: KakounePosition,
pub completion: EditorCompletion,
- pub have_kakoune_feature_filtertext: bool,
}
#[derive(Serialize, Deserialize, Debug)]
++++++ vendor.tar.zst ++++++
Binary files /var/tmp/diff_new_pack.5BCh4f/_old and /var/tmp/diff_new_pack.5BCh4f/_new differ
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package fzf for openSUSE:Factory checked in at 2024-01-03 12:27:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/fzf (Old)
and /work/SRC/openSUSE:Factory/.fzf.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fzf"
Wed Jan 3 12:27:33 2024 rev:40 rq:1135957 version:0.45.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/fzf/fzf.changes 2023-11-19 20:16:17.031519563 +0100
+++ /work/SRC/openSUSE:Factory/.fzf.new.28375/fzf.changes 2024-01-03 12:27:39.949345779 +0100
@@ -1,0 +2,13 @@
+Mon Jan 1 06:54:30 UTC 2024 - Joshua Smith <jsmithfpv(a)gmail.com>
+
+- Update to version 0.45.0:
+ * Added transform action to conditionally perform a set of
+ actions
+ * Added placeholder expressions like {fzf:query}
+ * Added support for negative height
+ * Added accept-or-print-query action that acts like accept but
+ prints the current query when there's no match for the query
+ * Added show-header and hide-header actions
+ * Bug fixes
+
+-------------------------------------------------------------------
Old:
----
fzf-0.44.1.tar.gz
New:
----
fzf-0.45.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ fzf.spec ++++++
--- /var/tmp/diff_new_pack.FH3vuH/_old 2024-01-03 12:27:41.213391938 +0100
+++ /var/tmp/diff_new_pack.FH3vuH/_new 2024-01-03 12:27:41.213391938 +0100
@@ -1,7 +1,7 @@
#
# spec file for package fzf
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%global _lto_cflags %{nil}
Name: fzf
-Version: 0.44.1
+Version: 0.45.0
Release: 0
Summary: A command-line fuzzy finder
License: MIT
++++++ fzf-0.44.1.tar.gz -> fzf-0.45.0.tar.gz ++++++
++++ 1719 lines of diff (skipped)
++++++ vendor.tar.zst ++++++
Binary files /var/tmp/diff_new_pack.FH3vuH/_old and /var/tmp/diff_new_pack.FH3vuH/_new differ
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package wlroots for openSUSE:Factory checked in at 2024-01-03 12:27:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wlroots (Old)
and /work/SRC/openSUSE:Factory/.wlroots.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "wlroots"
Wed Jan 3 12:27:31 2024 rev:29 rq:1135923 version:0.17.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/wlroots/wlroots.changes 2023-12-21 23:38:32.414377551 +0100
+++ /work/SRC/openSUSE:Factory/.wlroots.new.28375/wlroots.changes 2024-01-03 12:27:38.085277707 +0100
@@ -1,0 +2,22 @@
+Mon Jan 1 00:51:49 UTC 2024 - Soc Virnyl Estela <uncomfy+openbuildservice(a)uncomfyhalomacro.pl>
+
+- Update to version 0.17.1:
+ * backend/x11: don't send ConfigureRequest with the same size
+ * backend/x11: check buffer format in output_test()
+ * tinywl: fix wlroots dependency constraint in Makefile
+ * viewporter: rename state var in viewport_handle_surface_commit()
+ * viewporter: listen to client_commit
+ * viewporter: fix src buffer bounds check
+ * render/egl: fallback to GBM FD if EGLDevice is not available
+ * render: disable linux-dmabuf without DRM FD
+ * cursor: send surface scale events
+ * cursor: fix initial cursor position for new outputs
+ * xcursor: fix duplicate cursor check check in load_callback()
+ * input-method-v2: drop unnecessary variable and cast
+ * output-layout: fix missing global for outputs with a custom mode
+ * build: bump vesion to 0.17.1
+ * types/output: emit destroy event before destroying global
+ * input-method-v2: free current strings on commit
+ * input-method-v2: validate commit serial
+
+-------------------------------------------------------------------
Old:
----
wlroots-0.17.0.tar.gz
wlroots-0.17.0.tar.gz.sig
New:
----
wlroots-0.17.1.tar.gz
wlroots-0.17.1.tar.gz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ wlroots.spec ++++++
--- /var/tmp/diff_new_pack.HfkQYE/_old 2024-01-03 12:27:38.765302541 +0100
+++ /var/tmp/diff_new_pack.HfkQYE/_new 2024-01-03 12:27:38.765302541 +0100
@@ -1,7 +1,7 @@
#
# spec file for package wlroots
#
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
%bcond_without xcb_errors
Name: wlroots
-Version: 0.17.0
+Version: 0.17.1
Release: 0
Summary: Modular Wayland compositor library
License: MIT
++++++ wlroots-0.17.0.tar.gz -> wlroots-0.17.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/backend/x11/output.c new/wlroots-0.17.1/backend/x11/output.c
--- old/wlroots-0.17.0/backend/x11/output.c 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/backend/x11/output.c 2023-12-21 19:42:26.000000000 +0100
@@ -64,6 +64,10 @@
struct wlr_x11_output *output = get_x11_output_from_output(wlr_output);
struct wlr_x11_backend *x11 = output->x11;
+ if (width == output->win_width && height == output->win_height) {
+ return true;
+ }
+
const uint32_t values[] = { width, height };
xcb_void_cookie_t cookie = xcb_configure_window_checked(
x11->xcb, output->win,
@@ -77,6 +81,9 @@
return false;
}
+ output->win_width = width;
+ output->win_height = height;
+
// Move the pointer to its new location
update_x11_pointer_position(output, output->x11->time);
@@ -114,6 +121,9 @@
static bool output_test(struct wlr_output *wlr_output,
const struct wlr_output_state *state) {
+ struct wlr_x11_output *output = get_x11_output_from_output(wlr_output);
+ struct wlr_x11_backend *x11 = output->x11;
+
uint32_t unsupported = state->committed & ~SUPPORTED_OUTPUT_STATE;
if (unsupported != 0) {
wlr_log(WLR_DEBUG, "Unsupported output state fields: 0x%"PRIx32,
@@ -133,6 +143,22 @@
}
}
+ if (state->committed & WLR_OUTPUT_STATE_BUFFER) {
+ struct wlr_buffer *buffer = state->buffer;
+ struct wlr_dmabuf_attributes dmabuf_attrs;
+ struct wlr_shm_attributes shm_attrs;
+ uint32_t format = DRM_FORMAT_INVALID;
+ if (wlr_buffer_get_dmabuf(buffer, &dmabuf_attrs)) {
+ format = dmabuf_attrs.format;
+ } else if (wlr_buffer_get_shm(buffer, &shm_attrs)) {
+ format = shm_attrs.format;
+ }
+ if (format != x11->x11_format->drm) {
+ wlr_log(WLR_DEBUG, "Unsupported buffer format");
+ return false;
+ }
+ }
+
if (state->committed & WLR_OUTPUT_STATE_MODE) {
assert(state->mode_type == WLR_OUTPUT_STATE_MODE_CUSTOM);
@@ -579,6 +605,9 @@
x11->screen->root, 0, 0, wlr_output->width, wlr_output->height, 0,
XCB_WINDOW_CLASS_INPUT_OUTPUT, x11->visualid, mask, values);
+ output->win_width = wlr_output->width;
+ output->win_height = wlr_output->height;
+
struct {
xcb_input_event_mask_t head;
xcb_input_xi_event_mask_t mask;
@@ -640,6 +669,9 @@
return;
}
+ output->win_width = ev->width;
+ output->win_height = ev->height;
+
struct wlr_output_state state;
wlr_output_state_init(&state);
wlr_output_state_set_custom_mode(&state, ev->width, ev->height, 0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/include/backend/x11.h new/wlroots-0.17.1/include/backend/x11.h
--- old/wlroots-0.17.0/include/backend/x11.h 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/include/backend/x11.h 2023-12-21 19:42:26.000000000 +0100
@@ -35,6 +35,8 @@
xcb_window_t win;
xcb_present_event_t present_event_id;
+ int32_t win_width, win_height;
+
struct wlr_pointer pointer;
struct wlr_touch touch;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/meson.build new/wlroots-0.17.1/meson.build
--- old/wlroots-0.17.0/meson.build 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/meson.build 2023-12-21 19:42:26.000000000 +0100
@@ -1,7 +1,7 @@
project(
'wlroots',
'c',
- version: '0.17.0',
+ version: '0.17.1',
license: 'MIT',
meson_version: '>=0.59.0',
default_options: [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/render/egl.c new/wlroots-0.17.1/render/egl.c
--- old/wlroots-0.17.0/render/egl.c 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/render/egl.c 2023-12-21 19:42:26.000000000 +0100
@@ -954,7 +954,7 @@
return render_name;
}
-int wlr_egl_dup_drm_fd(struct wlr_egl *egl) {
+static int dup_egl_device_drm_fd(struct wlr_egl *egl) {
if (egl->device == EGL_NO_DEVICE_EXT || (!egl->exts.EXT_device_drm &&
!egl->exts.EXT_device_drm_render_node)) {
return -1;
@@ -1001,3 +1001,21 @@
return render_fd;
}
+
+int wlr_egl_dup_drm_fd(struct wlr_egl *egl) {
+ int fd = dup_egl_device_drm_fd(egl);
+ if (fd >= 0) {
+ return fd;
+ }
+
+ // Fallback to GBM's FD if we can't use EGLDevice
+ if (egl->gbm_device == NULL) {
+ return -1;
+ }
+
+ fd = fcntl(gbm_device_get_fd(egl->gbm_device), F_DUPFD_CLOEXEC, 0);
+ if (fd < 0) {
+ wlr_log_errno(WLR_ERROR, "Failed to dup GBM FD");
+ }
+ return fd;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/render/wlr_renderer.c new/wlroots-0.17.1/render/wlr_renderer.c
--- old/wlroots-0.17.0/render/wlr_renderer.c 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/render/wlr_renderer.c 2023-12-21 19:42:26.000000000 +0100
@@ -228,13 +228,10 @@
return false;
}
- if (wlr_renderer_get_dmabuf_texture_formats(r) != NULL) {
- if (wlr_renderer_get_drm_fd(r) >= 0) {
- if (wlr_drm_create(wl_display, r) == NULL) {
- return false;
- }
- } else {
- wlr_log(WLR_INFO, "Cannot get renderer DRM FD, disabling wl_drm");
+ if (wlr_renderer_get_dmabuf_texture_formats(r) != NULL &&
+ wlr_renderer_get_drm_fd(r) >= 0) {
+ if (wlr_drm_create(wl_display, r) == NULL) {
+ return false;
}
if (wlr_linux_dmabuf_v1_create_with_renderer(wl_display, 4, r) == NULL) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/tinywl/Makefile new/wlroots-0.17.1/tinywl/Makefile
--- old/wlroots-0.17.0/tinywl/Makefile 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/tinywl/Makefile 2023-12-21 19:42:26.000000000 +0100
@@ -1,7 +1,7 @@
WAYLAND_PROTOCOLS=$(shell pkg-config --variable=pkgdatadir wayland-protocols)
WAYLAND_SCANNER=$(shell pkg-config --variable=wayland_scanner wayland-scanner)
LIBS=\
- $(shell pkg-config --cflags --libs "wlroots >= 0.17.0-dev") \
+ $(shell pkg-config --cflags --libs "wlroots >= 0.17.0") \
$(shell pkg-config --cflags --libs wayland-server) \
$(shell pkg-config --cflags --libs xkbcommon)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/types/output/output.c new/wlroots-0.17.1/types/output/output.c
--- old/wlroots-0.17.0/types/output/output.c 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/types/output/output.c 2023-12-21 19:42:26.000000000 +0100
@@ -450,11 +450,12 @@
return;
}
+ wl_signal_emit_mutable(&output->events.destroy, output);
+
wl_list_remove(&output->display_destroy.link);
wlr_output_destroy_global(output);
output_clear_back_buffer(output);
- wl_signal_emit_mutable(&output->events.destroy, output);
wlr_addon_set_finish(&output->addons);
// The backend is responsible for free-ing the list of modes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/types/wlr_cursor.c new/wlroots-0.17.1/types/wlr_cursor.c
--- old/wlroots-0.17.0/types/wlr_cursor.c 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/types/wlr_cursor.c 2023-12-21 19:42:26.000000000 +0100
@@ -6,6 +6,7 @@
#include <stdlib.h>
#include <wayland-server-core.h>
#include <wlr/types/wlr_cursor.h>
+#include <wlr/types/wlr_fractional_scale_v1.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_output_layout.h>
#include <wlr/types/wlr_output.h>
@@ -264,6 +265,16 @@
return ret;
}
+static void output_cursor_move(struct wlr_cursor_output_cursor *output_cursor) {
+ struct wlr_cursor *cur = output_cursor->cursor;
+
+ double output_x = cur->x, output_y = cur->y;
+ wlr_output_layout_output_coords(cur->state->layout,
+ output_cursor->output_cursor->output, &output_x, &output_y);
+ wlr_output_cursor_move(output_cursor->output_cursor,
+ output_x, output_y);
+}
+
static void cursor_warp_unchecked(struct wlr_cursor *cur,
double lx, double ly) {
assert(cur->state->layout);
@@ -272,17 +283,13 @@
return;
}
+ cur->x = lx;
+ cur->y = ly;
+
struct wlr_cursor_output_cursor *output_cursor;
wl_list_for_each(output_cursor, &cur->state->output_cursors, link) {
- double output_x = lx, output_y = ly;
- wlr_output_layout_output_coords(cur->state->layout,
- output_cursor->output_cursor->output, &output_x, &output_y);
- wlr_output_cursor_move(output_cursor->output_cursor,
- output_x, output_y);
+ output_cursor_move(output_cursor);
}
-
- cur->x = lx;
- cur->y = ly;
}
/**
@@ -545,6 +552,16 @@
} else {
wlr_surface_send_leave(surface, output);
}
+
+ float scale = 1;
+ struct wlr_surface_output *surface_output;
+ wl_list_for_each(surface_output, &surface->current_outputs, link) {
+ if (surface_output->output->scale > scale) {
+ scale = surface_output->output->scale;
+ }
+ }
+ wlr_fractional_scale_v1_notify_scale(surface, scale);
+ wlr_surface_set_preferred_buffer_scale(surface, ceil(scale));
} else if (cur->state->xcursor_name != NULL) {
struct wlr_xcursor_manager *manager = cur->state->xcursor_manager;
const char *name = cur->state->xcursor_name;
@@ -1094,6 +1111,7 @@
&output_cursor->output_commit);
output_cursor->output_commit.notify = output_cursor_output_handle_output_commit;
+ output_cursor_move(output_cursor);
cursor_output_cursor_update(output_cursor);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/types/wlr_input_method_v2.c new/wlroots-0.17.1/types/wlr_input_method_v2.c
--- old/wlroots-0.17.0/types/wlr_input_method_v2.c 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/types/wlr_input_method_v2.c 2023-12-21 19:42:26.000000000 +0100
@@ -80,11 +80,17 @@
if (!input_method) {
return;
}
+ if (serial != input_method->current_serial) {
+ free(input_method->pending.commit_text);
+ free(input_method->pending.preedit.text);
+ input_method->pending = (struct wlr_input_method_v2_state){0};
+ return;
+ }
+ free(input_method->current.commit_text);
+ free(input_method->current.preedit.text);
input_method->current = input_method->pending;
- input_method->current_serial = serial;
- struct wlr_input_method_v2_state default_state = {0};
- input_method->pending = default_state;
- wl_signal_emit_mutable(&input_method->events.commit, (void*)input_method);
+ input_method->pending = (struct wlr_input_method_v2_state){0};
+ wl_signal_emit_mutable(&input_method->events.commit, input_method);
}
static void im_commit_string(struct wl_client *client,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/types/wlr_output_layout.c new/wlroots-0.17.1/types/wlr_output_layout.c
--- old/wlroots-0.17.0/types/wlr_output_layout.c 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/types/wlr_output_layout.c 2023-12-21 19:42:26.000000000 +0100
@@ -106,7 +106,7 @@
static void output_update_global(struct wlr_output *output) {
// Don't expose the output if it doesn't have a current mode
- if (wl_list_empty(&output->modes) || output->current_mode != NULL) {
+ if (output->width > 0 && output->height > 0) {
wlr_output_create_global(output);
} else {
wlr_output_destroy_global(output);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/types/wlr_viewporter.c new/wlroots-0.17.1/types/wlr_viewporter.c
--- old/wlroots-0.17.0/types/wlr_viewporter.c 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/types/wlr_viewporter.c 2023-12-21 19:42:26.000000000 +0100
@@ -13,7 +13,7 @@
struct wlr_addon addon;
- struct wl_listener surface_commit;
+ struct wl_listener surface_client_commit;
};
static const struct wp_viewport_interface viewport_impl;
@@ -112,7 +112,7 @@
wlr_addon_finish(&viewport->addon);
wl_resource_set_user_data(viewport->resource, NULL);
- wl_list_remove(&viewport->surface_commit.link);
+ wl_list_remove(&viewport->surface_client_commit.link);
free(viewport);
}
@@ -131,27 +131,37 @@
viewport_destroy(viewport);
}
-static void viewport_handle_surface_commit(struct wl_listener *listener,
+static bool check_src_buffer_bounds(const struct wlr_surface_state *state) {
+ int width = state->buffer_width / state->scale;
+ int height = state->buffer_height / state->scale;
+ if (state->transform & WL_OUTPUT_TRANSFORM_90) {
+ int tmp = width;
+ width = height;
+ height = tmp;
+ }
+
+ struct wlr_fbox box = state->viewport.src;
+ return box.x + box.width <= width && box.y + box.height <= height;
+}
+
+static void viewport_handle_surface_client_commit(struct wl_listener *listener,
void *data) {
struct wlr_viewport *viewport =
- wl_container_of(listener, viewport, surface_commit);
+ wl_container_of(listener, viewport, surface_client_commit);
- struct wlr_surface_state *current = &viewport->surface->pending;
+ struct wlr_surface_state *state = &viewport->surface->pending;
- if (!current->viewport.has_dst &&
- (floor(current->viewport.src.width) != current->viewport.src.width ||
- floor(current->viewport.src.height) != current->viewport.src.height)) {
+ if (!state->viewport.has_dst &&
+ (floor(state->viewport.src.width) != state->viewport.src.width ||
+ floor(state->viewport.src.height) != state->viewport.src.height)) {
wl_resource_post_error(viewport->resource, WP_VIEWPORT_ERROR_BAD_SIZE,
"wl_viewport.set_source width and height must be integers "
"when the destination rectangle is unset");
return;
}
- if (current->viewport.has_src && current->buffer != NULL &&
- (current->viewport.src.x + current->viewport.src.width >
- current->buffer_width ||
- current->viewport.src.y + current->viewport.src.height >
- current->buffer_height)) {
+ if (state->viewport.has_src && state->buffer != NULL &&
+ !check_src_buffer_bounds(state)) {
wl_resource_post_error(viewport->resource, WP_VIEWPORT_ERROR_OUT_OF_BUFFER,
"source rectangle out of buffer bounds");
return;
@@ -195,8 +205,8 @@
wlr_addon_init(&viewport->addon, &surface->addons, NULL, &surface_addon_impl);
- viewport->surface_commit.notify = viewport_handle_surface_commit;
- wl_signal_add(&surface->events.commit, &viewport->surface_commit);
+ viewport->surface_client_commit.notify = viewport_handle_surface_client_commit;
+ wl_signal_add(&surface->events.client_commit, &viewport->surface_client_commit);
}
static const struct wp_viewporter_interface viewporter_impl = {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.17.0/xcursor/wlr_xcursor.c new/wlroots-0.17.1/xcursor/wlr_xcursor.c
--- old/wlroots-0.17.0/xcursor/wlr_xcursor.c 2023-11-21 17:06:13.000000000 +0100
+++ new/wlroots-0.17.1/xcursor/wlr_xcursor.c 2023-12-21 19:42:26.000000000 +0100
@@ -170,10 +170,13 @@
return cursor;
}
+static struct wlr_xcursor *xcursor_theme_get_cursor(struct wlr_xcursor_theme *theme,
+ const char *name);
+
static void load_callback(struct xcursor_images *images, void *data) {
struct wlr_xcursor_theme *theme = data;
- if (wlr_xcursor_theme_get_cursor(theme, images->name)) {
+ if (xcursor_theme_get_cursor(theme, images->name)) {
xcursor_images_destroy(images);
return;
}
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package libtpms for openSUSE:Factory checked in at 2024-01-03 12:27:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libtpms (Old)
and /work/SRC/openSUSE:Factory/.libtpms.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libtpms"
Wed Jan 3 12:27:23 2024 rev:19 rq:1135332 version:0.9.6
Changes:
--------
--- /work/SRC/openSUSE:Factory/libtpms/libtpms.changes 2023-03-08 14:51:28.990320107 +0100
+++ /work/SRC/openSUSE:Factory/.libtpms.new.28375/libtpms.changes 2024-01-03 12:27:35.041166544 +0100
@@ -6,0 +7 @@
+- 0001-tpm2-Check-size-of-buffer-before-accessing-it-CVE-20.patch: upstreamed
@@ -47,0 +49,4 @@
+- Used in SLE:
+ 0001-tpm2-Reset-TPM2B-buffer-sizes-after-test-fails-for-v.patch
+ 0002-tpm2-Add-maxSize-parameter-to-TPM2B_Marshal-for-sani.patch
+ 0003-tpm2-Restore-original-value-if-unmarsalled-value-was.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package alacritty for openSUSE:Factory checked in at 2024-01-03 12:27:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/alacritty (Old)
and /work/SRC/openSUSE:Factory/.alacritty.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "alacritty"
Wed Jan 3 12:27:22 2024 rev:36 rq:1135895 version:0.13.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/alacritty/alacritty.changes 2023-10-12 11:36:25.692694815 +0200
+++ /work/SRC/openSUSE:Factory/.alacritty.new.28375/alacritty.changes 2024-01-03 12:27:29.404960723 +0100
@@ -1,0 +2,90 @@
+Sun Dec 31 17:19:03 UTC 2023 - Jan-Luca Kiok <opensuse-packages(a)jlk.one>
+
+- Enable automatic updates of vendored dependencies
+- Remove cargo_config since it's now build by cargo_vendor
+- Generate manpages via scdoc
+- Update to version 0.13.0:
+ * Added
+ + Warnings for unused configuration file options
+ + Config option persist in hints config section
+ + Support for keybindings with dead keys
+ + Back/Forward mouse buttons support in bindings
+ + Copy global IPC options (-w -1) for new windows
+ + Support startup notify protocol to raise initial window on
+ Wayland/X11
+ + Debug option prefer_egl to prioritize EGL over other display
+ APIs
+ + Inline vi-mode search using f/F/t/T
+ + window.blur config option to request blur for transparent
+ windows
+ + --option argument for alacritty msg create-window
+ + Support for DECRQM/DECRPM escape sequences
+ + Support for kitty's keyboard protocol
+ * Changed
+ + Mode-specific bindings can now be bound in any mode for
+ easier macros
+ + --help output is more compact now and uses more neutral
+ palette
+ + Configuration file now uses TOML instead of YAML
+ + Deprecated config option draw_bold_text_with_bright_colors,
+ use colors.draw_bold_text_with_bright_colors
+ + Deprecated config option key_bindings, use keyboard.bindings
+ + Deprecated config option mouse_bindings, use mouse.bindings
+ + The default colorscheme is now based on base16 classic dark
+ + IME popup now tries to not obscure the current cursor line
+ + The double click threshold was raised to 400ms
+ + OSC 52 paste ability is now disabled by default; use
+ terminal.osc52 to adjust it
+ + Apply colors.transparent_background_colors for selections,
+ hints, and search matches
+ + Underline full hint during keyboard selection
+ + Synchronized updates now use CSI 2026 instead of legacy DCS
+ variant
+ + In mouse mode with Shift pressed, mouse bindings without
+ Shift are only triggered if no exact binding (i.e. one with
+ Shift) is found.
+ + Use built-in font for powerline symbols from U+E0B0 to U+E0B3
+ + Default bell.animation is now Linear
+ + IncreaseFontSize/DecreaseFontSize step is now 1px
+ + font.size precision was raised to 6 floating point digits
+ + Default font size to 11.25 matching 15px
+ + Xft.dpi is now reloaded when xsettingd change its value on
+ X11
+ * Fixed
+ + Unconditional query of xdg-portal settings on Wayland
+ + Maximized startup mode not filling the screen properly on
+ GNOME Wayland
+ + Default Vi key bindings for Last/First actions not working on
+ X11/Wayland
+ + Cut off wide characters in preedit string
+ + Scrolling on touchscreens
+ + Double clicking on CSD titlebar not always maximizing a
+ window on Wayland
+ + Excessive memory usage when using regexes with a large number
+ of possible states window.decorations_theme_variant not live
+ reloading
+ + Copy/Paste being truncated to 64KiB on Wayland
+ + X11 clipboard lagging behind sometimes
+ + High wakeup count on Wayland due to clipboard polling
+ + Blocking paste freezing alacritty on Wayland
+ + Crash on exit when using NVIDIA binary drivers on Wayland
+ + window.startup_mode applied to window again when creating new
+ tab
+ + Crash when leaving search after resize
+ + Cursor being hidden after reaching cursor blinking timeout
+ + Message bar content getting stuck after closing with multiple
+ messages on Wayland
+ + Vi cursor position not redrawn on PageUp/PageDown without
+ scrollback
+ + Cursor not updating when blinking and viewport is scrolled
+ + Failure to start with recent version of mesa's i915 driver
+ + Error when using chars inside the mouse bindings
+ * Removed
+ + Config option background_opacity, use
+ window.background_opacity
+ + Config option colors.search.bar, use colors.footer_bar
+ instead
+ + Config option mouse.url, use the hints config section
+ + Config options mouse.double_click and mouse.triple_click
+
+-------------------------------------------------------------------
Old:
----
alacritty-0.12.3.tar.xz
cargo_config
New:
----
alacritty-0.13.0.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ alacritty.spec ++++++
--- /var/tmp/diff_new_pack.8YFYIY/_old 2024-01-03 12:27:32.393069842 +0100
+++ /var/tmp/diff_new_pack.8YFYIY/_new 2024-01-03 12:27:32.409070426 +0100
@@ -17,14 +17,13 @@
Name: alacritty
-Version: 0.12.3
+Version: 0.13.0
Release: 0
Summary: A GPU-accelerated terminal emulator
License: Apache-2.0
URL: https://github.com/alacritty/alacritty
Source0: %{name}-%{version}.tar.xz
Source1: vendor.tar.xz
-Source2: cargo_config
Source3: README.suse-maint
BuildRequires: cargo-packaging
BuildRequires: cmake
@@ -33,6 +32,7 @@
BuildRequires: libxcb-devel
BuildRequires: libxkbcommon-devel
BuildRequires: pkgconfig
+BuildRequires: scdoc
BuildRequires: update-desktop-files
BuildRequires: xclip
BuildRequires: pkgconfig(fontconfig)
@@ -70,8 +70,6 @@
%prep
%autosetup -a1
-mkdir .cargo
-cp %{SOURCE2} .cargo/config
%ifarch aarch64 ppc64le riscv64
# Remove checksum of config.guess and config.sub since aarch64 and ppc64le modify them
@@ -92,14 +90,13 @@
# rm duplicate license and useless toml file
rm -fr %{buildroot}%{_datadir}
-# install man page and completions
+# install completions
install -Dm 0644 extra/linux/Alacritty.desktop \
%{buildroot}/%{_datadir}/applications/Alacritty.desktop
install -Dm 0644 extra/logo/alacritty-simple.svg \
%{buildroot}/%{_datadir}/pixmaps/Alacritty.svg
install -Dm 0644 extra/linux/org.alacritty.Alacritty.appdata.xml \
%{buildroot}/%{_datadir}/appdata/org.alacritty.Alacritty.appdata.xml
-install -Dm 0644 extra/%{name}.man %{buildroot}/%{_mandir}/man1/%{name}.1
install -Dm 0644 extra/completions/%{name}.bash \
%{buildroot}/%{_datadir}/bash-completion/completions/%{name}
install -Dm 0644 extra/completions/%{name}.fish \
@@ -107,6 +104,13 @@
install -Dm 0644 extra/completions/_%{name} \
%{buildroot}/%{_datadir}/zsh/site-functions/_%{name}
+# build and install manpages
+mkdir -p %{buildroot}%{_mandir}/man{1,5}
+scdoc < extra/man/%{name}.1.scd > %{buildroot}%{_mandir}/man1/%{name}.1
+scdoc < extra/man/%{name}-msg.1.scd > %{buildroot}%{_mandir}/man1/%{name}-msg.1
+scdoc < extra/man/%{name}.5.scd > %{buildroot}%{_mandir}/man5/%{name}.5
+scdoc < extra/man/%{name}-bindings.5.scd > %{buildroot}%{_mandir}/man5/%{name}-bindings.5
+
# install desktop file
%suse_update_desktop_file Alacritty
@@ -114,9 +118,12 @@
%files
%license LICENSE-APACHE
-%doc alacritty.yml CHANGELOG.md CONTRIBUTING.md README.md
+%doc CHANGELOG.md CONTRIBUTING.md README.md
%{_bindir}/%{name}
%{_mandir}/man1/%{name}.1%{?ext_man}
+%{_mandir}/man1/%{name}-msg.1%{?ext_man}
+%{_mandir}/man5/%{name}.5%{?ext_man}
+%{_mandir}/man5/%{name}-bindings.5%{?ext_man}
%{_datadir}/applications/Alacritty.desktop
%{_datadir}/pixmaps/Alacritty.svg
%{_datadir}/appdata/org.alacritty.Alacritty.appdata.xml
++++++ _service ++++++
--- /var/tmp/diff_new_pack.8YFYIY/_old 2024-01-03 12:27:32.833085910 +0100
+++ /var/tmp/diff_new_pack.8YFYIY/_new 2024-01-03 12:27:32.869087225 +0100
@@ -4,7 +4,7 @@
<service name="obs_scm" mode="manual">
<param name="scm">git</param>
<param name="url">https://github.com/alacritty/alacritty.git</param>
- <param name="revision">refs/tags/v0.12.3</param>
+ <param name="revision">refs/tags/v0.13.0</param>
<param name="match-tag">v*</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">v(.*)</param>
@@ -36,9 +36,8 @@
<service name="cargo_vendor" mode="manual">
<param name="src">alacritty*.tar.*</param>
<param name="compression">xz</param>
- <param name="update">false</param>
+ <param name="update">true</param>
</service>
<service name="cargo_audit" mode="manual"/>
</services>
-
++++++ alacritty-0.12.3.tar.xz -> alacritty-0.13.0.tar.xz ++++++
++++ 28230 lines of diff (skipped)
++++++ vendor.tar.xz ++++++
/work/SRC/openSUSE:Factory/alacritty/vendor.tar.xz /work/SRC/openSUSE:Factory/.alacritty.new.28375/vendor.tar.xz differ: char 15, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package obs-service-cargo for openSUSE:Factory checked in at 2024-01-03 12:27:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/obs-service-cargo (Old)
and /work/SRC/openSUSE:Factory/.obs-service-cargo.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "obs-service-cargo"
Wed Jan 3 12:27:19 2024 rev:9 rq:1135890 version:0.9.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/obs-service-cargo/obs-service-cargo.changes 2023-12-13 18:35:36.371831294 +0100
+++ /work/SRC/openSUSE:Factory/.obs-service-cargo.new.28375/obs-service-cargo.changes 2024-01-03 12:27:23.508745408 +0100
@@ -1,0 +2,6 @@
+Sun Dec 24 16:34:40 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice(a)uncomfyhalomacro.pl>
+
+- Update to 0.9.0:
+ * No code change *
+
+-------------------------------------------------------------------
Old:
----
obs-service-cargo-0.8.21.tar.gz
New:
----
obs-service-cargo-0.9.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ obs-service-cargo.spec ++++++
--- /var/tmp/diff_new_pack.nBN7Vj/_old 2024-01-03 12:27:27.396887393 +0100
+++ /var/tmp/diff_new_pack.nBN7Vj/_new 2024-01-03 12:27:27.396887393 +0100
@@ -22,7 +22,7 @@
Group: Development/Tools/Building
# Repository name subject to change
URL: https://github.com/openSUSE/obs-service-cargo_vendor
-Version: 0.8.21
+Version: 0.9.0
Release: 0
Source0: https://github.com/openSUSE/obs-service-cargo_vendor/archive/refs/tags/v%{v…
Source1: vendor.tar.zst
++++++ obs-service-cargo-0.8.21.tar.gz -> obs-service-cargo-0.9.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-service-cargo_vendor-0.8.21/Cargo.lock new/obs-service-cargo_vendor-0.9.0/Cargo.lock
--- old/obs-service-cargo_vendor-0.8.21/Cargo.lock 2023-12-11 15:20:08.000000000 +0100
+++ new/obs-service-cargo_vendor-0.9.0/Cargo.lock 2023-12-24 17:22:32.000000000 +0100
@@ -160,7 +160,7 @@
[[package]]
name = "bulk-updater"
-version = "0.8.21"
+version = "0.9.0"
dependencies = [
"clap",
"obs-service-cargo",
@@ -287,7 +287,7 @@
"heck",
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.42",
]
[[package]]
@@ -335,9 +335,9 @@
[[package]]
name = "crossbeam"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+checksum = "6eb9105919ca8e40d437fc9cbb8f1975d916f1bd28afe795a48aae32a2cc8920"
dependencies = [
"cfg-if",
"crossbeam-channel",
@@ -349,9 +349,9 @@
[[package]]
name = "crossbeam-channel"
-version = "0.5.8"
+version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2"
dependencies = [
"cfg-if",
"crossbeam-utils",
@@ -359,9 +359,9 @@
[[package]]
name = "crossbeam-deque"
-version = "0.8.3"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751"
dependencies = [
"cfg-if",
"crossbeam-epoch",
@@ -370,22 +370,20 @@
[[package]]
name = "crossbeam-epoch"
-version = "0.9.15"
+version = "0.9.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d"
dependencies = [
"autocfg",
"cfg-if",
"crossbeam-utils",
- "memoffset",
- "scopeguard",
]
[[package]]
name = "crossbeam-queue"
-version = "0.3.8"
+version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+checksum = "adc6598521bb5a83d491e8c1fe51db7296019d2ca3cb93cc6c2a20369a4d78a2"
dependencies = [
"cfg-if",
"crossbeam-utils",
@@ -393,9 +391,9 @@
[[package]]
name = "crossbeam-utils"
-version = "0.8.16"
+version = "0.8.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c"
dependencies = [
"cfg-if",
]
@@ -548,42 +546,42 @@
[[package]]
name = "futures-channel"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
dependencies = [
"futures-core",
]
[[package]]
name = "futures-core"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
[[package]]
name = "futures-io"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
[[package]]
name = "futures-sink"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
[[package]]
name = "futures-task"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
[[package]]
name = "futures-util"
-version = "0.3.29"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
dependencies = [
"futures-core",
"futures-io",
@@ -733,7 +731,7 @@
"gix-chunk",
"gix-features",
"gix-hash",
- "memmap2 0.9.0",
+ "memmap2 0.9.3",
"thiserror",
]
@@ -963,7 +961,7 @@
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.42",
]
[[package]]
@@ -1396,11 +1394,11 @@
[[package]]
name = "home"
-version = "0.5.5"
+version = "0.5.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -1439,9 +1437,9 @@
[[package]]
name = "hyper"
-version = "0.14.27"
+version = "0.14.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
dependencies = [
"bytes",
"futures-channel",
@@ -1454,7 +1452,7 @@
"httpdate",
"itoa",
"pin-project-lite",
- "socket2 0.4.10",
+ "socket2",
"tokio",
"tower-service",
"tracing",
@@ -1656,23 +1654,14 @@
[[package]]
name = "memmap2"
-version = "0.9.0"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375"
+checksum = "45fd3a57831bf88bc63f8cebc0cf956116276e97fef3966103e96416209f7c92"
dependencies = [
"libc",
]
[[package]]
-name = "memoffset"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
name = "mime"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1754,16 +1743,16 @@
[[package]]
name = "object"
-version = "0.32.1"
+version = "0.32.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
dependencies = [
"memchr",
]
[[package]]
name = "obs-service-cargo"
-version = "0.8.21"
+version = "0.9.0"
dependencies = [
"bzip2",
"clap",
@@ -1882,9 +1871,9 @@
[[package]]
name = "pkg-config"
-version = "0.3.27"
+version = "0.3.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a"
[[package]]
name = "platforms"
@@ -1903,9 +1892,9 @@
[[package]]
name = "proc-macro2"
-version = "1.0.70"
+version = "1.0.71"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8"
dependencies = [
"unicode-ident",
]
@@ -2036,9 +2025,9 @@
[[package]]
name = "reqwest"
-version = "0.11.22"
+version = "0.11.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41"
dependencies = [
"async-compression",
"base64",
@@ -2262,7 +2251,7 @@
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.42",
]
[[package]]
@@ -2278,9 +2267,9 @@
[[package]]
name = "serde_spanned"
-version = "0.6.4"
+version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
dependencies = [
"serde",
]
@@ -2344,16 +2333,6 @@
[[package]]
name = "socket2"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
-dependencies = [
- "libc",
- "winapi",
-]
-
-[[package]]
-name = "socket2"
version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
@@ -2393,9 +2372,9 @@
[[package]]
name = "syn"
-version = "2.0.40"
+version = "2.0.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13fa70a4ee923979ffb522cacce59d34421ebdea5625e1073c4326ef9d2dd42e"
+checksum = "5b7d0a2c048d661a1a59fcd7355baa232f7ed34e0ee4df2eef3c1c1c0d3852d8"
dependencies = [
"proc-macro2",
"quote",
@@ -2488,22 +2467,22 @@
[[package]]
name = "thiserror"
-version = "1.0.50"
+version = "1.0.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.50"
+version = "1.0.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.42",
]
[[package]]
@@ -2518,9 +2497,9 @@
[[package]]
name = "time"
-version = "0.3.30"
+version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e"
dependencies = [
"deranged",
"itoa",
@@ -2540,9 +2519,9 @@
[[package]]
name = "time-macros"
-version = "0.2.15"
+version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f"
dependencies = [
"time-core",
]
@@ -2564,9 +2543,9 @@
[[package]]
name = "tokio"
-version = "1.35.0"
+version = "1.35.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
dependencies = [
"backtrace",
"bytes",
@@ -2574,7 +2553,7 @@
"mio",
"num_cpus",
"pin-project-lite",
- "socket2 0.5.5",
+ "socket2",
"windows-sys 0.48.0",
]
@@ -2686,7 +2665,7 @@
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.42",
]
[[package]]
@@ -2862,7 +2841,7 @@
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.42",
"wasm-bindgen-shared",
]
@@ -2896,7 +2875,7 @@
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.40",
+ "syn 2.0.42",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -3091,9 +3070,9 @@
[[package]]
name = "winnow"
-version = "0.5.26"
+version = "0.5.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b67b5f0a4e7a27a64c651977932b9dc5667ca7fc31ac44b03ed37a0cf42fdfff"
+checksum = "9b5c3db89721d50d0e2a673f5043fc4722f76dcc352d7b1ab8b8288bed4ed2c5"
dependencies = [
"memchr",
]
@@ -3110,9 +3089,9 @@
[[package]]
name = "xattr"
-version = "1.1.2"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d367426ae76bdfce3d8eaea6e94422afd6def7d46f9c89e2980309115b3c2c41"
+checksum = "a7dae5072fe1f8db8f8d29059189ac175196e410e40ba42d5d4684ae2f750995"
dependencies = [
"libc",
"linux-raw-sys",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-service-cargo_vendor-0.8.21/Cargo.toml new/obs-service-cargo_vendor-0.9.0/Cargo.toml
--- old/obs-service-cargo_vendor-0.8.21/Cargo.toml 2023-12-11 15:20:08.000000000 +0100
+++ new/obs-service-cargo_vendor-0.9.0/Cargo.toml 2023-12-24 17:22:32.000000000 +0100
@@ -12,7 +12,7 @@
resolver = "2"
[workspace.package]
-version = "0.8.21"
+version = "0.9.0"
description = "OBS Source Service and utilities for Rust software packaging."
authors = [
"Soc Virnyl Estela <socvirnyl.estela(a)uncomfyhalomacro.pl>",
@@ -58,6 +58,7 @@
disallowed_types = "deny"
manual_let_else = "deny"
unreachable = "allow"
+unit_arg = "allow"
[profile.release]
lto = true # Enable Link Time Optimization.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-service-cargo_vendor-0.8.21/README.md new/obs-service-cargo_vendor-0.9.0/README.md
--- old/obs-service-cargo_vendor-0.8.21/README.md 2023-12-11 15:20:08.000000000 +0100
+++ new/obs-service-cargo_vendor-0.9.0/README.md 2023-12-24 17:22:32.000000000 +0100
@@ -7,6 +7,10 @@
This is a Rust written variant for https://github.com/openSUSE/obs-service-cargo_vendor and https://github.com/obs-service-cargo_audit.
> [!IMPORTANT]
+> The original obs-service-cargo_audit is now deprecated as the vendoring process now
+> includes audit.
+
+> [!IMPORTANT]
> An informative tutorial for packaging Rust software in openSUSE can be found at https://en.opensuse.org/openSUSE:Packaging_Rust_Software.
## How to use OBS Service `cargo vendor`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-service-cargo_vendor-0.8.21/bulk-updater/Cargo.toml new/obs-service-cargo_vendor-0.9.0/bulk-updater/Cargo.toml
--- old/obs-service-cargo_vendor-0.8.21/bulk-updater/Cargo.toml 2023-12-11 15:20:08.000000000 +0100
+++ new/obs-service-cargo_vendor-0.9.0/bulk-updater/Cargo.toml 2023-12-24 17:22:32.000000000 +0100
@@ -10,7 +10,7 @@
[dependencies]
quick-xml = { workspace = true, features = ["overlapped-lists", "serialize"] }
-obs-service-cargo = { path = "../cargo", version = "^0.8" }
+obs-service-cargo = { path = "../cargo", version = "0" }
clap = { workspace = true, features = ["derive"] }
serde = { workspace = true, features = ["derive", "alloc"] }
tracing.workspace = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-service-cargo_vendor-0.8.21/cargo/src/cli.rs new/obs-service-cargo_vendor-0.9.0/cargo/src/cli.rs
--- old/obs-service-cargo_vendor-0.8.21/cargo/src/cli.rs 2023-12-11 15:20:08.000000000 +0100
+++ new/obs-service-cargo_vendor-0.9.0/cargo/src/cli.rs 2023-12-24 17:22:32.000000000 +0100
@@ -324,8 +324,8 @@
}
};
drop(newworkdir);
- Ok(tmpdir
+ tmpdir
.close()
- .map_err(|err| OBSCargoError::new(OBSCargoErrorKind::VendorError, err.to_string()))?)
+ .map_err(|err| OBSCargoError::new(OBSCargoErrorKind::VendorError, err.to_string()))
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-service-cargo_vendor-0.8.21/cargo/src/utils/compress.rs new/obs-service-cargo_vendor-0.9.0/cargo/src/utils/compress.rs
--- old/obs-service-cargo_vendor-0.8.21/cargo/src/utils/compress.rs 2023-12-11 15:20:08.000000000 +0100
+++ new/obs-service-cargo_vendor-0.9.0/cargo/src/utils/compress.rs 2023-12-24 17:22:32.000000000 +0100
@@ -61,7 +61,7 @@
}
}
- Ok(builder.finish()?)
+ builder.finish()
}
pub fn targz(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/obs-service-cargo_vendor-0.8.21/cargo/src/vendor.rs new/obs-service-cargo_vendor-0.9.0/cargo/src/vendor.rs
--- old/obs-service-cargo_vendor-0.8.21/cargo/src/vendor.rs 2023-12-11 15:20:08.000000000 +0100
+++ new/obs-service-cargo_vendor-0.9.0/cargo/src/vendor.rs 2023-12-24 17:22:32.000000000 +0100
@@ -92,7 +92,7 @@
)
})?;
// Write the stdout which is used by the package later.
- Ok(file_cargo_config
+ file_cargo_config
.write_all(cargo_vendor_output.as_bytes())
.map_err(|err| {
error!(?err, "Failed to write to file for cargo config");
@@ -100,7 +100,7 @@
OBSCargoErrorKind::VendorError,
"failed to write to file for cargo config".to_string(),
)
- })?)
+ })
}
pub fn compress(
++++++ vendor.tar.zst ++++++
Binary files /var/tmp/diff_new_pack.nBN7Vj/_old and /var/tmp/diff_new_pack.nBN7Vj/_new differ
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package sbctl for openSUSE:Factory checked in at 2024-01-03 12:27:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sbctl (Old)
and /work/SRC/openSUSE:Factory/.sbctl.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "sbctl"
Wed Jan 3 12:27:17 2024 rev:2 rq:1135886 version:0.13
Changes:
--------
--- /work/SRC/openSUSE:Factory/sbctl/sbctl.changes 2023-11-22 18:54:57.460344740 +0100
+++ /work/SRC/openSUSE:Factory/.sbctl.new.28375/sbctl.changes 2024-01-03 12:27:21.064656156 +0100
@@ -1,0 +2,26 @@
+Wed Dec 27 08:21:25 UTC 2023 - Joshua Smith <jsmithfpv(a)gmail.com>
+
+- Update to version 0.13:
+ * --export,-e and --database-path,-d now work properly and don't
+ overwrite the create-keys variables internally
+ * remove erronous dbx enrollment. Previous release implemented
+ support for dbx that doesn't really work as expected. It
+ would also fail to enroll keys for previously setup clients.
+ Implementation has been removed and will be iterated upon at a
+ later date.
+ * make: fix github artifact upload
+ * Change shebang
+ * Ensure file signing hook is run when initrd is rebuilt
+ * Fixed typo, removed mention enroll-keys enables Secure Boot
+ automatically
+ * Ignore Setup mode and immutable variables for export
+ * Specify file origin + always print signing message
+ * tests/utils/certs.go: drop keyUsage bitfield
+ * update manpage docs
+ * allow specifying keys and GUID paths
+ * Update README.md
+ * keys.go: drop the keyUsage bitfield
+ * Check and return Open errs
+ * Update documentation for custom dbx
+
+-------------------------------------------------------------------
Old:
----
sbctl-0.12.tar.gz
New:
----
sbctl-0.13.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ sbctl.spec ++++++
--- /var/tmp/diff_new_pack.JnrHGn/_old 2024-01-03 12:27:22.056692383 +0100
+++ /var/tmp/diff_new_pack.JnrHGn/_new 2024-01-03 12:27:22.060692529 +0100
@@ -17,7 +17,7 @@
Name: sbctl
-Version: 0.12
+Version: 0.13
Release: 0
Summary: Secure Boot key manager
License: MIT
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.JnrHGn/_old 2024-01-03 12:27:22.096693843 +0100
+++ /var/tmp/diff_new_pack.JnrHGn/_new 2024-01-03 12:27:22.100693990 +0100
@@ -1,7 +1,7 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/Foxboron/sbctl.git</param>
- <param name="changesrevision">748bc59d24a4d14087d8d92431606c5fb57afeb0</param>
+ <param name="changesrevision">ee7cf4a33c6fb3be8f192641420d8c4234f7ae31</param>
</service>
</servicedata>
(No newline at EOF)
++++++ sbctl-0.12.tar.gz -> sbctl-0.13.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/Makefile new/sbctl-0.13/Makefile
--- old/sbctl-0.12/Makefile 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/Makefile 2023-12-23 23:02:48.000000000 +0100
@@ -45,7 +45,7 @@
mkdir -p releases
git archive --prefix=${PROGNM}-${TAG}/ -o releases/${PROGNM}-${TAG}.tar.gz ${TAG};
gpg --detach-sign -o releases/${PROGNM}-${TAG}.tar.gz.sig releases/${PROGNM}-${TAG}.tar.gz
- hub release create -m "Release: ${TAG}" -a releases/${PROGNM}-${TAG}.tar.gz.sig -a releases/${PROGNM}-${TAG}.tar.gz ${TAG}
+ gh release upload ${TAG} releases/${PROGNM}-${TAG}.tar.gz.sig releases/${PROGNM}-${TAG}.tar.gz ${TAG}
.PHONY: push-aur
push-aur:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/README.md new/sbctl-0.13/README.md
--- old/sbctl-0.12/README.md 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/README.md 2023-12-23 23:02:48.000000000 +0100
@@ -57,12 +57,17 @@
For Arch Linux:
```
-$ pacman -S sbctl
+# pacman -S sbctl
```
For Alpine Linux:
```
-$ apk add sbctl
+# apk add sbctl
+```
+
+For Gentoo Linux:
+```
+# emerge --ask app-crypt/sbctl
```
You can find a updated list of [sbctl packages on
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/certs/builtin.go new/sbctl-0.13/certs/builtin.go
--- old/sbctl-0.12/certs/builtin.go 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/certs/builtin.go 2023-12-23 23:02:48.000000000 +0100
@@ -13,7 +13,6 @@
var (
efiGlobalGuid = util.EFIGUID{0x8be4df61, 0x93ca, 0x11d2, [8]uint8{0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c}}
defaultSignatureDatabaseNames = map[string]string{
- "dbx": "dbxDefault",
"db": "dbDefault",
"KEK": "KEKDefault",
"PK": "PKDefault",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/cmd/sbctl/create-keys.go new/sbctl-0.13/cmd/sbctl/create-keys.go
--- old/sbctl-0.12/cmd/sbctl/create-keys.go 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/cmd/sbctl/create-keys.go 2023-12-23 23:02:48.000000000 +0100
@@ -8,21 +8,26 @@
"github.com/spf13/cobra"
)
+var (
+ exportPath string = sbctl.KeysPath
+ databasePath string = sbctl.DatabasePath
+)
+
var createKeysCmd = &cobra.Command{
Use: "create-keys",
Short: "Create a set of secure boot signing keys",
RunE: func(cmd *cobra.Command, args []string) error {
- if err := sbctl.CreateDirectory(sbctl.KeysPath); err != nil {
+ if err := sbctl.CreateDirectory(exportPath); err != nil {
return err
}
- uuid, err := sbctl.CreateGUID(sbctl.DatabasePath)
+ uuid, err := sbctl.CreateGUID(databasePath)
if err != nil {
return err
}
logging.Print("Created Owner UUID %s\n", uuid)
- if !sbctl.CheckIfKeysInitialized(sbctl.KeysPath) {
+ if !sbctl.CheckIfKeysInitialized(exportPath) {
logging.Print("Creating secure boot keys...")
- err := sbctl.InitializeSecureBootKeys(sbctl.KeysPath)
+ err := sbctl.InitializeSecureBootKeys(exportPath)
if err != nil {
logging.NotOk("")
return fmt.Errorf("couldn't initialize secure boot: %w", err)
@@ -36,7 +41,15 @@
},
}
+func createKeysCmdFlags(cmd *cobra.Command) {
+ f := cmd.Flags()
+ f.StringVarP(&exportPath, "export", "e", sbctl.KeysPath, "export file path. defaults to "+sbctl.KeysPath)
+ f.StringVarP(&databasePath, "database-path", "d", sbctl.DatabasePath, "location to create GUID file. defaults to "+sbctl.DatabasePath)
+}
+
func init() {
+ createKeysCmdFlags(createKeysCmd)
+
CliCommands = append(CliCommands, cliCommand{
Cmd: createKeysCmd,
})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/cmd/sbctl/enroll-keys.go new/sbctl-0.13/cmd/sbctl/enroll-keys.go
--- old/sbctl-0.12/cmd/sbctl/enroll-keys.go 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/cmd/sbctl/enroll-keys.go 2023-12-23 23:02:48.000000000 +0100
@@ -51,7 +51,7 @@
var (
systemEventlog = "/sys/kernel/security/tpm0/binary_bios_measurements"
enrollKeysCmdOptions = EnrollKeysCmdOptions{
- Partial: stringset.StringSet{Allowed: []string{"PK", "KEK", "db", "dbx"}},
+ Partial: stringset.StringSet{Allowed: []string{"PK", "KEK", "db"}},
Export: stringset.StringSet{Allowed: []string{"esl", "auth"}},
}
enrollKeysCmd = &cobra.Command{
@@ -90,19 +90,12 @@
return err
}
- dbxPem, err := fs.ReadFile(filepath.Join(keydir, "dbx", "dbx.pem"))
- if err != nil {
- return err
- }
-
// Create the signature databases
- var sigdb, sigdbx, sigkek, sigpk *signature.SignatureDatabase
+ var sigdb, sigkek, sigpk *signature.SignatureDatabase
if !enrollKeysCmdOptions.Append {
sigdb = signature.NewSignatureDatabase()
- sigdbx = signature.NewSignatureDatabase()
-
sigkek = signature.NewSignatureDatabase()
sigpk = signature.NewSignatureDatabase()
@@ -113,11 +106,6 @@
return err
}
- sigdbx, err = efi.Getdbx()
- if err != nil {
- return err
- }
-
sigkek, err = efi.GetKEK()
if err != nil {
return err
@@ -133,10 +121,6 @@
return err
}
- if err = sigdbx.Append(signature.CERT_X509_GUID, guid, dbxPem); err != nil {
- return err
- }
-
if err = sigkek.Append(signature.CERT_X509_GUID, guid, KEKPem); err != nil {
return err
}
@@ -168,13 +152,6 @@
}
sigdb.AppendDatabase(oemSigDb)
- // dbx
- oemSigDbx, err := certs.GetOEMCerts(oem, "dbx")
- if err != nil {
- return fmt.Errorf("could not enroll db keys: %w", err)
- }
- sigdbx.AppendDatabase(oemSigDbx)
-
// KEK
oemSigKEK, err := certs.GetOEMCerts(oem, "KEK")
if err != nil {
@@ -193,13 +170,6 @@
}
sigdb.AppendDatabase(customSigDb)
- // dbx
- customSigDbx, err := certs.GetCustomCerts(keydir, "dbx")
- if err != nil {
- return fmt.Errorf("could not enroll custom dbx keys: %w", err)
- }
- sigdbx.AppendDatabase(customSigDbx)
-
// KEK
customSigKEK, err := certs.GetCustomCerts(keydir, "KEK")
if err != nil {
@@ -217,8 +187,6 @@
switch cert {
case "db":
sigdb.AppendDatabase(builtinSigDb)
- case "dbx":
- sigdbx.AppendDatabase(builtinSigDb)
case "KEK":
sigkek.AppendDatabase(builtinSigDb)
case "PK":
@@ -236,11 +204,6 @@
return err
}
- sigdbx, err := sbctl.SignDatabase(sigdbx, KEKKey, KEKPem, "dbx")
- if err != nil {
- return err
- }
-
sigkek, err := sbctl.SignDatabase(sigkek, PKKey, PKPem, "KEK")
if err != nil {
return err
@@ -252,9 +215,6 @@
if err := fs.WriteFile("db.auth", sigdb, 0o644); err != nil {
return err
}
- if err := fs.WriteFile("dbx.auth", sigdbx, 0o644); err != nil {
- return err
- }
if err := fs.WriteFile("KEK.auth", sigkek, 0o644); err != nil {
return err
}
@@ -266,9 +226,6 @@
if err := fs.WriteFile("db.esl", sigdb.Bytes(), 0o644); err != nil {
return err
}
- if err := fs.WriteFile("dbx.esl", sigdbx.Bytes(), 0o644); err != nil {
- return err
- }
if err := fs.WriteFile("KEK.esl", sigkek.Bytes(), 0o644); err != nil {
return err
}
@@ -285,10 +242,6 @@
if err := sbctl.Enroll(sigdb, KEKKey, KEKPem, value); err != nil {
return err
}
- case "dbx":
- if err := sbctl.Enroll(sigdbx, KEKKey, KEKPem, value); err != nil {
- return err
- }
case "KEK":
if err := sbctl.Enroll(sigkek, PKKey, PKPem, value); err != nil {
return err
@@ -307,9 +260,6 @@
if err := sbctl.Enroll(sigdb, KEKKey, KEKPem, "db"); err != nil {
return err
}
- if err := sbctl.Enroll(sigdbx, KEKKey, KEKPem, "dbx"); err != nil {
- return err
- }
if err := sbctl.Enroll(sigkek, PKKey, PKPem, "KEK"); err != nil {
return err
}
@@ -322,7 +272,7 @@
func RunEnrollKeys(cmd *cobra.Command, args []string) error {
// SetupMode is not necessarily required on a partial enrollment
- if !efi.GetSetupMode() && enrollKeysCmdOptions.Partial.Value == "" {
+ if !efi.GetSetupMode() && enrollKeysCmdOptions.Partial.Value == "" && enrollKeysCmdOptions.Export.Value == "" {
return ErrSetupModeDisabled
}
@@ -359,7 +309,7 @@
if len(enrollKeysCmdOptions.BuiltinFirmwareCerts) >= 1 {
oems = append(oems, "firmware-builtin")
}
- if !enrollKeysCmdOptions.IgnoreImmutable {
+ if !enrollKeysCmdOptions.IgnoreImmutable && enrollKeysCmdOptions.Export.Value == "" {
if err := sbctl.CheckImmutable(); err != nil {
return err
}
@@ -401,8 +351,6 @@
switch hierarchy {
case "db":
fallthrough
- case "dbx":
- fallthrough
case "KEK":
fallthrough
case "PK":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/cmd/sbctl/import-keys.go new/sbctl-0.13/cmd/sbctl/import-keys.go
--- old/sbctl-0.12/cmd/sbctl/import-keys.go 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/cmd/sbctl/import-keys.go 2023-12-23 23:02:48.000000000 +0100
@@ -18,8 +18,6 @@
Force bool
DbCert string
DbKey string
- DbxCert string
- DbxKey string
KEKCert string
KEKKey string
PKCert string
@@ -58,8 +56,6 @@
"KEK/KEK.pem",
"db/db.key",
"db/db.pem",
- "dbx/dbx.key",
- "dbx/dbx.pem",
}
dir, err := filepath.Abs(dir)
if err != nil {
@@ -90,7 +86,6 @@
Cert string
}{
{"db", importKeysCmdOptions.DbKey, importKeysCmdOptions.DbCert},
- {"dbx", importKeysCmdOptions.DbxKey, importKeysCmdOptions.DbxCert},
{"KEK", importKeysCmdOptions.KEKKey, importKeysCmdOptions.KEKCert},
{"PK", importKeysCmdOptions.PKKey, importKeysCmdOptions.PKCert},
}
@@ -142,8 +137,6 @@
f := cmd.Flags()
f.StringVarP(&importKeysCmdOptions.DbCert, "db-cert", "", "", "Database (db) certificate")
f.StringVarP(&importKeysCmdOptions.DbKey, "db-key", "", "", "Database (db) key")
- f.StringVarP(&importKeysCmdOptions.DbxCert, "dbx-cert", "", "", "Forbidden Database (dbx) certificate")
- f.StringVarP(&importKeysCmdOptions.DbxKey, "dbx-key", "", "", "Forbidden Database (dbx) key")
f.StringVarP(&importKeysCmdOptions.KEKCert, "kek-cert", "", "", "Key Exchange Key (KEK) certificate")
f.StringVarP(&importKeysCmdOptions.KEKKey, "kek-key", "", "", "Key Exchange Key (KEK) key")
f.StringVarP(&importKeysCmdOptions.PKCert, "pk-cert", "", "", "Platform Key (PK) certificate")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/cmd/sbctl/reset.go new/sbctl-0.13/cmd/sbctl/reset.go
--- old/sbctl-0.12/cmd/sbctl/reset.go 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/cmd/sbctl/reset.go 2023-12-23 23:02:48.000000000 +0100
@@ -24,7 +24,7 @@
var (
resetCmdOpts = resetCmdOptions{
- Partial: stringset.StringSet{Allowed: []string{"PK", "KEK", "db", "dbx"}},
+ Partial: stringset.StringSet{Allowed: []string{"PK", "KEK", "db"}},
}
resetCmd = &cobra.Command{
Use: "reset",
@@ -53,10 +53,6 @@
if err := resetDB(paths...); err != nil {
return err
}
- case "dbx":
- if err := resetDBX(paths...); err != nil {
- return err
- }
case "KEK":
if err := resetKEK(paths...); err != nil {
return err
@@ -85,19 +81,6 @@
return nil
}
-func resetDBX(certPaths ...string) error {
- KEKKey := filepath.Join(sbctl.KeysPath, "KEK", "KEK.key")
- KEKPem := filepath.Join(sbctl.KeysPath, "KEK", "KEK.pem")
-
- if err := resetDatabase(KEKKey, KEKPem, "dbx", certPaths...); err != nil {
- return err
- }
-
- logging.Ok("Removed Fobidden Signature Database!")
- logging.Println("Use `sbctl enroll-keys` to enroll the Forbidden Signature Database again.")
- return nil
-}
-
func resetKEK(certPaths ...string) error {
PKKey := filepath.Join(sbctl.KeysPath, "PK", "PK.key")
PKPem := filepath.Join(sbctl.KeysPath, "PK", "PK.pem")
@@ -146,8 +129,6 @@
switch efivar {
case "db":
db, err = efi.Getdb()
- case "dbx":
- db, err = efi.Getdbx()
case "KEK":
db, err = efi.GetKEK()
case "PK":
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/cmd/sbctl/rotate-keys.go new/sbctl-0.13/cmd/sbctl/rotate-keys.go
--- old/sbctl-0.12/cmd/sbctl/rotate-keys.go 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/cmd/sbctl/rotate-keys.go 2023-12-23 23:02:48.000000000 +0100
@@ -26,7 +26,7 @@
var (
rotateKeysCmdOptions = RotateKeysCmdOptions{
- Partial: stringset.StringSet{Allowed: []string{hierarchy.PK.String(), hierarchy.KEK.String(), hierarchy.Db.String(), hierarchy.Dbx.String()}},
+ Partial: stringset.StringSet{Allowed: []string{hierarchy.PK.String(), hierarchy.KEK.String(), hierarchy.Db.String()}},
}
rotateKeysCmd = &cobra.Command{
Use: "rotate-keys",
@@ -44,7 +44,6 @@
PK *KeyCertPair
KEK *KeyCertPair
Db *KeyCertPair
- Dbx *KeyCertPair
}
func ReadKeysFromDir(src string) (*Keys, error) {
@@ -66,10 +65,6 @@
return &k, err
}
- k.Dbx, err = ReadPair(src, hierarchy.Dbx)
- if err != nil {
- return &k, err
- }
return &k, err
}
@@ -105,8 +100,6 @@
sl, err = efi.GetKEK()
case hierarchy.Db:
sl, err = efi.Getdb()
- case hierarchy.Dbx:
- sl, err = efi.Getdbx()
}
if err != nil {
@@ -208,10 +201,6 @@
return fmt.Errorf("could not rotate db: %v", err)
}
- if err := rotateCerts(hierarchy.Dbx, oldKeys.Dbx.Cert, newKeys.Dbx.Cert, newKeys.KEK); err != nil {
- return fmt.Errorf("could not rotate db: %v", err)
- }
-
logging.Ok("Enrolled new keys into UEFI!")
if err := SignAll(); err != nil {
@@ -267,13 +256,6 @@
importKeyDst = sbctl.DBKey
importCertDst = sbctl.DBCert
- case hierarchy.Dbx.String():
- if err := rotateCerts(hierarchy.Dbx, oldKeys.Dbx.Cert, newCert, oldKeys.KEK); err != nil {
- return fmt.Errorf("could not rotate dbx: %v", err)
- }
-
- importKeyDst = sbctl.DBXKey
- importCertDst = sbctl.DBXCert
}
logging.Ok("Enrolled new key of hierarchy %s into UEFI!", hiera)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/contrib/kernel-install/91-sbctl.install new/sbctl-0.13/contrib/kernel-install/91-sbctl.install
--- old/sbctl-0.12/contrib/kernel-install/91-sbctl.install 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/contrib/kernel-install/91-sbctl.install 2023-12-23 23:02:48.000000000 +0100
@@ -1,8 +1,10 @@
#!/bin/sh
+# This file is part of sbctl.
COMMAND="$1"
KERNEL_VERSION="$2"
ENTRY_DIR_ABS="$3"
+# shellcheck disable=SC2034 # Unused variables left for readability
KERNEL_IMAGE="$4"
IMAGE_FILE="$ENTRY_DIR_ABS/linux"
@@ -25,13 +27,12 @@
case "$COMMAND" in
add)
- [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] &&
- printf 'Signing kernel %s\n' "$IMAGE_FILE"
+ printf 'sbctl: Signing kernel %s\n' "$IMAGE_FILE"
sbctl sign -s "$IMAGE_FILE" 1>/dev/null
;;
remove)
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] &&
- printf 'Removing kernel %s from signing database\n' "$IMAGE_FILE"
+ printf 'sbctl: Removing kernel %s from signing database\n' "$IMAGE_FILE"
sbctl remove-file "$IMAGE_FILE" 1>/dev/null
;;
esac
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/contrib/mkinitcpio/sbctl new/sbctl-0.13/contrib/mkinitcpio/sbctl
--- old/sbctl-0.12/contrib/mkinitcpio/sbctl 1970-01-01 01:00:00.000000000 +0100
+++ new/sbctl-0.13/contrib/mkinitcpio/sbctl 2023-12-23 23:02:48.000000000 +0100
@@ -0,0 +1,3 @@
+#!/usr/bin/bash
+echo "Signing EFI binaries..."
+/usr/bin/sbctl sign-all -g
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/contrib/pacman/ZZ-sbctl.hook new/sbctl-0.13/contrib/pacman/ZZ-sbctl.hook
--- old/sbctl-0.12/contrib/pacman/ZZ-sbctl.hook 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/contrib/pacman/ZZ-sbctl.hook 2023-12-23 23:02:48.000000000 +0100
@@ -7,7 +7,6 @@
Target = efi/*
Target = usr/lib/modules/*/vmlinuz
Target = usr/lib/modules/*/extramodules/*
-Target = usr/lib/initcpio/*
Target = usr/lib/**/efi/*.efi*
[Action]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/docs/sbctl.8.txt new/sbctl-0.13/docs/sbctl.8.txt
--- old/sbctl-0.12/docs/sbctl.8.txt 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/docs/sbctl.8.txt 2023-12-23 23:02:48.000000000 +0100
@@ -29,12 +29,21 @@
Creates a set of signing keys used to sign EFI binaries. Currently, it
will create the following keys:
* Platform Key
- * Key Exchange key
+ * Key Exchange Key
* Signature Database Key
+ *-e*, *--export*;;
+ The directory to persist the exported keys.
+
+ Default: "/usr/share/secureboot/keys/"
+
+ *-d*, *--database-path*;;
+ Path to save the GUID file when generating keys.
+
+ Default: "/usr/share/secureboot/"
+
**enroll-keys**::
- Enrolls the creates key into the EFI variables. This puts the computer
- out of SetupMode and enables Secure Boot.
+ Enrolls the created key into the EFI variables.
Note that some devices have hardware firmware that is signed and
validated when Secure Boot is enabled. Failing to validate this firmware
@@ -54,8 +63,9 @@
This feature is experimental
*-c*, *--custom*;;
- Enroll custom KEK and db certificates from "/usr/share/secureboot/keys/custom/KEK/"
- and "/usr/share/secureboot/keys/custom/db/", respectively.
+ Enroll custom KEK and db certificates from "/usr/share/secureboot/keys/custom/KEK/",
+ "/usr/share/secureboot/keys/custom/db/",
+ respectively.
*-f*, *--firmware-builtin*;;
Enroll signatures from dbDefault, KEKDefault or PKDefault. This
@@ -88,7 +98,7 @@
*-p*, *--partial*;;
Enroll keys only for the hierarchy specified.
- Valid values are: db, dbx, KEK, PK.
+ Valid values are: db, KEK, PK.
*--custom-bytes*;;
Enroll a custom bytefile provided by its path to the efivar specified by partial.
@@ -157,7 +167,7 @@
*-p*, *--partial*;;
Reset keys only for the hierarchy specified.
- Valid values are: db, dbx, KEK, PK.
+ Valid values are: db, KEK, PK.
**rotate-keys**::
Rotate the secure boot keys and replace them with newly generated keys.
@@ -170,7 +180,7 @@
*-p*, *--partial*;;
Rotate keys only for the hierarchy specified.
- Valid values are: db, dbx, KEK, PK.
+ Valid values are: db, KEK, PK.
*-k*, *--key-file*;;
Key file to be appended for the specified hierarchy.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/keys.go new/sbctl-0.13/keys.go
--- old/sbctl-0.12/keys.go 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/keys.go 2023-12-23 23:02:48.000000000 +0100
@@ -35,8 +35,6 @@
KEKCert = filepath.Join(KeysPath, "KEK", "KEK.pem")
DBKey = filepath.Join(KeysPath, "db", "db.key")
DBCert = filepath.Join(KeysPath, "db", "db.pem")
- DBXKey = filepath.Join(KeysPath, "dbx", "dbx.key")
- DBXCert = filepath.Join(KeysPath, "dbx", "dbx.pem")
DBPath = filepath.Join(DatabasePath, "files.db")
GUIDPath = filepath.Join(DatabasePath, "GUID")
@@ -59,7 +57,6 @@
SignatureAlgorithm: x509.SHA256WithRSA,
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(5, 0, 0),
- KeyUsage: x509.KeyUsageDigitalSignature,
Subject: pkix.Name{
Country: []string{name},
CommonName: name,
@@ -242,10 +239,10 @@
Key: "db",
Description: "Database Key",
},
- {
- Key: "dbx",
- Description: "Forbidden Database Key",
- },
+ // {
+ // Key: "dbx",
+ // Description: "Forbidden Database Key",
+ // },
}
// Check if we have already intialized keys in the given output directory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/sbctl.go new/sbctl-0.13/sbctl.go
--- old/sbctl-0.12/sbctl.go 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/sbctl.go 2023-12-23 23:02:48.000000000 +0100
@@ -171,10 +171,16 @@
return nil, err
}
- one, _ := fs.Fs.Open(microcode)
+ one, err := fs.Fs.Open(microcode)
+ if err != nil {
+ return nil, err
+ }
defer one.Close()
- two, _ := fs.Fs.Open(initramfs)
+ two, err := fs.Fs.Open(initramfs)
+ if err != nil {
+ return nil, err
+ }
defer two.Close()
_, err = io.Copy(tmpFile, one)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/sbctl-0.12/tests/utils/certs.go new/sbctl-0.13/tests/utils/certs.go
--- old/sbctl-0.12/tests/utils/certs.go 2023-10-20 20:54:47.000000000 +0200
+++ new/sbctl-0.13/tests/utils/certs.go 2023-12-23 23:02:48.000000000 +0100
@@ -24,7 +24,6 @@
SignatureAlgorithm: x509.SHA256WithRSA,
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(5, 0, 0),
- KeyUsage: x509.KeyUsageDigitalSignature,
Subject: pkix.Name{
Country: []string{"Test Suite Key"},
CommonName: "Test Suite",
++++++ vendor.tar.gz ++++++
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package thunar for openSUSE:Factory checked in at 2024-01-03 12:27:15
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/thunar (Old)
and /work/SRC/openSUSE:Factory/.thunar.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "thunar"
Wed Jan 3 12:27:15 2024 rev:103 rq:1135885 version:4.18.10
Changes:
--------
--- /work/SRC/openSUSE:Factory/thunar/thunar.changes 2023-10-31 20:25:34.693672206 +0100
+++ /work/SRC/openSUSE:Factory/.thunar.new.28375/thunar.changes 2024-01-03 12:27:17.284518114 +0100
@@ -1,0 +2,16 @@
+Sun Dec 31 09:25:13 UTC 2023 - Manfred Hollstein <manfred.h(a)gmx.net>
+
+- Update to 4.18.10:
+ * Prevent infinite reload loop for symlinks (#1270)
+
+-------------------------------------------------------------------
+Fri Dec 29 08:21:28 UTC 2023 - Manfred Hollstein <manfred.h(a)gmx.net>
+
+- Update to 4.18.9:
+ * g_file_get_basename over realpath (#1030)
+ * Fix and simplify symlink resolver (#1260)
+ * Fix thumbnailer symlink support (#1260)
+ * Prevent GLib GIO CRITICAL (#1204)
+ * Translation Updates
+
+-------------------------------------------------------------------
Old:
----
thunar-4.18.8.tar.bz2
New:
----
thunar-4.18.10.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ thunar.spec ++++++
--- /var/tmp/diff_new_pack.y10Lry/_old 2024-01-03 12:27:18.036545576 +0100
+++ /var/tmp/diff_new_pack.y10Lry/_new 2024-01-03 12:27:18.040545723 +0100
@@ -19,7 +19,7 @@
%define libname libthunarx-3-0
%bcond_with git
Name: thunar
-Version: 4.18.8
+Version: 4.18.10
Release: 0
Summary: File Manager for the Xfce Desktop Environment
License: GPL-2.0-or-later
@@ -47,10 +47,10 @@
BuildRequires: pkgconfig(gthread-2.0) >= 2.66.0
BuildRequires: pkgconfig(gtk+-3.0) >= 3.24.0
BuildRequires: pkgconfig(gtk-doc)
-BuildRequires: pkgconfig(gudev-1.0)
+BuildRequires: pkgconfig(gudev-1.0) >= 145
BuildRequires: pkgconfig(ice)
BuildRequires: pkgconfig(libexif)
-BuildRequires: pkgconfig(libnotify)
+BuildRequires: pkgconfig(libnotify) >= 0.4.0
BuildRequires: pkgconfig(libpcre2-8)
BuildRequires: pkgconfig(libstartup-notification-1.0)
BuildRequires: pkgconfig(libxfce4kbd-private-3) >= 4.17.2
++++++ thunar-4.18.8.tar.bz2 -> thunar-4.18.10.tar.bz2 ++++++
++++ 3947 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package osdlyrics for openSUSE:Factory checked in at 2024-01-03 12:27:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/osdlyrics (Old)
and /work/SRC/openSUSE:Factory/.osdlyrics.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "osdlyrics"
Wed Jan 3 12:27:13 2024 rev:12 rq:1135876 version:0.5.15
Changes:
--------
--- /work/SRC/openSUSE:Factory/osdlyrics/osdlyrics.changes 2023-07-18 22:08:41.687180333 +0200
+++ /work/SRC/openSUSE:Factory/.osdlyrics.new.28375/osdlyrics.changes 2024-01-03 12:27:15.364447998 +0100
@@ -1,0 +2,7 @@
+Sun Dec 31 12:42:52 UTC 2023 - Hillwood Yang <hillwood(a)opensuse.org>
+
+- Update version to 0.5.15
+ * Remove 99% of Python2 support
+ * Remove dependency on future
+
+-------------------------------------------------------------------
Old:
----
osdlyrics-0.5.14.tar.gz
New:
----
osdlyrics-0.5.15.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ osdlyrics.spec ++++++
--- /var/tmp/diff_new_pack.7eP8Ty/_old 2024-01-03 12:27:16.000471224 +0100
+++ /var/tmp/diff_new_pack.7eP8Ty/_new 2024-01-03 12:27:16.004471370 +0100
@@ -17,7 +17,7 @@
Name: osdlyrics
-Version: 0.5.14
+Version: 0.5.15
Release: 0
Summary: A third-party lyrics display program
License: GPL-3.0-or-later
@@ -26,8 +26,6 @@
Source0: https://github.com/osdlyrics/osdlyrics/archive/%{version}/%{name}-%{version…
Source1: %{name}.appdata.xml
BuildRequires: fdupes
-BuildRequires: gcc
-BuildRequires: gcc-c++
BuildRequires: gettext-devel
BuildRequires: glibc-devel
BuildRequires: gnome-common
++++++ osdlyrics-0.5.14.tar.gz -> osdlyrics-0.5.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/.github/workflows/ci.yml new/osdlyrics-0.5.15/.github/workflows/ci.yml
--- old/osdlyrics-0.5.14/.github/workflows/ci.yml 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/.github/workflows/ci.yml 2023-12-20 15:02:07.000000000 +0100
@@ -18,7 +18,7 @@
run: sudo apt-get update && sudo apt-get upgrade
- name: Install dependencies
- run: sudo apt-get install dh-python intltool lib{dbus-glib-1,gtk2.0,notify,x11}-dev python3{,-dbus,-future,-gi}
+ run: sudo apt-get install dh-python intltool lib{dbus-glib-1,gtk2.0,notify,x11}-dev python3{,-dbus,-gi}
- name: Version
run: ./check-version.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/README.md new/osdlyrics-0.5.15/README.md
--- old/osdlyrics-0.5.14/README.md 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/README.md 2023-12-20 15:02:07.000000000 +0100
@@ -51,6 +51,8 @@
You can read more at [Building wiki page](https://github.com/osdlyrics/osdlyrics/wiki/Building).
+Since version `0.5.15` Python 2 is no longer supported. Please upgrade to Python 3.12+.
+
## Troubleshooting
Check [Troubleshooting wiki page](https://github.com/osdlyrics/osdlyrics/wiki/Troubleshooting) for more detailed help.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/autogen.sh new/osdlyrics-0.5.15/autogen.sh
--- old/osdlyrics-0.5.14/autogen.sh 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/autogen.sh 2023-12-20 15:02:07.000000000 +0100
@@ -6,8 +6,5 @@
args=$@
-if [ -e /usr/bin/python2 ]; then
- args="$args PYTHON=/usr/bin/python2"
-fi
AUTOPOINT='intltoolize' autoreconf --install --force $DIR
$DIR/configure $args
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/check-version.sh new/osdlyrics-0.5.15/check-version.sh
--- old/osdlyrics-0.5.14/check-version.sh 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/check-version.sh 2023-12-20 15:02:07.000000000 +0100
@@ -1,7 +1,7 @@
#h!/usr/bin/env sh
GIT="${GIT:-git}"
-OL_VERSION="${OL_VERSION:-0.5.13}"
+OL_VERSION="${OL_VERSION:-0.5.15}"
if [ ! "$("$GIT" rev-parse --show-prefix 2>/dev/null)" ]; then
_GIT_VERSION="$("$GIT" describe --always --tags 2>/dev/null)"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/daemon/ini_config.py new/osdlyrics-0.5.15/daemon/ini_config.py
--- old/osdlyrics-0.5.14/daemon/ini_config.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/daemon/ini_config.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,10 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from future import standard_library
-standard_library.install_aliases()
-from builtins import str, super
-
import configparser
import dbus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/daemon/lrcdb.py new/osdlyrics-0.5.15/daemon/lrcdb.py
--- old/osdlyrics-0.5.14/daemon/lrcdb.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/daemon/lrcdb.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,11 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from __future__ import unicode_literals
-from future import standard_library
-standard_library.install_aliases()
-from builtins import object
-
import logging
import os.path
import sqlite3
@@ -48,7 +43,7 @@
return param
-class LrcDb(object):
+class LrcDb:
""" Database to store location of LRC files that have been manually assigned
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/daemon/lyrics.py new/osdlyrics-0.5.15/daemon/lyrics.py
--- old/osdlyrics-0.5.14/daemon/lyrics.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/daemon/lyrics.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,10 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import super
-from future import standard_library
-standard_library.install_aliases()
-
import logging
import os
import os.path
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/daemon/lyricsource.py new/osdlyrics-0.5.15/daemon/lyricsource.py
--- old/osdlyrics-0.5.14/daemon/lyricsource.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/daemon/lyricsource.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,8 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import str, super
-
import logging
import dbus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/daemon/main.py new/osdlyrics-0.5.15/daemon/main.py
--- old/osdlyrics-0.5.14/daemon/main.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/daemon/main.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,9 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from __future__ import print_function
-from builtins import super
-
import logging
import dbus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/daemon/player.py new/osdlyrics-0.5.15/daemon/player.py
--- old/osdlyrics-0.5.14/daemon/player.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/daemon/player.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,8 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import str, super
-
import logging
from dbus.exceptions import DBusException
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/lyricsources/megalobiz/megalobiz.py new/osdlyrics-0.5.15/lyricsources/megalobiz/megalobiz.py
--- old/osdlyrics-0.5.14/lyricsources/megalobiz/megalobiz.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/lyricsources/megalobiz/megalobiz.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,9 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from future import standard_library
-standard_library.install_aliases()
-from builtins import str, super
from urllib.parse import unquote
import urllib.parse
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/lyricsources/netease/netease.py new/osdlyrics-0.5.15/lyricsources/netease/netease.py
--- old/osdlyrics-0.5.14/lyricsources/netease/netease.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/lyricsources/netease/netease.py 2023-12-20 15:02:07.000000000 +0100
@@ -1,8 +1,3 @@
-from __future__ import unicode_literals
-from future import standard_library
-standard_library.install_aliases()
-from builtins import map, str, super
-
import gettext
import http.client
import json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/lyricsources/netease_tr/netease_tr.py new/osdlyrics-0.5.15/lyricsources/netease_tr/netease_tr.py
--- old/osdlyrics-0.5.14/lyricsources/netease_tr/netease_tr.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/lyricsources/netease_tr/netease_tr.py 2023-12-20 15:02:07.000000000 +0100
@@ -1,8 +1,3 @@
-from __future__ import unicode_literals
-from future import standard_library
-standard_library.install_aliases()
-from builtins import map, str, super
-
import gettext
import http.client
import json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/lyricsources/subtitles4songs/subtitles4songs.py new/osdlyrics-0.5.15/lyricsources/subtitles4songs/subtitles4songs.py
--- old/osdlyrics-0.5.14/lyricsources/subtitles4songs/subtitles4songs.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/lyricsources/subtitles4songs/subtitles4songs.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,9 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from future import standard_library
-standard_library.install_aliases()
-from builtins import str, super
from urllib.parse import unquote
# import urlparse
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/lyricsources/xiami/xiami.py new/osdlyrics-0.5.15/lyricsources/xiami/xiami.py
--- old/osdlyrics-0.5.14/lyricsources/xiami/xiami.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/lyricsources/xiami/xiami.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,10 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from future import standard_library
-standard_library.install_aliases()
-from builtins import str, super
-
# import urlparse
import gettext
import html.parser
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/players/http/error.py new/osdlyrics-0.5.15/players/http/error.py
--- old/osdlyrics-0.5.14/players/http/error.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/players/http/error.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,9 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from future import standard_library
-standard_library.install_aliases()
-
import http.client
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/players/http/http-player.py new/osdlyrics-0.5.15/players/http/http-player.py
--- old/osdlyrics-0.5.14/players/http/http-player.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/players/http/http-player.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,8 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import super
-
import datetime
import logging
import time
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/players/http/server.py new/osdlyrics-0.5.15/players/http/server.py
--- old/osdlyrics-0.5.14/players/http/server.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/players/http/server.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,9 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from future import standard_library
-standard_library.install_aliases()
-
import http.server
import json
import logging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/players/http/validator.py new/osdlyrics-0.5.15/players/http/validator.py
--- old/osdlyrics-0.5.14/players/http/validator.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/players/http/validator.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,8 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import object
-
from error import BadRequestError
__all__ = (
@@ -32,7 +30,7 @@
)
-class baseparam(object):
+class baseparam:
def __init__(self, optional=False):
self.optional = optional
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/players/mpd/mpd_proxy.py new/osdlyrics-0.5.15/players/mpd/mpd_proxy.py
--- old/osdlyrics-0.5.14/players/mpd/mpd_proxy.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/players/mpd/mpd_proxy.py 2023-12-20 15:02:07.000000000 +0100
@@ -20,9 +20,6 @@
"""MPD support for OSD Lyrics. Requires MPD >= 0.16 and mpd-python >= 0.3
"""
-from __future__ import unicode_literals
-from builtins import object, super
-
import logging
import os
import select
@@ -54,7 +51,7 @@
pass
-class CommandCallback(object):
+class CommandCallback:
def __init__(self, command, callback):
self.command = command
self.callback = callback
@@ -64,7 +61,7 @@
self.callback(*args)
-class Cmds(object):
+class Cmds:
CONFIG = 'config'
CURRENTSONG = 'currentsong'
IDLE = 'idle'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/players/mpris1/mpris1.py new/osdlyrics-0.5.15/players/mpris1/mpris1.py
--- old/osdlyrics-0.5.14/players/mpris1/mpris1.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/players/mpris1/mpris1.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,8 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import str, super
-
from contextlib import contextmanager
import logging
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/players/mpris2/mpris2.py new/osdlyrics-0.5.15/players/mpris2/mpris2.py
--- old/osdlyrics-0.5.14/players/mpris2/mpris2.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/players/mpris2/mpris2.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,8 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import str, super
-
import logging
import dbus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/app.py new/osdlyrics-0.5.15/python/app.py
--- old/osdlyrics-0.5.14/python/app.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/app.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,8 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import object
-
from optparse import OptionParser
import dbus
@@ -42,7 +40,7 @@
pass
-class App(object):
+class App:
""" Basic class to create a component application for OSD Lyrics.
The application creates a mainloop, owns a DBus name, and exits when the bus
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/config.py new/osdlyrics-0.5.15/python/config.py
--- old/osdlyrics-0.5.14/python/config.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/config.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,8 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import object
-
import logging
import dbus
@@ -29,7 +27,7 @@
CONFIG_INTERFACE = 'org.osdlyrics.Config'
-class Config(object):
+class Config:
""" Helper class to retrive configs from OSD Lyrics through DBus
It provides a set of get_<type> functions to get config values with default
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/dbusext/property.py new/osdlyrics-0.5.15/python/dbusext/property.py
--- old/osdlyrics-0.5.14/python/dbusext/property.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/dbusext/property.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,8 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import object, str
-
import dbus.exceptions
@@ -28,7 +26,7 @@
dbus.exceptions.DBusException.__init__(self, dbus_error_name='org.osdlyrics.Error.AccessDenied', *args)
-class Property(object):
+class Property:
""" DBus property class
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/dbusext/service.py new/osdlyrics-0.5.15/python/dbusext/service.py
--- old/osdlyrics-0.5.14/python/dbusext/service.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/dbusext/service.py 2023-12-20 15:02:07.000000000 +0100
@@ -30,10 +30,7 @@
from .property import Property
-# Use the default encoding in ElementTree.tostring under Python 2, but prefer
-# Unicode under Python 3 to obtain a 'str', not 'bytes' instance.
-# TODO: remove once we have fully migrated to Python 3
-INTROSPECT_ENCODING = 'unicode' if sys.version_info >= (3, 0) else 'us-ascii'
+INTROSPECT_ENCODING = 'unicode'
class ObjectTypeCls(dbus.service.InterfaceType, ABCMeta):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/errors.py new/osdlyrics-0.5.15/python/errors.py
--- old/osdlyrics-0.5.14/python/errors.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/errors.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,7 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import super
import dbus.exceptions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/lrc.py new/osdlyrics-0.5.15/python/lrc.py
--- old/osdlyrics-0.5.14/python/lrc.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/lrc.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,9 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from __future__ import print_function
-from builtins import object
-
import re
import dbus.types
@@ -39,7 +36,7 @@
ATTR_PATTERN = re.compile(r'^\[([\w\d]+):(.*)\]$')
-class AttrToken(object):
+class AttrToken:
"""
Represents tags with the form of ``[key:value]``
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/lyricsource.py new/osdlyrics-0.5.15/python/lyricsource.py
--- old/osdlyrics-0.5.14/python/lyricsource.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/lyricsource.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,10 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from future import standard_library
-standard_library.install_aliases()
-from builtins import chr, object, range, str, super
-
import logging
import threading
@@ -52,7 +48,7 @@
return decfunc
-class SearchResult(object):
+class SearchResult:
""" Lyrics that match the metadata to be searched.
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/metadata.py new/osdlyrics-0.5.15/python/metadata.py
--- old/osdlyrics-0.5.14/python/metadata.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/metadata.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,9 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from __future__ import unicode_literals
-from builtins import object
-
import logging
import re
@@ -28,7 +25,7 @@
from .consts import METADATA_ALBUM, METADATA_ARTIST, METADATA_TITLE
-class Metadata(object):
+class Metadata:
"""
Metadata of a track
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/pattern.py new/osdlyrics-0.5.15/python/pattern.py
--- old/osdlyrics-0.5.14/python/pattern.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/pattern.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,11 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from __future__ import unicode_literals
-from future import standard_library
-standard_library.install_aliases()
-from builtins import str
-
import os.path
import urllib.parse
import urllib.request
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/player_proxy.py new/osdlyrics-0.5.15/python/player_proxy.py
--- old/osdlyrics-0.5.14/python/player_proxy.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/player_proxy.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,9 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from __future__ import unicode_literals
-from builtins import object, super
-from future.utils import raise_from
from abc import abstractmethod
import logging
@@ -34,7 +31,7 @@
from .dbusext.service import Object as DBusObject, property as dbus_property
-class CAPS(object):
+class CAPS:
NEXT = 1 << 0
PREV = 1 << 1
PAUSE = 1 << 2
@@ -43,13 +40,13 @@
PROVIDE_METADATA = 1 << 5
-class REPEAT(object):
+class REPEAT:
NONE = 0
TRACK = 1
ALL = 2
-class STATUS(object):
+class STATUS:
PLAYING = 0
PAUSED = 1
STOPPED = 2
@@ -114,9 +111,9 @@
try:
player = self.do_connect_player(player_name)
except TypeError as e:
- raise_from(errors.BaseError(
+ raise errors.BaseError(
'%s cannot instantiate Player[%s, %s]' % (type(self).__name__, self.name, player_name)
- ), e)
+ ) from e
if player and player.connected:
player.set_disconnect_cb(self._player_lost_cb)
self._connected_players[player_name] = player
@@ -172,7 +169,7 @@
raise NotImplementedError()
-class PlayerInfo(object):
+class PlayerInfo:
"""Information about a supported player
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/timer.py new/osdlyrics-0.5.15/python/timer.py
--- old/osdlyrics-0.5.14/python/timer.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/timer.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,12 +17,10 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from builtins import object
-
from datetime import datetime
-class Timer(object):
+class Timer:
""" A timer to account the elapsed playing.
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/python/utils.py new/osdlyrics-0.5.15/python/utils.py
--- old/osdlyrics-0.5.14/python/utils.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/python/utils.py 2023-12-20 15:02:07.000000000 +0100
@@ -17,11 +17,6 @@
# You should have received a copy of the GNU General Public License
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from __future__ import unicode_literals
-from future import standard_library
-standard_library.install_aliases()
-from builtins import object, str
-
import io
import os
import os.path
@@ -42,14 +37,8 @@
pycurl.global_init(pycurl.GLOBAL_DEFAULT)
-if sys.version_info < (3, 0):
- # make sure the default encoding is utf-8
- if sys.getdefaultencoding() != 'utf-8':
- reload(sys)
- sys.setdefaultencoding('utf-8')
-
-class ProxySettings(object):
+class ProxySettings:
"""
"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/osdlyrics-0.5.14/tools/create-lyricsource.py new/osdlyrics-0.5.15/tools/create-lyricsource.py
--- old/osdlyrics-0.5.14/tools/create-lyricsource.py 2023-06-06 22:30:50.000000000 +0200
+++ new/osdlyrics-0.5.15/tools/create-lyricsource.py 2023-12-20 15:02:07.000000000 +0100
@@ -18,9 +18,6 @@
# along with OSD Lyrics. If not, see <https://www.gnu.org/licenses/>.
#
-from __future__ import print_function
-from builtins import input
-
import os
import os.path
import re
@@ -56,10 +53,6 @@
"""
PYTHON = r"""# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-from builtins import super
-from future import standard_library
-standard_library.install_aliases()
import http.client
++++++ osdlyrics.appdata.xml ++++++
--- /var/tmp/diff_new_pack.7eP8Ty/_old 2024-01-03 12:27:16.156476921 +0100
+++ /var/tmp/diff_new_pack.7eP8Ty/_new 2024-01-03 12:27:16.156476921 +0100
@@ -35,12 +35,11 @@
<url type="homepage">https://github.com/osdlyrics/osdlyrics</url>
<url type="bugtracker">https://github.com/osdlyrics/osdlyrics/issues</url>
<releases>
- <release version="0.5.14" date="2023-06-07">
+ <release version="0.5.15" date="2023-12-17">
<description>
<p>
- fix Chinese encodings
- fix proxy-password config
- fix sources in the default search
+ Remove 99% of Python2 support
+ Remove dependency on future
</p>
</description>
</release>
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pytest-doctestplus for openSUSE:Factory checked in at 2024-01-03 12:27:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-doctestplus (Old)
and /work/SRC/openSUSE:Factory/.python-pytest-doctestplus.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pytest-doctestplus"
Wed Jan 3 12:27:11 2024 rev:17 rq:1135878 version:1.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pytest-doctestplus/python-pytest-doctestplus.changes 2023-10-05 20:03:54.408346718 +0200
+++ /work/SRC/openSUSE:Factory/.python-pytest-doctestplus.new.28375/python-pytest-doctestplus.changes 2024-01-03 12:27:13.636384893 +0100
@@ -1,0 +2,11 @@
+Sun Dec 31 13:32:06 UTC 2023 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 1.1.0:
+ * Added --doctest-plus-generate-diff to update documentation
+ based on actual output.
+ * Fix module level __doctest_requires__.
+ * Versions of Python <3.8 are no longer supported.
+ * Fix erroneous attempt to import __main__.py by skipping it.
+ * Respect pytest --import-mode.
+
+-------------------------------------------------------------------
Old:
----
pytest-doctestplus-1.0.0.tar.gz
New:
----
pytest-doctestplus-1.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pytest-doctestplus.spec ++++++
--- /var/tmp/diff_new_pack.j9b8JH/_old 2024-01-03 12:27:14.164404175 +0100
+++ /var/tmp/diff_new_pack.j9b8JH/_new 2024-01-03 12:27:14.164404175 +0100
@@ -27,16 +27,16 @@
%{?sle15_python_module_pythons}
Name: python-pytest-doctestplus%{psuffix}
-Version: 1.0.0
+Version: 1.1.0
Release: 0
Summary: Pytest plugin with advanced doctest features
License: BSD-3-Clause
URL: https://github.com/scientific-python/pytest-doctestplus
Source: https://files.pythonhosted.org/packages/source/p/pytest-doctestplus/pytest-…
-BuildRequires: %{python_module base >= 3.7}
-BuildRequires: %{python_module packaging >= 17.0}
+BuildRequires: %{python_module base >= 3.8}
+BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools_scm}
-BuildRequires: %{python_module setuptools}
+BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-packaging >= 17.0
@@ -49,6 +49,7 @@
BuildRequires: %{python_module pip >= 19.3.1}
BuildRequires: %{python_module pytest-doctestplus = %{version}}
BuildRequires: %{python_module pytest-remotedata >= 0.3.2}
+BuildRequires: git-core
%else
BuildArch: noarch
%endif
@@ -63,11 +64,11 @@
%setup -q -n pytest-doctestplus-%{version}
%build
-%python_build
+%pyproject_wheel
%install
%if !%{with test}
-%python_install
+%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%endif
@@ -75,7 +76,7 @@
%check
export LANG=en_US.UTF8
export PY_IGNORE_IMPORTMISMATCH=1
-%pytest tests/ --doctest-plus --doctest-rst -k "not test_remote_data_url"
+%pytest tests/ --doctest-plus --doctest-rst -k "not test_remote_data_url and not test_import_mode"
%endif
%if !%{with test}
@@ -83,6 +84,6 @@
%doc CHANGES.rst README.rst
%license LICENSE.rst
%{python_sitelib}/pytest_doctestplus
-%{python_sitelib}/pytest_doctestplus-%{version}*-info
+%{python_sitelib}/pytest_doctestplus-%{version}.dist-info
%endif
++++++ pytest-doctestplus-1.0.0.tar.gz -> pytest-doctestplus-1.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/.github/workflows/publish.yml new/pytest-doctestplus-1.1.0/.github/workflows/publish.yml
--- old/pytest-doctestplus-1.0.0/.github/workflows/publish.yml 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/.github/workflows/publish.yml 2023-12-13 19:12:44.000000000 +0100
@@ -13,7 +13,7 @@
if: ((github.event_name == 'push' && startsWith(github.ref, 'refs/tags')) || contains(github.event.pull_request.labels.*.name, 'Build wheels'))
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-python@v4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/.github/workflows/python-tests.yml new/pytest-doctestplus-1.1.0/.github/workflows/python-tests.yml
--- old/pytest-doctestplus-1.0.0/.github/workflows/python-tests.yml 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/.github/workflows/python-tests.yml 2023-12-13 19:12:44.000000000 +0100
@@ -8,8 +8,8 @@
- '*'
workflow_dispatch:
schedule:
- # Run every Sunday at 03:53 UTC
- - cron: 53 3 * * 0
+ # Run every Tuesday at 03:53 UTC
+ - cron: 53 3 * * 2
jobs:
tests:
@@ -19,17 +19,17 @@
matrix:
include:
- os: ubuntu-latest
- python-version: 3.7
- toxenv: py37-test-pytest46
+ python-version: 3.8
+ toxenv: py38-test-pytestoldest
- os: windows-latest
- python-version: 3.7
- toxenv: py37-test-pytest50
+ python-version: 3.8
+ toxenv: py38-test-pytest50
- os: macos-latest
- python-version: 3.7
- toxenv: py37-test-pytest51
+ python-version: 3.8
+ toxenv: py38-test-pytest51
- os: ubuntu-latest
- python-version: 3.7
- toxenv: py37-test-pytest52
+ python-version: 3.8
+ toxenv: py38-test-pytest52
- os: windows-latest
python-version: 3.8
toxenv: py38-test-pytest53
@@ -65,11 +65,11 @@
python-version: '3.11'
toxenv: py311-test-pytestdev
- os: ubuntu-latest
- python-version: '3.12-dev'
+ python-version: '3.12'
toxenv: py312-test-pytestdev
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
@@ -80,11 +80,3 @@
run: python -m pip install tox
- name: Run Tox
run: tox ${{ matrix.toxargs }} -v -e ${{ matrix.toxenv }}
-
- # - name: Slack Notification
- # uses: 8398a7/action-slack@v3
- # with:
- # status: ${{ job.status }}
- # env:
- # SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
- # if: always() # TODO: cron
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/.mailmap new/pytest-doctestplus-1.1.0/.mailmap
--- old/pytest-doctestplus-1.0.0/.mailmap 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/.mailmap 2023-12-13 19:12:44.000000000 +0100
@@ -12,7 +12,9 @@
Matteo Bachetti <matteo(a)matteobachetti.it> <matteo.bachetti(a)irap.omp.eu>
Michael Seifert <michaelseifert04(a)yahoo.de>
Pey Lian Lim <lim(a)stsci.edu> <2090236+pllim(a)users.noreply.github.com>
+Philipp A. <flying-sheep(a)web.de>
Pratik Patel <pratikpatel15133(a)gmail.com>
+Sebastian Berg <sebastianb(a)nvidia.com> <sebastian(a)sipsolutions.net>
Simon Conseil <contact(a)saimon.org> <s.conseil(a)ip2i.in2p3.fr>
Simon Conseil <contact(a)saimon.org> <sconseil(a)gemini.edu>
Tinuade Adeleke <summittinuade(a)gmail.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/CHANGES.rst new/pytest-doctestplus-1.1.0/CHANGES.rst
--- old/pytest-doctestplus-1.0.0/CHANGES.rst 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/CHANGES.rst 2023-12-13 19:12:44.000000000 +0100
@@ -1,3 +1,18 @@
+1.1.0 (2023-12-13)
+==================
+
+- Added ``--doctest-plus-generate-diff`` to update documentation based on
+ actual output. [#227]
+
+- Fix module level ``__doctest_requires__``. [#228]
+
+- Versions of Python <3.8 are no longer supported. [#217]
+
+- Fix erroneous attempt to import ``__main__.py`` by skipping it. [#232]
+
+- Respect pytest ``--import-mode``. [#233]
+
+
1.0.0 (2023-08-11)
==================
@@ -69,7 +84,7 @@
0.9.0 (2021-01-14)
==================
-- Declare ``setuptools`` runtime dependency [#93]
+- Declare ``setuptools`` runtime dependency. [#132]
- Add ``SHOW_WARNINGS`` flag to show warnings. [#136]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/PKG-INFO new/pytest-doctestplus-1.1.0/PKG-INFO
--- old/pytest-doctestplus-1.0.0/PKG-INFO 2023-08-11 18:22:14.703384200 +0200
+++ new/pytest-doctestplus-1.1.0/PKG-INFO 2023-12-13 19:12:59.113894500 +0100
@@ -1,12 +1,12 @@
Metadata-Version: 2.1
Name: pytest-doctestplus
-Version: 1.0.0
+Version: 1.1.0
Summary: Pytest plugin with advanced doctest features.
Home-page: https://github.com/scientific-python/pytest-doctestplus
Author: Scientific Python Developers
License: BSD
Keywords: doctest,rst,pytest,py.test
-Classifier: Development Status :: 3 - Alpha
+Classifier: Development Status :: 5 - Production/Stable
Classifier: Framework :: Pytest
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
@@ -14,7 +14,6 @@
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
@@ -23,10 +22,16 @@
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Software Development :: Testing
Classifier: Topic :: Utilities
-Requires-Python: >=3.7
+Requires-Python: >=3.8
Description-Content-Type: text/x-rst
-Provides-Extra: test
License-File: LICENSE.rst
+Requires-Dist: pytest>=4.6
+Requires-Dist: setuptools>=30.3.0
+Requires-Dist: packaging>=17.0
+Provides-Extra: test
+Requires-Dist: numpy; extra == "test"
+Requires-Dist: pytest-remotedata>=0.3.2; extra == "test"
+Requires-Dist: sphinx; extra == "test"
==================
pytest-doctestplus
@@ -71,6 +76,10 @@
* optional inclusion of ``*.rst`` files for doctests (see `Setup and Configuration`_)
* optional inclusion of doctests in docstrings of Numpy ufuncs
+Further, ``pytest-doctestplus`` supports editing files to fix incorrect docstrings
+(See `Fixing Existing Docstrings`_).
+
+.. _pytest-remotedata: https://github.com/astropy/pytest-remotedata
Installation
------------
@@ -132,6 +141,23 @@
doctest settings, see the `doctest documentation
<https://docs.python.org/3/library/doctest.html#option-flags>`_.
+Running Tests in Markdown Files
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To run doctests in Markdown files, invoke pytest with the command line options
+``--doctest-plus --doctest-glob '*.md'``.
+
+If you write doctests inside `GitHub-style triple backtick fenced code blocks
+<https://docs.github.com/en/get-started/writing-on-github/working-with-advan…>`_,
+then in order for pytest-doctest to find and run them you need to include an
+extra trailing newline inside your code blocks, like this::
+
+ ```pycon
+ >>> 1 + 2
+ 2
+
+ ```
+
Doctest Directives
~~~~~~~~~~~~~~~~~~
@@ -387,6 +413,54 @@
``conf.py`` file.
+Fixing Existing Docstrings
+--------------------------
+The plugin has basic support to fix docstrings, this can be enabled by
+running ``pytest`` with ``--doctest-plus-generate-diff``.
+Without further options, this will print out a diff and a list of files that
+would be modified. Using ``--doctest-plus-generate-diff=overwrite`` will
+modify the files in-place, so it is recommended to run the check first to
+verify the paths.
+You may wish to review changes manually and only commit some patches e.g. using ``git commit --patch``.
+
+The current diff generation is still very basic, for example, it does not account for
+existing ``...``. By default a diff is only generated for *failing* doctests.
+
+In general, a mass edit may wish to focus on a specific change and
+possibly include passing tests. So you can opt-in into the behavior by
+adding a hook to your ``conftest.py``::
+
+ @pytest.hookimpl
+ def pytest_doctestplus_diffhook(info):
+ info["use"] = True # Overwrite all results (even successes)
+ if info["fileno"] is None:
+ # E.g. NumPy has C docstrings that cannot be found, we can add
+ # custom logic here to try and find these:
+ info["filename"] = ...
+ info["lineno"] = ...
+
+Where ``info`` is a dictionary containing the following items:
+
+* ``use``: ``True`` or ``False`` signalling whether to apply the diff. This is
+ set to ``False`` if a doctest succeeded and ``True`` if the doctest failed.
+* ``name``: The name of the test (e.g. the function being documented)
+* ``filename``: The file that contains the test (this can be wrong in certain
+ situation and in that case ``test_lineno`` will be wrong as well).
+* ``source``: The source code that was executed for this test
+* ``test_lineno``: The line of code where the example block (or function) starts.
+ In some cases, the test file cannot be found and the lineno will be ``None``,
+ you can manually try to fix these.
+* ``example_lineno``: The line number of the example snippet
+ (individual ``>>>``).
+* ``want``: The current documentation.
+* ``got``: The result of executing the example.
+
+You can modify the dictionary in-place to modify the behavior.
+
+Please note that we assume that this API will be used only occasionally and
+reserve the right to change it at any time.
+
+
Development Status
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/README.rst new/pytest-doctestplus-1.1.0/README.rst
--- old/pytest-doctestplus-1.0.0/README.rst 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/README.rst 2023-12-13 19:12:44.000000000 +0100
@@ -41,6 +41,10 @@
* optional inclusion of ``*.rst`` files for doctests (see `Setup and Configuration`_)
* optional inclusion of doctests in docstrings of Numpy ufuncs
+Further, ``pytest-doctestplus`` supports editing files to fix incorrect docstrings
+(See `Fixing Existing Docstrings`_).
+
+.. _pytest-remotedata: https://github.com/astropy/pytest-remotedata
Installation
------------
@@ -102,6 +106,23 @@
doctest settings, see the `doctest documentation
<https://docs.python.org/3/library/doctest.html#option-flags>`_.
+Running Tests in Markdown Files
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To run doctests in Markdown files, invoke pytest with the command line options
+``--doctest-plus --doctest-glob '*.md'``.
+
+If you write doctests inside `GitHub-style triple backtick fenced code blocks
+<https://docs.github.com/en/get-started/writing-on-github/working-with-advan…>`_,
+then in order for pytest-doctest to find and run them you need to include an
+extra trailing newline inside your code blocks, like this::
+
+ ```pycon
+ >>> 1 + 2
+ 2
+
+ ```
+
Doctest Directives
~~~~~~~~~~~~~~~~~~
@@ -357,6 +378,54 @@
``conf.py`` file.
+Fixing Existing Docstrings
+--------------------------
+The plugin has basic support to fix docstrings, this can be enabled by
+running ``pytest`` with ``--doctest-plus-generate-diff``.
+Without further options, this will print out a diff and a list of files that
+would be modified. Using ``--doctest-plus-generate-diff=overwrite`` will
+modify the files in-place, so it is recommended to run the check first to
+verify the paths.
+You may wish to review changes manually and only commit some patches e.g. using ``git commit --patch``.
+
+The current diff generation is still very basic, for example, it does not account for
+existing ``...``. By default a diff is only generated for *failing* doctests.
+
+In general, a mass edit may wish to focus on a specific change and
+possibly include passing tests. So you can opt-in into the behavior by
+adding a hook to your ``conftest.py``::
+
+ @pytest.hookimpl
+ def pytest_doctestplus_diffhook(info):
+ info["use"] = True # Overwrite all results (even successes)
+ if info["fileno"] is None:
+ # E.g. NumPy has C docstrings that cannot be found, we can add
+ # custom logic here to try and find these:
+ info["filename"] = ...
+ info["lineno"] = ...
+
+Where ``info`` is a dictionary containing the following items:
+
+* ``use``: ``True`` or ``False`` signalling whether to apply the diff. This is
+ set to ``False`` if a doctest succeeded and ``True`` if the doctest failed.
+* ``name``: The name of the test (e.g. the function being documented)
+* ``filename``: The file that contains the test (this can be wrong in certain
+ situation and in that case ``test_lineno`` will be wrong as well).
+* ``source``: The source code that was executed for this test
+* ``test_lineno``: The line of code where the example block (or function) starts.
+ In some cases, the test file cannot be found and the lineno will be ``None``,
+ you can manually try to fix these.
+* ``example_lineno``: The line number of the example snippet
+ (individual ``>>>``).
+* ``want``: The current documentation.
+* ``got``: The result of executing the example.
+
+You can modify the dictionary in-place to modify the behavior.
+
+Please note that we assume that this API will be used only occasionally and
+reserve the right to change it at any time.
+
+
Development Status
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/pytest_doctestplus/newhooks.py new/pytest-doctestplus-1.1.0/pytest_doctestplus/newhooks.py
--- old/pytest-doctestplus-1.0.0/pytest_doctestplus/newhooks.py 1970-01-01 01:00:00.000000000 +0100
+++ new/pytest-doctestplus-1.1.0/pytest_doctestplus/newhooks.py 2023-12-13 19:12:44.000000000 +0100
@@ -0,0 +1,5 @@
+# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
+
+def pytest_doctestplus_diffhook(info):
+ """ called when a diff would be generated normally. """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/pytest_doctestplus/output_checker.py new/pytest-doctestplus-1.1.0/pytest_doctestplus/output_checker.py
--- old/pytest-doctestplus-1.0.0/pytest_doctestplus/output_checker.py 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/pytest_doctestplus/output_checker.py 2023-12-13 19:12:44.000000000 +0100
@@ -43,8 +43,6 @@
rtol = 1e-05
atol = 1e-08
- _original_output_checker = doctest.OutputChecker
-
_str_literal_re = re.compile(
r"(\W|^)[uU]([rR]?[\'\"])", re.UNICODE)
_byteorder_re = re.compile(
@@ -55,9 +53,6 @@
r"([0-9]+)L", re.UNICODE)
def __init__(self):
- # NOTE OutputChecker is an old-style class with no __init__ method,
- # so we can't call the base class version of __init__ here
-
exp = r'(?:e[+-]?\d+)'
got_floats = (r'\s*([+-]?\d+\.\d*{0}?|'
@@ -80,6 +75,10 @@
fmidend = r'(?<={}){}(?={}|$)'.format(front_sep, want_floats, back_sep)
self.num_want_rgx = re.compile(r'({}|{})'.format(fbeg, fmidend))
+ # As of 2023-09-26, Python base class has no init, but just in case
+ # it acquires one.
+ super().__init__()
+
def do_fixes(self, want, got):
want = re.sub(self._str_literal_re, r'\1\2', want)
want = re.sub(self._byteorder_re, r'\1\2\3', want)
@@ -281,19 +280,13 @@
if flags & FLOAT_CMP:
return self.normalize_floats(want, got, flags)
- # Can't use super here because doctest.OutputChecker is not a
- # new-style class.
- return self._original_output_checker.check_output(
- self, want, got, flags)
+ return super().check_output(want, got, flags)
def output_difference(self, want, got, flags):
if flags & FIX:
want, got = self.do_fixes(want, got)
- # Can't use super here because doctest.OutputChecker is not a
- # new-style class.
- return self._original_output_checker.output_difference(
- self, want, got, flags)
+ return super().output_difference(want, got, flags)
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/pytest_doctestplus/plugin.py new/pytest-doctestplus-1.1.0/pytest_doctestplus/plugin.py
--- old/pytest-doctestplus-1.0.0/pytest_doctestplus/plugin.py 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/pytest_doctestplus/plugin.py 2023-12-13 19:12:44.000000000 +0100
@@ -1,4 +1,5 @@
# Licensed under a 3-clause BSD style license - see LICENSE.rst
+
"""
This plugin provides advanced doctest support and enables the testing of .rst
files.
@@ -8,8 +9,11 @@
import os
import re
import sys
+import tempfile
import warnings
+from collections import defaultdict
from pathlib import Path
+import subprocess
from textwrap import indent
from unittest import SkipTest
@@ -119,6 +123,20 @@
parser.addoption("--doctest-only", action="store_true",
help="Test only doctests. Implies usage of doctest-plus.")
+ parser.addoption("--doctest-plus-generate-diff",
+ help=(
+ "Generate a diff where expected output and actual "
+ "output differ. "
+ "The diff is printed to stdout if not using "
+ "`--doctest-plus-generate-diff=overwrite` which "
+ "causes editing of the original files.\n"
+ "NOTE: Unless an in-pace build is picked up, python "
+ "file paths may point to unexpected places. "
+ "If 'overwrite' is not used, will create a temporary "
+ "folder and use `git diff -p` to generate a diff."),
+ choices=["diff", "overwrite"],
+ action="store", nargs="?", default=False, const="diff")
+
parser.addini("text_file_format",
"Default format for docs. "
"This is no longer recommended, use --doctest-glob instead.")
@@ -160,6 +178,11 @@
default=[])
+def pytest_addhooks(pluginmanager):
+ from pytest_doctestplus import newhooks
+ pluginmanager.add_hookspecs(newhooks)
+
+
def get_optionflags(parent):
optionflags_str = parent.config.getini('doctest_optionflags')
flag_int = 0
@@ -185,6 +208,8 @@
def pytest_configure(config):
doctest_plugin = config.pluginmanager.getplugin('doctest')
run_regular_doctest = config.option.doctestmodules and not config.option.doctest_plus
+ if config.option.doctest_plus_generate_diff:
+ config.option.doctest_only = True
use_doctest_plus = config.getini(
'doctest_plus') or config.option.doctest_plus or config.option.doctest_only
use_doctest_ufunc = config.getini(
@@ -204,13 +229,17 @@
use_rst = config.getini('doctest_rst') or config.option.doctest_rst
file_ext = config.option.text_file_format or config.getini('text_file_format') or 'rst'
if use_rst:
- config.option.doctestglob.append('*.{}'.format(file_ext))
+ config.option.doctestglob.append(f'*.{file_ext}')
# override default comment characters
ext_comment_pairs = [pair.split('=') for pair in config.getini('text_file_comment_chars')]
for ext, chars in ext_comment_pairs:
comment_characters[ext] = chars
+ # Fetch the global hook function:
+ global doctestplus_diffhook
+ doctestplus_diffhook = config.hook.pytest_doctestplus_diffhook
+
class DocTestModulePlus(doctest_plugin.DoctestModule):
# pytest 2.4.0 defines "collect". Prior to that, it defined
# "runtest". The "collect" approach is better, because we can
@@ -228,7 +257,7 @@
fspath = self.fspath
filepath = self.fspath.basename
- if filepath == "setup.py":
+ if filepath in ("setup.py", "__main__.py"):
return
elif filepath == "conftest.py":
if PYTEST_GE_7_0:
@@ -245,11 +274,12 @@
try:
if PYTEST_GT_5:
from _pytest.pathlib import import_path
+ mode = self.config.getoption("importmode")
if PYTEST_GE_7_0:
- module = import_path(fspath, root=self.config.rootpath)
+ module = import_path(fspath, mode=mode, root=self.config.rootpath)
elif PYTEST_GT_5:
- module = import_path(fspath)
+ module = import_path(fspath, mode=mode)
else:
module = fspath.pyimport()
except ImportError:
@@ -268,6 +298,7 @@
checker=OutputChecker(),
# Helper disables continue-on-failure when debugging is enabled
continue_on_failure=_get_continue_on_failure(config),
+ generate_diff=config.option.doctest_plus_generate_diff,
)
for test in finder.find(module):
@@ -332,6 +363,7 @@
runner = DebugRunnerPlus(
verbose=False, optionflags=optionflags, checker=OutputChecker(),
continue_on_failure=_get_continue_on_failure(self.config),
+ generate_diff=self.config.option.doctest_plus_generate_diff,
)
parser = DocTestParserPlus()
@@ -394,7 +426,7 @@
skip_next = False
lines = entry.strip().splitlines()
if any(re.match(
- '{} doctest-skip-all'.format(comment_char), x.strip()) for x in lines):
+ f'{comment_char} doctest-skip-all', x.strip()) for x in lines):
skip_all = True
continue
@@ -405,7 +437,7 @@
# special environment to be in between, e.g. \begin{python}
last_lines = lines[-2:]
matches = [re.match(
- r'{}\s+doctest-skip\s*::(\s+.*)?'.format(comment_char),
+ fr'{comment_char}\s+doctest-skip\s*::(\s+.*)?',
last_line) for last_line in last_lines]
if len(matches) > 1:
@@ -423,7 +455,7 @@
if config.getoption('remote_data', 'none') != 'any':
matches = (re.match(
- r'{}\s+doctest-remote-data\s*::'.format(comment_char),
+ fr'{comment_char}\s+doctest-remote-data\s*::',
last_line) for last_line in last_lines)
if any(matches):
@@ -431,7 +463,7 @@
continue
matches = [re.match(
- r'{}\s+doctest-requires\s*::\s+(.*)'.format(comment_char),
+ fr'{comment_char}\s+doctest-requires\s*::\s+(.*)',
last_line) for last_line in last_lines]
if len(matches) > 1:
@@ -487,7 +519,7 @@
config.pluginmanager.unregister(doctest_plugin)
-class DoctestPlus(object):
+class DoctestPlus:
def __init__(self, doctest_module_item_cls, doctest_textfile_item_cls, file_globs):
"""
doctest_module_item_cls should be a class inheriting
@@ -673,6 +705,7 @@
if mod in cls._import_cache:
if not cls._import_cache[mod]:
return False
+ continue
if cls._module_checker.check(mod):
cls._import_cache[mod] = True
@@ -714,9 +747,17 @@
for pats, mods in reqs.items():
if not isinstance(pats, tuple):
pats = (pats,)
+
for pat in pats:
- if not fnmatch.fnmatch(test.name, '.'.join((name, pat))):
- continue
+ if pat == '*':
+ pass
+ elif pat == '.' and test.name == name:
+ pass
+ elif fnmatch.fnmatch(test.name, '.'.join((name, pat))):
+ pass
+ else:
+ continue # The pattern does not apply
+
if not self.check_required_modules(mods):
return False
return True
@@ -726,12 +767,143 @@
return tests
+def write_modified_file(fname, new_fname, changes):
+ # Sort in reversed order to edit the lines:
+ bad_tests = []
+ changes.sort(key=lambda x: (x["test_lineno"], x["example_lineno"]),
+ reverse=True)
+
+ with open(fname, "r") as f:
+ text = f.readlines()
+
+ for change in changes:
+ if change["test_lineno"] is None:
+ bad_tests.append(change["name"])
+ continue
+ lineno = change["test_lineno"] + change["example_lineno"] + 1
+
+ indentation = " " * change["nindent"]
+ want = indent(change["want"], indentation, lambda x: True)
+ # Replace fully blank lines with the required `<BLANKLINE>`
+ # (May need to do this also if line contains only whitespace)
+ got = change["got"].replace("\n\n", "\n<BLANKLINE>\n")
+ got = indent(got, indentation, lambda x: True)
+
+ text[lineno:lineno+want.count("\n")] = [got]
+
+ with open(new_fname, "w") as f:
+ f.write("".join(text))
+
+ return bad_tests
+
+
+def pytest_terminal_summary(terminalreporter, exitstatus, config):
+ changesets = DebugRunnerPlus._changesets
+ diff_mode = DebugRunnerPlus._generate_diff
+ DebugRunnerPlus._changesets = defaultdict(lambda: [])
+ DebugRunnerPlus._generate_diff = None
+ all_bad_tests = []
+ if not diff_mode:
+ return # we do not report or apply diffs
+
+ if diff_mode != "overwrite":
+ # In this mode, we write a corrected file to a temporary folder in
+ # order to compare them (rather than modifying the file).
+ terminalreporter.section("Reporting DoctestPlus Diffs")
+ if not changesets:
+ terminalreporter.write_line("No doc changes to show")
+ return
+
+ # Strip away the common part of the path to make it a bit clearner...
+ common_path = os.path.commonpath(changesets.keys())
+ if not os.path.isdir(common_path):
+ common_path = os.path.split(common_path)[0]
+
+ with tempfile.TemporaryDirectory() as tmpdirname:
+ for fname, changes in changesets.items():
+ # Create a new filename and ensure the path exists (in the
+ # temporary directory).
+ new_fname = fname.replace(common_path, tmpdirname)
+ os.makedirs(os.path.split(new_fname)[0], exist_ok=True)
+
+ bad_tests = write_modified_file(fname, new_fname, changes)
+ all_bad_tests.extend(bad_tests)
+
+ # git diff returns 1 to signal changes, so just ignore the
+ # exit status:
+ with subprocess.Popen(
+ ["git", "diff", "-p", "--no-index", fname, new_fname],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) as p:
+ p.wait()
+ # Diff should be fine, but write error if not:
+ diff = p.stderr.read()
+ diff += p.stdout.read()
+
+ # hide the temporary directory (cleaning up anyway):
+ if not os.path.isabs(common_path):
+ diff = diff.replace(tmpdirname, "/" + common_path)
+ else:
+ # diff seems to not include extra /
+ diff = diff.replace(tmpdirname, common_path)
+ terminalreporter.write(diff)
+ terminalreporter.write_line(f"{tmpdirname}, {common_path}")
+
+ terminalreporter.section("Files with modifications", "-")
+ terminalreporter.write_line(
+ "The following files would be overwritten with "
+ "`--doctest-plus-generate-diff=overwrite`:")
+ for fname in changesets:
+ terminalreporter.write_line(f" {fname}")
+ terminalreporter.write_line(
+ "make sure these file paths are correct before calling it!")
+ else:
+ # We are in overwrite mode so will write the modified version directly
+ # back into the same file and only report which files were changed.
+ terminalreporter.section("DoctestPlus Fixing File Docs")
+ if not changesets:
+ terminalreporter.write_line("No doc changes to apply")
+ return
+ terminalreporter.write_line("Applied fix to the following files:")
+ for fname, changes in changesets.items():
+ bad_tests = write_modified_file(fname, fname, changes)
+ all_bad_tests.extend(bad_tests)
+ terminalreporter.write_line(f" {fname}")
+
+ if all_bad_tests:
+ terminalreporter.section("Broken Linenumbers", "-")
+ terminalreporter.write_line(
+ "Doctestplus was unable to fix the following tests "
+ "(their source is hidden or `__module__` overridden?)")
+ for bad_test in all_bad_tests:
+ terminalreporter.write_line(f" {bad_test}")
+ terminalreporter.write_line(
+ "You can implementing a hook function to fix this (see README).")
+
+
class DebugRunnerPlus(doctest.DebugRunner):
- def __init__(self, checker=None, verbose=None, optionflags=0, continue_on_failure=True):
+ _changesets = defaultdict(lambda: [])
+ _generate_diff = False
+
+ def __init__(self, checker=None, verbose=None, optionflags=0,
+ continue_on_failure=True, generate_diff=False):
+ # generated_diff is False, "diff", or "overwrite" (only need truthiness)
+ DebugRunnerPlus._generate_diff = generate_diff
+
super().__init__(checker=checker, verbose=verbose, optionflags=optionflags)
self.continue_on_failure = continue_on_failure
+ def report_success(self, out, test, example, got):
+ if self._generate_diff:
+ self.track_diff(False, out, test, example, got)
+ return
+
+ return super().report_success(out, test, example, got)
+
def report_failure(self, out, test, example, got):
+ if self._generate_diff:
+ self.track_diff(True, out, test, example, got)
+ return
+
failure = doctest.DocTestFailure(test, example, got)
if self.continue_on_failure:
out.append(failure)
@@ -747,3 +919,17 @@
out.append(failure)
else:
raise failure
+
+ def track_diff(self, use, out, test, example, got):
+ if example.want == got:
+ return
+
+ info = dict(use=use, name=test.name, filename=test.filename,
+ source=example.source, nindent=example.indent,
+ want=example.want, got=got, test_lineno=test.lineno,
+ example_lineno=example.lineno)
+ doctestplus_diffhook(info=info)
+ if not info["use"]:
+ return
+
+ self._changesets[info["filename"]].append(info)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/pytest_doctestplus/version.py new/pytest-doctestplus-1.1.0/pytest_doctestplus/version.py
--- old/pytest-doctestplus-1.0.0/pytest_doctestplus/version.py 2023-08-11 18:22:14.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/pytest_doctestplus/version.py 2023-12-13 19:12:59.000000000 +0100
@@ -1,4 +1,16 @@
# file generated by setuptools_scm
# don't change, don't track in version control
-__version__ = version = '1.0.0'
-__version_tuple__ = version_tuple = (1, 0, 0)
+TYPE_CHECKING = False
+if TYPE_CHECKING:
+ from typing import Tuple, Union
+ VERSION_TUPLE = Tuple[Union[int, str], ...]
+else:
+ VERSION_TUPLE = object
+
+version: str
+__version__: str
+__version_tuple__: VERSION_TUPLE
+version_tuple: VERSION_TUPLE
+
+__version__ = version = '1.1.0'
+__version_tuple__ = version_tuple = (1, 1, 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/pytest_doctestplus.egg-info/PKG-INFO new/pytest-doctestplus-1.1.0/pytest_doctestplus.egg-info/PKG-INFO
--- old/pytest-doctestplus-1.0.0/pytest_doctestplus.egg-info/PKG-INFO 2023-08-11 18:22:14.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/pytest_doctestplus.egg-info/PKG-INFO 2023-12-13 19:12:59.000000000 +0100
@@ -1,12 +1,12 @@
Metadata-Version: 2.1
Name: pytest-doctestplus
-Version: 1.0.0
+Version: 1.1.0
Summary: Pytest plugin with advanced doctest features.
Home-page: https://github.com/scientific-python/pytest-doctestplus
Author: Scientific Python Developers
License: BSD
Keywords: doctest,rst,pytest,py.test
-Classifier: Development Status :: 3 - Alpha
+Classifier: Development Status :: 5 - Production/Stable
Classifier: Framework :: Pytest
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
@@ -14,7 +14,6 @@
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
@@ -23,10 +22,16 @@
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Software Development :: Testing
Classifier: Topic :: Utilities
-Requires-Python: >=3.7
+Requires-Python: >=3.8
Description-Content-Type: text/x-rst
-Provides-Extra: test
License-File: LICENSE.rst
+Requires-Dist: pytest>=4.6
+Requires-Dist: setuptools>=30.3.0
+Requires-Dist: packaging>=17.0
+Provides-Extra: test
+Requires-Dist: numpy; extra == "test"
+Requires-Dist: pytest-remotedata>=0.3.2; extra == "test"
+Requires-Dist: sphinx; extra == "test"
==================
pytest-doctestplus
@@ -71,6 +76,10 @@
* optional inclusion of ``*.rst`` files for doctests (see `Setup and Configuration`_)
* optional inclusion of doctests in docstrings of Numpy ufuncs
+Further, ``pytest-doctestplus`` supports editing files to fix incorrect docstrings
+(See `Fixing Existing Docstrings`_).
+
+.. _pytest-remotedata: https://github.com/astropy/pytest-remotedata
Installation
------------
@@ -132,6 +141,23 @@
doctest settings, see the `doctest documentation
<https://docs.python.org/3/library/doctest.html#option-flags>`_.
+Running Tests in Markdown Files
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To run doctests in Markdown files, invoke pytest with the command line options
+``--doctest-plus --doctest-glob '*.md'``.
+
+If you write doctests inside `GitHub-style triple backtick fenced code blocks
+<https://docs.github.com/en/get-started/writing-on-github/working-with-advan…>`_,
+then in order for pytest-doctest to find and run them you need to include an
+extra trailing newline inside your code blocks, like this::
+
+ ```pycon
+ >>> 1 + 2
+ 2
+
+ ```
+
Doctest Directives
~~~~~~~~~~~~~~~~~~
@@ -387,6 +413,54 @@
``conf.py`` file.
+Fixing Existing Docstrings
+--------------------------
+The plugin has basic support to fix docstrings, this can be enabled by
+running ``pytest`` with ``--doctest-plus-generate-diff``.
+Without further options, this will print out a diff and a list of files that
+would be modified. Using ``--doctest-plus-generate-diff=overwrite`` will
+modify the files in-place, so it is recommended to run the check first to
+verify the paths.
+You may wish to review changes manually and only commit some patches e.g. using ``git commit --patch``.
+
+The current diff generation is still very basic, for example, it does not account for
+existing ``...``. By default a diff is only generated for *failing* doctests.
+
+In general, a mass edit may wish to focus on a specific change and
+possibly include passing tests. So you can opt-in into the behavior by
+adding a hook to your ``conftest.py``::
+
+ @pytest.hookimpl
+ def pytest_doctestplus_diffhook(info):
+ info["use"] = True # Overwrite all results (even successes)
+ if info["fileno"] is None:
+ # E.g. NumPy has C docstrings that cannot be found, we can add
+ # custom logic here to try and find these:
+ info["filename"] = ...
+ info["lineno"] = ...
+
+Where ``info`` is a dictionary containing the following items:
+
+* ``use``: ``True`` or ``False`` signalling whether to apply the diff. This is
+ set to ``False`` if a doctest succeeded and ``True`` if the doctest failed.
+* ``name``: The name of the test (e.g. the function being documented)
+* ``filename``: The file that contains the test (this can be wrong in certain
+ situation and in that case ``test_lineno`` will be wrong as well).
+* ``source``: The source code that was executed for this test
+* ``test_lineno``: The line of code where the example block (or function) starts.
+ In some cases, the test file cannot be found and the lineno will be ``None``,
+ you can manually try to fix these.
+* ``example_lineno``: The line number of the example snippet
+ (individual ``>>>``).
+* ``want``: The current documentation.
+* ``got``: The result of executing the example.
+
+You can modify the dictionary in-place to modify the behavior.
+
+Please note that we assume that this API will be used only occasionally and
+reserve the right to change it at any time.
+
+
Development Status
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/pytest_doctestplus.egg-info/SOURCES.txt new/pytest-doctestplus-1.1.0/pytest_doctestplus.egg-info/SOURCES.txt
--- old/pytest-doctestplus-1.0.0/pytest_doctestplus.egg-info/SOURCES.txt 2023-08-11 18:22:14.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/pytest_doctestplus.egg-info/SOURCES.txt 2023-12-13 19:12:59.000000000 +0100
@@ -13,6 +13,7 @@
licenses/README.rst
licenses/SYMPY_LICENSE.rst
pytest_doctestplus/__init__.py
+pytest_doctestplus/newhooks.py
pytest_doctestplus/output_checker.py
pytest_doctestplus/plugin.py
pytest_doctestplus/utils.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/setup.cfg new/pytest-doctestplus-1.1.0/setup.cfg
--- old/pytest-doctestplus-1.0.0/setup.cfg 2023-08-11 18:22:14.703384200 +0200
+++ new/pytest-doctestplus-1.1.0/setup.cfg 2023-12-13 19:12:59.113894500 +0100
@@ -3,7 +3,7 @@
url = https://github.com/scientific-python/pytest-doctestplus
author = Scientific Python Developers
classifiers =
- Development Status :: 3 - Alpha
+ Development Status :: 5 - Production/Stable
Framework :: Pytest
Intended Audience :: Developers
License :: OSI Approved :: BSD License
@@ -11,7 +11,6 @@
Programming Language :: Python
Programming Language :: Python :: 3
Programming Language :: Python :: 3 :: Only
- Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
@@ -29,7 +28,7 @@
[options]
zip_safe = False
packages = find:
-python_requires = >=3.7
+python_requires = >=3.8
setup_requires =
setuptools_scm
install_requires =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/tests/conftest.py new/pytest-doctestplus-1.1.0/tests/conftest.py
--- old/pytest-doctestplus-1.0.0/tests/conftest.py 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/tests/conftest.py 2023-12-13 19:12:44.000000000 +0100
@@ -8,7 +8,7 @@
# Keep this until we require numpy to be >=2.0 or there is a directive in doctestplus
# to support multiple ways of repr
-if Version(np.__version__) > Version("2.0.0.dev0+151"):
+if Version(np.__version__) >= Version("2.0.dev"):
np.set_printoptions(legacy="1.25")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/tests/python/doctests.py new/pytest-doctestplus-1.1.0/tests/python/doctests.py
--- old/pytest-doctestplus-1.0.0/tests/python/doctests.py 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/tests/python/doctests.py 2023-12-13 19:12:44.000000000 +0100
@@ -1,5 +1,12 @@
# Licensed under a 3-clause BSD style license - see LICENSE.rst
+"""
+Also module level skips should be matched with `*` and `.`, test at least
+the `.` version (the star would match all others too).
+
+>>> import foobar
+"""
+
__doctest_skip__ = [
'skip_this_test',
'ClassWithSomeBadDocTests.this_test_fails',
@@ -7,6 +14,7 @@
]
__doctest_requires__ = {
+ '.': ['foobar'],
'depends_on_foobar': ['foobar'],
'depends_on_foobar_submodule': ['foobar.baz'],
'depends_on_two_modules': ['os', 'foobar'],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/tests/test_doctestplus.py new/pytest-doctestplus-1.1.0/tests/test_doctestplus.py
--- old/pytest-doctestplus-1.0.0/tests/test_doctestplus.py 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/tests/test_doctestplus.py 2023-12-13 19:12:44.000000000 +0100
@@ -3,6 +3,8 @@
from textwrap import dedent
import sys
+from packaging.version import Version
+
import pytest
import doctest
@@ -12,6 +14,9 @@
pytest_plugins = ['pytester']
+PYTEST_LT_6 = Version(pytest.__version__) < Version('6.0.0')
+
+
def test_ignored_whitespace(testdir):
testdir.makeini(
"""
@@ -593,6 +598,32 @@
).assertoutcome(passed=1)
+(a)pytest.mark.xfail(reason='known issue, fenced code blocks require an extra trailing newline')
+def test_markdown_fenced_code(testdir):
+ testdir.makefile('.md', foo="""\
+```
+>>> 1 + 1
+2
+```
+""")
+ testdir.inline_run(
+ '--doctest-plus', '--doctest-glob', '*.md'
+ ).assertoutcome(passed=1)
+
+
+def test_markdown_fenced_code_with_extra_newline(testdir):
+ testdir.makefile('.md', foo="""\
+```
+>>> 1 + 1
+2
+
+```
+""")
+ testdir.inline_run(
+ '--doctest-plus', '--doctest-glob', '*.md'
+ ).assertoutcome(passed=1)
+
+
def test_text_file_comments(testdir):
testdir.makefile(
'.md',
@@ -769,20 +800,38 @@
)
-def test_doctest_subpackage_requires(testdir, caplog):
+# Note that each entry under doctest_subpackage_requires has different whitespace
+# around the = to make sure that all cases work properly.
+SUBPACKAGE_REQUIRES_INI = (
+ "makeini",
+ """
+ [pytest]
+ doctest_subpackage_requires =
+ test/a/* = pytest>1
+ test/b/*= pytest>1;averyfakepackage>99999.9
+ test/c/*=anotherfakepackage>=22000.1.2
+ """
+)
+SUBPACKAGE_REQUIRES_PYPROJECT = (
+ "makepyprojecttoml",
+ """
+ [tool.pytest.ini_options]
+ doctest_subpackage_requires = [
+ "test/a/* = pytest>1",
+ "test/b/*= pytest>1;averyfakepackage>99999.9",
+ "test/c/*=anotherfakepackage>=22000.1.2",
+ ]
+ """
+)
- # Note that each entry below has different whitespace around the = to
- # make sure that all cases work properly.
- testdir.makeini(
- """
- [pytest]
- doctest_subpackage_requires =
- test/a/* = pytest>1
- test/b/*= pytest>1;averyfakepackage>99999.9
- test/c/*=anotherfakepackage>=22000.1.2
- """
- )
+(a)pytest.fixture()
+def subpackage_requires_testdir(testdir, request):
+ if request.param[0] == 'makepyprojecttoml' and PYTEST_LT_6:
+ return None, None
+
+ config_file = getattr(testdir, request.param[0])(request.param[1])
+
test = testdir.mkdir('test')
a = test.mkdir('a')
b = test.mkdir('b')
@@ -801,12 +850,46 @@
b.join('testcode.py').write(pyfile)
c.join('testcode.py').write(pyfile)
- reprec = testdir.inline_run(test, "--doctest-plus")
+ return config_file, testdir
+
+
+(a)pytest.mark.parametrize('subpackage_requires_testdir', [SUBPACKAGE_REQUIRES_INI, SUBPACKAGE_REQUIRES_PYPROJECT], indirect=True)
+def test_doctest_subpackage_requires(subpackage_requires_testdir, caplog):
+ config_file, testdir = subpackage_requires_testdir
+ if config_file is None:
+ pytest.skip("pyproject.toml not supported in pytest<6")
+
+ reprec = testdir.inline_run(str(testdir), f"-c={config_file}", "--doctest-plus")
reprec.assertoutcome(passed=1)
assert reprec.listoutcomes()[0][0].location[0] == os.path.join('test', 'a', 'testcode.py')
assert caplog.text == ''
+(a)pytest.mark.parametrize(('import_mode', 'expected'), [
+ pytest.param('importlib', dict(passed=2), marks=pytest.mark.skipif(PYTEST_LT_6, reason="importlib import mode not supported on Pytest <6"), id="importlib"),
+ pytest.param('append', dict(failed=1), id="append"),
+ pytest.param('prepend', dict(failed=1), id="prepend"),
+])
+def test_import_mode(testdir, import_mode, expected):
+ """Test that two files with the same name but in different folders work with --import-mode=importlib."""
+ a = testdir.mkdir('a')
+ b = testdir.mkdir('b')
+
+ pyfile = dedent("""
+ def f():
+ '''
+ >>> 1
+ 1
+ '''
+ """)
+
+ a.join('testcode.py').write(pyfile)
+ b.join('testcode.py').write(pyfile)
+
+ reprec = testdir.inline_run(str(testdir), "--doctest-plus", f"--import-mode={import_mode}")
+ reprec.assertoutcome(**expected)
+
+
def test_doctest_skip(testdir):
testdir.makeini(
"""
@@ -1039,6 +1122,24 @@
assert ("something()\nUNEXPECTED EXCEPTION: NameError" in report.longreprtext) is cont_on_fail
+def test_main(testdir):
+ pkg = testdir.mkdir('pkg')
+ code = dedent(
+ '''
+ def f():
+ raise RuntimeError("This is a CLI, do not execute module while doctesting")
+
+ f()
+ '''
+ )
+ pkg.join('__init__.py').write_text("", "utf-8")
+ main_path = pkg.join('__main__.py')
+ main_path.write_text(code, "utf-8")
+
+ testdir.inline_run(pkg).assertoutcome(passed=0)
+ testdir.inline_run(pkg, '--doctest-plus').assertoutcome(passed=0)
+
+
def test_ufunc(testdir):
pytest.importorskip('numpy')
@@ -1144,6 +1245,88 @@
result.assertoutcome(passed=2, failed=0)
+NORCURSEDIRS_INI = (
+ "makeini",
+ """
+ [pytest]
+ doctest_norecursedirs =
+ "bad_dir"
+ "*/bad_file.py"
+ """
+)
+NORCURSEDIRS_PYPROJECT = (
+ "makepyprojecttoml",
+ """
+ [tool.pytest.ini_options]
+ doctest_norecursedirs = [
+ "bad_dir",
+ "*/bad_file.py",
+ ]
+ """
+)
+
+
+(a)pytest.fixture()
+def norecursedirs_testdir(testdir, request):
+ if request.param[0] == 'makepyprojecttoml' and PYTEST_LT_6:
+ return None, None
+
+ config_file = getattr(testdir, request.param[0])(request.param[1])
+
+ bad_text = dedent("""
+ def f():
+ '''
+ This should fail doc testing
+ >>> 1
+ 2
+ '''
+ pass
+ """)
+
+ good_text = dedent("""
+ def g():
+ '''
+ This should pass doc testing
+ >>> 1
+ 1
+ '''
+ pass
+ """)
+
+ # Create a bad file that should be by its folder
+ bad_subdir = testdir.mkdir("bad_dir")
+ bad_file = bad_subdir.join("test_foobar.py")
+ bad_file.write_text(bad_text, "utf-8")
+
+ # Create a bad file that should be skipped by its name
+ okay_subdir1 = testdir.mkdir("okay_foo_dir")
+ bad_file = okay_subdir1.join("bad_file.py")
+ bad_file.write_text(bad_text, "utf-8")
+ # Create a good file in that directory that doctest won't skip
+ good_file1 = okay_subdir1.join("good_file1.py")
+ good_file1.write_text(good_text, "utf-8")
+
+ # Create another bad file that should be skipped by its name
+ okay_subdir2 = testdir.mkdir("okay_bar_dir")
+ bad_file = okay_subdir2.join("bad_file.py")
+ bad_file.write_text(bad_text, "utf-8")
+ # Create a good file in that directory that doctest won't skip
+ good_file2 = okay_subdir2.join("good_file2.py")
+ good_file2.write_text(good_text, "utf-8")
+
+ return config_file, testdir
+
+
+(a)pytest.mark.parametrize('norecursedirs_testdir', [NORCURSEDIRS_INI, NORCURSEDIRS_PYPROJECT], indirect=True)
+def test_doctest_norecursedirs(norecursedirs_testdir):
+ config_file, testdir = norecursedirs_testdir
+ if config_file is None:
+ pytest.skip("pyproject.toml not supported in pytest<6")
+
+ reprec = testdir.inline_run(str(testdir), f"-c={config_file}", "--doctest-plus")
+ reprec.assertoutcome(passed=2)
+
+
def test_norecursedirs(testdir):
testdir.makeini(
"""
@@ -1165,3 +1348,39 @@
""", "utf-8")
reprec = testdir.inline_run(str(testdir), "--doctest-plus")
reprec.assertoutcome(failed=0, passed=0)
+
+
+def test_generate_diff_basic(testdir, capsys):
+ p = testdir.makepyfile("""
+ def f():
+ '''
+ >>> print(2)
+ 4
+ >>> print(3)
+ 5
+ '''
+ pass
+ """)
+ with open(p) as f:
+ original = f.read()
+
+ testdir.inline_run(p, "--doctest-plus-generate-diff")
+ diff = dedent("""
+ >>> print(2)
+ - 4
+ + 2
+ >>> print(3)
+ - 5
+ + 3
+ """)
+ captured = capsys.readouterr()
+ assert diff in captured.out
+
+ testdir.inline_run(p, "--doctest-plus-generate-diff=overwrite")
+ captured = capsys.readouterr()
+ assert "Applied fix to the following files" in captured.out
+
+ with open(p) as f:
+ result = f.read()
+
+ assert result == original.replace("4", "2").replace("5", "3")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pytest-doctestplus-1.0.0/tox.ini new/pytest-doctestplus-1.1.0/tox.ini
--- old/pytest-doctestplus-1.0.0/tox.ini 2023-08-11 18:21:57.000000000 +0200
+++ new/pytest-doctestplus-1.1.0/tox.ini 2023-12-13 19:12:44.000000000 +0100
@@ -1,6 +1,6 @@
[tox]
envlist =
- py{37,38,39,310,311,312}-test
+ py{38,39,310,311,312}-test
codestyle
requires =
setuptools >= 30.3.0
@@ -14,7 +14,7 @@
py312: PIP_EXTRA_INDEX_URL = https://pypi.anaconda.org/scientific-python-nightly-wheels/simple
description = run tests
deps =
- pytest46: pytest==4.6.*
+ pytestoldest: pytest==4.6.0
pytest50: pytest==5.0.*
pytest51: pytest==5.1.*
pytest52: pytest==5.2.*
1
0