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 ginac for openSUSE:Factory checked in at 2024-01-03 12:23:48
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ginac (Old)
and /work/SRC/openSUSE:Factory/.ginac.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ginac"
Wed Jan 3 12:23:48 2024 rev:15 rq:1135586 version:1.8.7
Changes:
--------
--- /work/SRC/openSUSE:Factory/ginac/ginac.changes 2023-06-16 16:55:44.066022543 +0200
+++ /work/SRC/openSUSE:Factory/.ginac.new.28375/ginac.changes 2024-01-03 12:23:50.552966115 +0100
@@ -1,0 +2,13 @@
+Thu Dec 28 08:36:20 UTC 2023 - jun wang <junguo.wang(a)suse.com>
+
+- Update to version 1.8.7
+ * Fix series expansion of polynomial(x)^n for small and large n.
+ * Fix bugs in internal parser from strings.
+ * Make ginsh evaluate line-by-line in non-interactive mode.
+ * Several build fixes.
+ * remove obsolete patch ginac-doc-latex-symbol-error.patch
+ becuase it has applied into source code
+ * update patch ginac-fix-makeindex.patch because one line
+ changed
+
+-------------------------------------------------------------------
Old:
----
ginac-1.8.6.tar.bz2
ginac-doc-latex-symbol-error.patch
New:
----
ginac-1.8.7.tar.bz2
BETA DEBUG BEGIN:
Old: * Several build fixes.
* remove obsolete patch ginac-doc-latex-symbol-error.patch
becuase it has applied into source code
BETA DEBUG END:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ginac.spec ++++++
--- /var/tmp/diff_new_pack.u95SpC/_old 2024-01-03 12:23:51.208990092 +0100
+++ /var/tmp/diff_new_pack.u95SpC/_new 2024-01-03 12:23:51.212990238 +0100
@@ -38,7 +38,7 @@
%define library_version 11
Name: %{srcname}%{?pkg_suffix}
-Version: 1.8.6
+Version: 1.8.7
Release: 0
Summary: C++ library for symbolic calculations
License: GPL-2.0-only
@@ -48,8 +48,6 @@
Patch0: ginac-fix-makeindex.patch
# PATCH-FIX-UPSTREAM ginac-cmake-install-doc.patch badshah400(a)gmail.com -- Install man and other documentation files when cmake is used for building
Patch1: ginac-cmake-install-doc.patch
-# PATCH-FIX-UPSTREAM ginac-doc-latex-symbol-error.patch badshah400(a)gmail.com -- Change a math symbol to get pdflatex to build reference.pdf correctly
-Patch2: ginac-doc-latex-symbol-error.patch
BuildRequires: bison
BuildRequires: cln-devel
BuildRequires: cmake
++++++ ginac-1.8.6.tar.bz2 -> ginac-1.8.7.tar.bz2 ++++++
++++ 1602 lines of diff (skipped)
++++ retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/AUTHORS new/ginac-1.8.7/AUTHORS
--- old/ginac-1.8.6/AUTHORS 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/AUTHORS 2023-02-12 00:40:49.000000000 +0100
@@ -1,5 +1,5 @@
-Contacing the developers
-------------------------
+Contacting the developers
+-------------------------
If you have found a bug, have a patch or a question, or would like to
make a suggestion please send email to one of our public mailing lists
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/GiNaC.spec new/ginac-1.8.7/GiNaC.spec
--- old/ginac-1.8.6/GiNaC.spec 2023-02-08 20:23:47.000000000 +0100
+++ new/ginac-1.8.7/GiNaC.spec 2023-08-12 18:10:13.000000000 +0200
@@ -1,5 +1,5 @@
%define name ginac
-%define version 1.8.6
+%define version 1.8.7
%define release 1
Summary: C++ library for symbolic calculations
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/Makefile.am new/ginac-1.8.7/Makefile.am
--- old/ginac-1.8.6/Makefile.am 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/Makefile.am 2023-08-12 18:09:13.000000000 +0200
@@ -17,7 +17,7 @@
cmake/modules/FindGiNaC.cmake \
cmake/modules/FindLibDL.cmake
-BUILD_HELPERS = scripts/yaptu.py scripts/fixupind.py
+BUILD_HELPERS = scripts/yaptu.py
# All the rest of the distributed files
EXTRA_DIST = ginac.pc GiNaC.spec $(BUILD_HELPERS) $(CMAKE_FILES)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/NEWS new/ginac-1.8.7/NEWS
--- old/ginac-1.8.6/NEWS 2023-02-08 20:11:12.000000000 +0100
+++ new/ginac-1.8.7/NEWS 2023-08-12 17:40:31.000000000 +0200
@@ -1,5 +1,11 @@
This file records noteworthy changes.
+1.8.7 (12 August 2023)
+* Fix series expansion of polynomial(x)^n for small and large n.
+* Fix bugs in internal parser from strings.
+* Make ginsh evaluate line-by-line in non-interactive mode.
+* Several build fixes.
+
1.8.6 (8 February 2023)
* Fix wrong numeric info on transcendental functions.
* Fix crash of evaluation of binomial(n, k) with negative integer n, k.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/check/exam_parser.cpp new/ginac-1.8.7/check/exam_parser.cpp
--- old/ginac-1.8.6/check/exam_parser.cpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/check/exam_parser.cpp 2023-06-20 22:23:55.000000000 +0200
@@ -98,6 +98,104 @@
}
}
+// Check that two strings parse to equal expressions.
+static int check_eq(ostream &err_str, parser &reader, const char *expr1, const char *expr2)
+{
+ const string srep1(expr1);
+ const string srep2(expr2);
+ ex e1, e2;
+ try{ e1 = reader(srep1); } catch (const exception &e) {
+ err_str << "\"" << srep1 << "\" failed to parse: "
+ << e.what() << endl;
+ return 1;
+ }
+ try{ e2 = reader(srep2); } catch (const exception &e) {
+ err_str << "\"" << srep2 << "\" failed to parse: "
+ << e.what() << endl;
+ return 1;
+ }
+ if (!(e1-e2).expand().is_zero()) {
+ err_str << "\"" << srep1 << "\" was misparsed as \""
+ << e1 << "\"" << endl;
+ return 1;
+ }
+ return 0;
+}
+
+// Tests for the interaction of the '^' operator with
+// the unary '+' and the unary '-' operators
+static int check5(ostream& err_str)
+{
+ parser reader;
+ return
+ +check_eq(err_str, reader, "3^2+1", "10")
+ +check_eq(err_str, reader, "3^+2-1", "8")
+ +check_eq(err_str, reader, "3^-2+1", "10/9")
+ +check_eq(err_str, reader, "3^-2/5", "1/45")
+ +check_eq(err_str, reader, "3^-2*5", "5/9")
+ +check_eq(err_str, reader, "3^-2-5", "-44/9")
+ +check_eq(err_str, reader, "3^(-2)+1", "10/9")
+ +check_eq(err_str, reader, "(3)^(-2)+1", "10/9")
+ +check_eq(err_str, reader, "+3^2+1", "10")
+ +check_eq(err_str, reader, "+3^+2+1", "10")
+ +check_eq(err_str, reader, "+3^-2+1", "10/9")
+ +check_eq(err_str, reader, "+3^-2/5", "1/45")
+ +check_eq(err_str, reader, "+3^-2*5", "5/9")
+ +check_eq(err_str, reader, "+3^-2-5", "-44/9")
+ +check_eq(err_str, reader, "-3^2+1", "-8")
+ +check_eq(err_str, reader, "-3^+2+1", "-8")
+ +check_eq(err_str, reader, "-3^-2+1", "8/9")
+ +check_eq(err_str, reader, "-3^-2/3", "-1/27")
+ +check_eq(err_str, reader, "1+2^3^4", "1+(2^81)")
+ +check_eq(err_str, reader, "2^3^4+1", "1+(2^81)")
+ +check_eq(err_str, reader, "2^+3^4+1", "1+(2^81)")
+ +check_eq(err_str, reader, "2^3^+4+1", "1+(2^81)");
+}
+
+// Tests for the interaction of the '*' operator with
+// the unary '+' and the unary '-' operators
+static int check6(ostream& err_str)
+{
+ parser reader;
+ return
+ +check_eq(err_str, reader, "3*+2-1", "5")
+ +check_eq(err_str, reader, "3*2+1", "7")
+ +check_eq(err_str, reader, "3*+2+1", "7")
+ +check_eq(err_str, reader, "3*-2+1", "-5")
+ +check_eq(err_str, reader, "3*-2/5", "-6/5")
+ +check_eq(err_str, reader, "3*-2*5", "-30")
+ +check_eq(err_str, reader, "3*-2-5", "-11")
+ +check_eq(err_str, reader, "3*(-2)+1", "-5")
+ +check_eq(err_str, reader, "(3)*(-2)+1", "-5")
+ +check_eq(err_str, reader, "+3*2+1", "7")
+ +check_eq(err_str, reader, "+3*+2+1", "7")
+ +check_eq(err_str, reader, "+3*-2+1", "-5")
+ +check_eq(err_str, reader, "+3*-2/5", "-6/5")
+ +check_eq(err_str, reader, "+3*-2*5", "-30")
+ +check_eq(err_str, reader, "+3*-2-5", "-11")
+ +check_eq(err_str, reader, "-3*2+1", "-5")
+ +check_eq(err_str, reader, "-3*+2+1", "-5")
+ +check_eq(err_str, reader, "-3*-2+1", "7")
+ +check_eq(err_str, reader, "-3*-2/3", "2")
+ +check_eq(err_str, reader, "1+2*3*4", "25")
+ +check_eq(err_str, reader, "2*3*4+1", "25")
+ +check_eq(err_str, reader, "2*+3*4+1", "25")
+ +check_eq(err_str, reader, "2*3*+4+1", "25");
+}
+
+// Tests for nested unary + and unary -
+static int check7(ostream& err_str)
+{
+ parser reader;
+ return
+ +check_eq(err_str, reader, "+1", "1")
+ +check_eq(err_str, reader, "++1", "1")
+ +check_eq(err_str, reader, "+-+1", "-1")
+ +check_eq(err_str, reader, "+-+-1", "1")
+ +check_eq(err_str, reader, "+-+-+1", "1")
+ +check_eq(err_str, reader, "100++--+1+10", "111");
+}
+
int main(int argc, char** argv)
{
cout << "examining old parser bugs" << flush;
@@ -107,6 +205,9 @@
errors += check2(err_str); cout << '.' << flush;
errors += check3(err_str); cout << '.' << flush;
errors += check4(err_str); cout << '.' << flush;
+ errors += check5(err_str); cout << '.' << flush;
+ errors += check6(err_str); cout << '.' << flush;
+ errors += check7(err_str); cout << '.' << flush;
if (errors) {
cout << "Yes, unfortunately:" << endl;
cout << err_str.str();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/check/exam_pseries.cpp new/ginac-1.8.7/check/exam_pseries.cpp
--- old/ginac-1.8.6/check/exam_pseries.cpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/check/exam_pseries.cpp 2023-08-06 19:01:10.000000000 +0200
@@ -390,6 +390,24 @@
return result;
}
+// Test expansion of powers of polynomials.
+static unsigned exam_series15()
+{
+ unsigned result = 0;
+
+ ex e = pow(x + pow(x,2), 2);
+
+ result += check_series(e, 0, Order(1), 0);
+ result += check_series(e, 0, Order(x), 1);
+ result += check_series(e, 0, Order(pow(x,2)), 2);
+ result += check_series(e, 0, pow(x,2) + Order(pow(x,3)), 3);
+ result += check_series(e, 0, pow(x,2) + 2*pow(x,3) + Order(pow(x,4)), 4);
+ result += check_series(e, 0, pow(x,2) + 2*pow(x,3) + pow(x,4), 5);
+ result += check_series(e, 0, pow(x,2) + 2*pow(x,3) + pow(x,4), 6);
+
+ return result;
+}
+
unsigned exam_pseries()
{
unsigned result = 0;
@@ -410,6 +428,7 @@
result += exam_series12(); cout << '.' << flush;
result += exam_series13(); cout << '.' << flush;
result += exam_series14(); cout << '.' << flush;
+ result += exam_series15(); cout << '.' << flush;
return result;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/config/test-driver new/ginac-1.8.7/config/test-driver
--- old/ginac-1.8.6/config/test-driver 2018-10-12 20:59:28.000000000 +0200
+++ new/ginac-1.8.7/config/test-driver 2023-08-12 17:38:26.000000000 +0200
@@ -3,7 +3,7 @@
scriptversion=2018-03-07.03; # UTC
-# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+# Copyright (C) 2011-2021 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -42,11 +42,13 @@
{
cat <<END
Usage:
- test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
- [--expect-failure={yes|no}] [--color-tests={yes|no}]
- [--enable-hard-errors={yes|no}] [--]
+ test-driver --test-name NAME --log-file PATH --trs-file PATH
+ [--expect-failure {yes|no}] [--color-tests {yes|no}]
+ [--enable-hard-errors {yes|no}] [--]
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+See the GNU Automake documentation for information.
END
}
@@ -103,8 +105,14 @@
trap "st=141; $do_exit" 13
trap "st=143; $do_exit" 15
-# Test script is run here.
-"$@" >$log_file 2>&1
+# Test script is run here. We create the file first, then append to it,
+# to ameliorate tests themselves also writing to the log file. Our tests
+# don't, but others can (automake bug#35762).
+: >"$log_file"
+case "$1" in
+ *.sh) sh "$@" >>"$log_file" 2>&1 ;;
+ *) "$@" >>"$log_file" 2>&1 ;;
+esac
estatus=$?
if test $enable_hard_errors = no && test $estatus -eq 99; then
@@ -126,7 +134,7 @@
# know whether the test passed or failed simply by looking at the '.log'
# file, without the need of also peaking into the corresponding '.trs'
# file (automake bug#11814).
-echo "$res $test_name (exit status: $estatus)" >>$log_file
+echo "$res $test_name (exit status: $estatus)" >>"$log_file"
# Report outcome to console.
echo "${col}${res}${std}: $test_name"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/configure.ac new/ginac-1.8.7/configure.ac
--- old/ginac-1.8.6/configure.ac 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/configure.ac 2023-02-11 15:24:37.000000000 +0100
@@ -74,7 +74,7 @@
AC_PATH_PROG(MAKEINDEX, makeindex, "")
AC_PATH_PROG(MAKEINFO, makeinfo, "")
AC_PATH_PROG(DVIPS, dvips, "")
-AM_CONDITIONAL(CONFIG_TEX, [test ! \( -z "$LATEX" -o -z $"PDFLATEX" -o -z "$MAKEINDEX" -o -z "$DVIPS" \)])
+AM_CONDITIONAL(CONFIG_TEX, [test ! \( -z "$LATEX" -o -z "$PDFLATEX" -o -z "$MAKEINDEX" -o -z "$DVIPS" \)])
AC_PATH_PROG(FIG2DEV, fig2dev, "")
AM_CONDITIONAL(CONFIG_FIG2DEV, [test ! -z "$FIG2DEV"])
AS_IF([test -z "$FIG2DEV" -o -z "$MAKEINFO"],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/doc/CMakeLists.txt new/ginac-1.8.7/doc/CMakeLists.txt
--- old/ginac-1.8.6/doc/CMakeLists.txt 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/doc/CMakeLists.txt 2023-02-11 18:25:46.000000000 +0100
@@ -35,7 +35,6 @@
set(_idx ${_dirname}/${_basename}.idx)
set(_ind ${_dirname}/${_basename}.ind)
set(_pdf ${_dirname}/${_basename}.pdf)
- set(_fixupind ${CMAKE_SOURCE_DIR}/scripts/fixupind.py)
add_custom_command(
OUTPUT ${_idx}
COMMAND ${PDFLATEX_COMPILER} ${texfile}
@@ -45,7 +44,6 @@
add_custom_command(
OUTPUT ${_ind}
COMMAND ${MAKEINDEX_COMPILER} ${_idx}
- COMMAND ${PYTHON} ${_fixupind} ${_idx}
WORKING_DIRECTORY ${_dirname}
DEPENDS ${texfile} ${_idx}
COMMENT "MAKEINDEX ${_basename}.idx")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/doc/reference/Makefile.am new/ginac-1.8.7/doc/reference/Makefile.am
--- old/ginac-1.8.6/doc/reference/Makefile.am 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/doc/reference/Makefile.am 2023-02-11 18:25:54.000000000 +0100
@@ -53,7 +53,6 @@
cd pdflatex; \
${PDFLATEX} reference.tex ;\
${MAKEINDEX} reference.idx ;\
- ${PYTHON} $(abs_top_srcdir)/scripts/fixupind.py reference.ind; \
${PDFLATEX} reference.tex
reference.dvi: latex latex/reference.dvi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/doc/tutorial/ginac.info new/ginac-1.8.7/doc/tutorial/ginac.info
--- old/ginac-1.8.6/doc/tutorial/ginac.info 2023-02-08 20:24:55.000000000 +0100
+++ new/ginac-1.8.7/doc/tutorial/ginac.info 2023-08-12 18:10:31.000000000 +0200
@@ -5,7 +5,7 @@
* ginac: (ginac). C++ library for symbolic computation.
END-INFO-DIR-ENTRY
-This is a tutorial that documents GiNaC 1.8.6, an open framework for
+This is a tutorial that documents GiNaC 1.8.7, an open framework for
symbolic computation within the C++ programming language.
Copyright (C) 1999-2023 Johannes Gutenberg University Mainz, Germany
@@ -25,7 +25,7 @@
GiNaC
*****
-This is a tutorial that documents GiNaC 1.8.6, an open framework for
+This is a tutorial that documents GiNaC 1.8.7, an open framework for
symbolic computation within the C++ programming language.
* Menu:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/doc/tutorial/stamp-vti new/ginac-1.8.7/doc/tutorial/stamp-vti
--- old/ginac-1.8.6/doc/tutorial/stamp-vti 2023-02-08 20:24:55.000000000 +0100
+++ new/ginac-1.8.7/doc/tutorial/stamp-vti 2023-08-12 18:10:30.000000000 +0200
@@ -1,4 +1,4 @@
@set UPDATED 1 January 2023
@set UPDATED-MONTH January 2023
-@set EDITION 1.8.6
-@set VERSION 1.8.6
+@set EDITION 1.8.7
+@set VERSION 1.8.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/doc/tutorial/version.texi new/ginac-1.8.7/doc/tutorial/version.texi
--- old/ginac-1.8.6/doc/tutorial/version.texi 2023-02-08 20:24:55.000000000 +0100
+++ new/ginac-1.8.7/doc/tutorial/version.texi 2023-08-12 18:10:30.000000000 +0200
@@ -1,4 +1,4 @@
@set UPDATED 1 January 2023
@set UPDATED-MONTH January 2023
-@set EDITION 1.8.6
-@set VERSION 1.8.6
+@set EDITION 1.8.7
+@set VERSION 1.8.7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/clifford.h new/ginac-1.8.7/ginac/clifford.h
--- old/ginac-1.8.6/ginac/clifford.h 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/clifford.h 2023-02-11 23:24:55.000000000 +0100
@@ -306,7 +306,7 @@
* if e contains at least one, otherwise returns -1
*
* @param e Expression to be processed
- * @ignore_ONE defines if clifford_ONE should be ignored in the search*/
+ * @param ignore_ONE defines if clifford_ONE should be ignored in the search */
int clifford_max_label(const ex & e, bool ignore_ONE = false);
/** Calculation of the norm in the Clifford algebra. */
@@ -321,9 +321,14 @@
* @param mu Index (must be of class varidx or a derived class)
* @param metr Metric (should be indexed, tensmetric or a derived class, or a matrix)
* @param rl Representation label
- * @param e Clifford unit object
* @return Clifford vector with given components */
ex lst_to_clifford(const ex & v, const ex & mu, const ex & metr, unsigned char rl = 0);
+
+/** List or vector conversion into the Clifford vector.
+ *
+ * @param v List or vector of coordinates
+ * @param e Clifford unit object
+ * @return Clifford vector with given components */
ex lst_to_clifford(const ex & v, const ex & e);
/** An inverse function to lst_to_clifford(). For given Clifford vector extracts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/ex.cpp new/ginac-1.8.7/ginac/ex.cpp
--- old/ginac-1.8.6/ginac/ex.cpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/ex.cpp 2023-02-11 23:22:26.000000000 +0100
@@ -70,6 +70,8 @@
bp->dbgprinttree();
}
+/** Expand an expression.
+ * @param options see GiNaC::expand_options */
ex ex::expand(unsigned options) const
{
if (options == 0 && (bp->flags & status_flags::expanded)) // The "expanded" flag only covers the standard options; someone might want to re-expand with different options
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/excompiler.h new/ginac-1.8.7/ginac/excompiler.h
--- old/ginac-1.8.6/ginac/excompiler.h 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/excompiler.h 2023-02-11 22:38:05.000000000 +0100
@@ -65,7 +65,8 @@
* C code equivalent in double precision. The function pointer has type FUNCP_2P.
*
* @param expr Expression to be compiled
- * @param sym Symbol from the expression to become the function parameter
+ * @param sym1 Symbol from the expression to become the first function parameter
+ * @param sym2 Symbol from the expression to become the second function parameter
* @param fp Returned function pointer
* @param filename Name of the intermediate source code and so-file. If
* supplied, these intermediate files will not be deleted
@@ -76,8 +77,8 @@
* Takes an expression and produces a function pointer to the compiled and linked
* C code equivalent in double precision. The function pointer has type FUNCP_CUBA.
*
- * @param expr Expression to be compiled
- * @param sym Symbol from the expression to become the function parameter
+ * @param exprs List of expression to be compiled
+ * @param syms Symbols from the expression to become the function parameters
* @param fp Returned function pointer
* @param filename Name of the intermediate source code and so-file. If
* supplied, these intermediate files will not be deleted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/factor.cpp new/ginac-1.8.7/ginac/factor.cpp
--- old/ginac-1.8.6/ginac/factor.cpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/factor.cpp 2023-02-12 11:20:14.000000000 +0100
@@ -2394,7 +2394,7 @@
ctx.vn = ctx.pp.collect(x).lcoeff(x);
ctx.vnlst = put_factors_into_vec(factor(ctx.vn));
- ctx.modulus = (ctx.vnlst.size() > 3) ? ctx.vnlst.size() : 3;
+ ctx.modulus = (ctx.vnlst.size() > 3) ? ctx.vnlst.size() : numeric(3);
ctx_in_x.push_back(ctx);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/factor.h new/ginac-1.8.7/ginac/factor.h
--- old/ginac-1.8.6/ginac/factor.h 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/factor.h 2023-02-11 22:43:26.000000000 +0100
@@ -36,7 +36,7 @@
* functions or polynomials inside function arguments.
*
* @param[in] poly expression to factorize
- * @param[in] option options to influence the factorization
+ * @param[in] options see GiNaC::factor_options
* @return factorized expression
*/
extern ex factor(const ex& poly, unsigned options = 0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/idx.h new/ginac-1.8.7/ginac/idx.h
--- old/ginac-1.8.6/ginac/idx.h 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/idx.h 2023-02-11 23:03:52.000000000 +0100
@@ -41,8 +41,7 @@
/** Construct index with given value and dimension.
*
* @param v Value of index (numeric or symbolic)
- * @param dim Dimension of index space (numeric or symbolic)
- * @return newly constructed index */
+ * @param dim Dimension of index space (numeric or symbolic) */
explicit idx(const ex & v, const ex & dim);
// functions overriding virtual functions from base classes
@@ -119,8 +118,7 @@
*
* @param v Value of index (numeric or symbolic)
* @param dim Dimension of index space (numeric or symbolic)
- * @param covariant Make covariant index (default is contravariant)
- * @return newly constructed index */
+ * @param covariant Make covariant index (default is contravariant) */
varidx(const ex & v, const ex & dim, bool covariant = false);
// functions overriding virtual functions from base classes
@@ -169,8 +167,7 @@
* @param v Value of index (numeric or symbolic)
* @param dim Dimension of index space (numeric or symbolic)
* @param covariant Make covariant index (default is contravariant)
- * @param dotted Make covariant dotted (default is undotted)
- * @return newly constructed index */
+ * @param dotted Make covariant dotted (default is undotted) */
spinidx(const ex & v, const ex & dim = 2, bool covariant = false, bool dotted = false);
// functions overriding virtual functions from base classes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/indexed.h new/ginac-1.8.7/ginac/indexed.h
--- old/ginac-1.8.6/ginac/indexed.h 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/indexed.h 2023-02-11 22:47:19.000000000 +0100
@@ -48,23 +48,20 @@
public:
/** Construct indexed object with no index.
*
- * @param b Base expression
- * @return newly constructed indexed object */
+ * @param b Base expression */
indexed(const ex & b);
/** Construct indexed object with one index. The index must be of class idx.
*
* @param b Base expression
- * @param i1 The index
- * @return newly constructed indexed object */
+ * @param i1 The index */
indexed(const ex & b, const ex & i1);
/** Construct indexed object with two indices. The indices must be of class idx.
*
* @param b Base expression
* @param i1 First index
- * @param i2 Second index
- * @return newly constructed indexed object */
+ * @param i2 Second index */
indexed(const ex & b, const ex & i1, const ex & i2);
/** Construct indexed object with three indices. The indices must be of class idx.
@@ -72,8 +69,7 @@
* @param b Base expression
* @param i1 First index
* @param i2 Second index
- * @param i3 Third index
- * @return newly constructed indexed object */
+ * @param i3 Third index */
indexed(const ex & b, const ex & i1, const ex & i2, const ex & i3);
/** Construct indexed object with four indices. The indices must be of class idx.
@@ -82,8 +78,7 @@
* @param i1 First index
* @param i2 Second index
* @param i3 Third index
- * @param i4 Fourth index
- * @return newly constructed indexed object */
+ * @param i4 Fourth index */
indexed(const ex & b, const ex & i1, const ex & i2, const ex & i3, const ex & i4);
/** Construct indexed object with two indices and a specified symmetry. The
@@ -92,8 +87,7 @@
* @param b Base expression
* @param symm Symmetry of indices
* @param i1 First index
- * @param i2 Second index
- * @return newly constructed indexed object */
+ * @param i2 Second index */
indexed(const ex & b, const symmetry & symm, const ex & i1, const ex & i2);
/** Construct indexed object with three indices and a specified symmetry.
@@ -103,8 +97,7 @@
* @param symm Symmetry of indices
* @param i1 First index
* @param i2 Second index
- * @param i3 Third index
- * @return newly constructed indexed object */
+ * @param i3 Third index */
indexed(const ex & b, const symmetry & symm, const ex & i1, const ex & i2, const ex & i3);
/** Construct indexed object with four indices and a specified symmetry. The
@@ -115,16 +108,14 @@
* @param i1 First index
* @param i2 Second index
* @param i3 Third index
- * @param i4 Fourth index
- * @return newly constructed indexed object */
+ * @param i4 Fourth index */
indexed(const ex & b, const symmetry & symm, const ex & i1, const ex & i2, const ex & i3, const ex & i4);
/** Construct indexed object with a specified vector of indices. The indices
* must be of class idx.
*
* @param b Base expression
- * @param iv Vector of indices
- * @return newly constructed indexed object */
+ * @param iv Vector of indices */
indexed(const ex & b, const exvector & iv);
/** Construct indexed object with a specified vector of indices and
@@ -132,8 +123,7 @@
*
* @param b Base expression
* @param symm Symmetry of indices
- * @param iv Vector of indices
- * @return newly constructed indexed object */
+ * @param iv Vector of indices */
indexed(const ex & b, const symmetry & symm, const exvector & iv);
// internal constructors
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/inifcns.cpp new/ginac-1.8.7/ginac/inifcns.cpp
--- old/ginac-1.8.6/ginac/inifcns.cpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/inifcns.cpp 2023-08-06 19:44:38.000000000 +0200
@@ -1021,6 +1021,20 @@
return Order(x).hold();
}
+static ex Order_power(const ex & x, const ex & e)
+{
+ // Order(x)^e -> Order(x^e) for positive integer e
+ if (is_exactly_a<numeric>(e) && e.info(info_flags::posint))
+ return Order(pow(x, e));
+ // NB: For negative exponents, the above could be wrong.
+ // This is because series() produces Order(x^n) to denote the order where
+ // it gave up. So, Order(x^n) can also be an x^(n+1) term if the x^n term
+ // vanishes. In this situation, 1/Order(x^n) can also be a x^(-n-1) term.
+ // Transforming it to Order(x^-n) would miss that.
+
+ return power(Order(x), e).hold();
+}
+
static ex Order_expl_derivative(const ex & arg, const symbol & s)
{
return Order(arg.diff(s));
@@ -1032,7 +1046,8 @@
expl_derivative_func(Order_expl_derivative).
conjugate_func(Order_conjugate).
real_part_func(Order_real_part).
- imag_part_func(Order_imag_part));
+ imag_part_func(Order_imag_part).
+ power_func(Order_power));
//////////
// Solve linear system
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/normal.cpp new/ginac-1.8.7/ginac/normal.cpp
--- old/ginac-1.8.6/ginac/normal.cpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/normal.cpp 2023-02-11 22:43:50.000000000 +0100
@@ -1428,6 +1428,7 @@
* @param cb pointer to expression that will receive the cofactor of b, or nullptr
* @param check_args check whether a and b are polynomials with rational
* coefficients (defaults to "true")
+ * @param options see GiNaC::gcd_options
* @return the GCD as a new expression */
ex gcd(const ex &a, const ex &b, ex *ca, ex *cb, bool check_args, unsigned options)
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/numeric.cpp new/ginac-1.8.7/ginac/numeric.cpp
--- old/ginac-1.8.6/ginac/numeric.cpp 2023-02-08 00:02:38.000000000 +0100
+++ new/ginac-1.8.7/ginac/numeric.cpp 2023-02-12 00:09:38.000000000 +0100
@@ -2139,7 +2139,7 @@
/** The Binomial coefficients. It computes the binomial coefficients. For
* integer n and k and positive n this is the number of ways of choosing k
* objects from n distinct objects. If n is a negative integer, the formula
- * binomial(n,k) == (-1)^k*binomial(k-n-1,k) (if k≥0)
+ * binomial(n,k) == (-1)^k*binomial(k-n-1,k) (if k>=0)
* binomial(n,k) == (-1)^(n-k)*binomial(-k-1,n-k) (otherwise)
* is used to compute the result. */
const numeric binomial(const numeric &n, const numeric &k)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/parser/parse_binop_rhs.cpp new/ginac-1.8.7/ginac/parser/parse_binop_rhs.cpp
--- old/ginac-1.8.6/ginac/parser/parse_binop_rhs.cpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/parser/parse_binop_rhs.cpp 2023-06-20 22:23:55.000000000 +0200
@@ -114,6 +114,18 @@
}
}
+/// unary_expr: [+-] expression
+ex parser::parse_unary_expr()
+{
+ // Parse a binary expression with the priority of exponentiation
+ // or higher. Ignore the overall sign, because parse_primary()
+ // handles it for us.
+ get_next_tok(); // Skip [+-]
+ ex lhs = parse_primary();
+ ex e = parse_binop_rhs(get_tok_prec('^'), lhs);
+ return e;
+}
+
extern const numeric* _num_1_p;
static ex make_minus_expr(const exvector& args)
@@ -137,6 +149,16 @@
return dynallocate<mul>(args[0], rest);
}
+static ex make_power_expr(const exvector& args)
+{
+ size_t n = args.size();
+ ex p = pow(args[n - 2], args[n - 1]);
+ for (size_t i = n - 2; i > 0; i--) {
+ p = pow(args[i - 1], p);
+ }
+ return p;
+}
+
static ex make_binop_expr(const int binop, const exvector& args)
{
switch (binop) {
@@ -149,11 +171,7 @@
case '/':
return make_divide_expr(args);
case '^':
- if (args.size() != 2)
- throw std::invalid_argument(
- std::string(__func__)
- + ": power should have exactly 2 operands");
- return pow(args[0], args[1]);
+ return make_power_expr(args);
default:
throw std::invalid_argument(
std::string(__func__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/parser/parser.cpp new/ginac-1.8.7/ginac/parser/parser.cpp
--- old/ginac-1.8.6/ginac/parser/parser.cpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/parser/parser.cpp 2023-06-20 22:23:55.000000000 +0200
@@ -27,6 +27,7 @@
#include "mul.h"
#include "constant.h"
#include "function.h"
+#include "operators.h"
#include <cstdint> // for uintptr_t
#include <sstream>
@@ -144,27 +145,6 @@
return list;
}
-extern const ex _ex0;
-
-/// unary_expr: [+-] expression
-ex parser::parse_unary_expr()
-{
- // Unlike most other parse_* method this one does NOT consume
- // current token so parse_binop_rhs() knows what kind of operator
- // is being parsed.
-
- // There are different kinds of expressions which need to be handled:
- // -a+b
- // -(a)
- // +a
- // +(a)
- // Delegate the work to parse_binop_rhs(), otherwise we end up
- // duplicating it here.
- ex lhs = _ex0; // silly trick
- ex e = parse_binop_rhs(0, lhs);
- return e;
-}
-
/// primary: identifier_expr | number_expr | paren_expr | unary_expr
ex parser::parse_primary()
{
@@ -178,6 +158,7 @@
case '{':
return parse_lst_expr();
case '-':
+ return -parse_unary_expr();
case '+':
return parse_unary_expr();
case lexer::token_type::literal:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/pseries.cpp new/ginac-1.8.7/ginac/pseries.cpp
--- old/ginac-1.8.6/ginac/pseries.cpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginac/pseries.cpp 2023-08-06 19:45:09.000000000 +0200
@@ -66,8 +66,7 @@
* non-terminating series.
*
* @param rel_ expansion variable and point (must hold a relational)
- * @param ops_ vector of {coefficient, power} pairs (coefficient must not be zero)
- * @return newly constructed pseries */
+ * @param ops_ vector of {coefficient, power} pairs (coefficient must not be zero) */
pseries::pseries(const ex &rel_, const epvector &ops_)
: seq(ops_)
{
@@ -993,8 +992,8 @@
// which can easily be solved given the starting value c_0 = (a_0)^p.
// For the more general case where the leading coefficient of A(x) is not
// a constant, just consider A2(x) = A(x)*x^m, with some integer m and
- // repeat the above derivation. The leading power of C2(x) = A2(x)^2 is
- // then of course x^(p*m) but the recurrence formula still holds.
+ // repeat the above derivation. The leading power of C2(x) = A2(x)^p is
+ // then of course a_0^p*x^(p*m) but the recurrence formula still holds.
if (seq.empty()) {
// as a special case, handle the empty (zero) series honoring the
@@ -1006,16 +1005,27 @@
else
return *this;
}
-
- const int ldeg = ldegree(var);
- if (!(p*ldeg).is_integer())
+
+ const int base_ldeg = ldegree(var);
+ if (!(p*base_ldeg).is_integer())
throw std::runtime_error("pseries::power_const(): trying to assemble a Puiseux series");
+ int new_ldeg = (p*base_ldeg).to_int();
+
+ const int base_deg = degree(var);
+ int new_deg = deg;
+ if (p.is_pos_integer()) {
+ // No need to compute beyond p*base_deg.
+ new_deg = std::min((p*base_deg).to_int(), deg);
+ }
// adjust number of coefficients
- int numcoeff = deg - (p*ldeg).to_int();
+ int numcoeff = new_deg - new_ldeg;
+ if (new_deg < deg)
+ numcoeff += 1;
+
if (numcoeff <= 0) {
- epvector epv { expair(Order(_ex1), deg) };
- return dynallocate<pseries>(relational(var,point), std::move(epv));
+ return dynallocate<pseries>(relational(var, point),
+ epvector{{Order(_ex1), deg}});
}
// O(x^n)^(-m) is undefined
@@ -1025,33 +1035,35 @@
// Compute coefficients of the powered series
exvector co;
co.reserve(numcoeff);
- co.push_back(pow(coeff(var, ldeg), p));
+ co.push_back(pow(coeff(var, base_ldeg), p));
for (int i=1; i<numcoeff; ++i) {
ex sum = _ex0;
for (int j=1; j<=i; ++j) {
- ex c = coeff(var, j + ldeg);
+ ex c = coeff(var, j + base_ldeg);
if (is_order_function(c)) {
co.push_back(Order(_ex1));
break;
} else
sum += (p * j - (i - j)) * co[i - j] * c;
}
- co.push_back(sum / coeff(var, ldeg) / i);
+ co.push_back(sum / coeff(var, base_ldeg) / i);
}
// Construct new series (of non-zero coefficients)
epvector new_seq;
bool higher_order = false;
for (int i=0; i<numcoeff; ++i) {
- if (!co[i].is_zero())
- new_seq.emplace_back(expair(co[i], p * ldeg + i));
+ if (!co[i].is_zero()) {
+ new_seq.emplace_back(expair(co[i], new_ldeg + i));
+ }
if (is_order_function(co[i])) {
higher_order = true;
break;
}
}
- if (!higher_order)
- new_seq.emplace_back(expair(Order(_ex1), p * ldeg + numcoeff));
+ if (!higher_order && new_deg == deg) {
+ new_seq.emplace_back(expair{Order(_ex1), new_deg});
+ }
return pseries(relational(var,point), std::move(new_seq));
}
@@ -1151,7 +1163,8 @@
if (!(real_ldegree*numexp).is_integer())
throw std::runtime_error("pseries::power_const(): trying to assemble a Puiseux series");
- ex e = basis.series(r, (order + real_ldegree*(1-numexp)).to_int(), options);
+ int extra_terms = (real_ldegree*(1-numexp)).to_int();
+ ex e = basis.series(r, order + std::max(0, extra_terms), options);
ex result;
try {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac/version.h new/ginac-1.8.7/ginac/version.h
--- old/ginac-1.8.6/ginac/version.h 2023-02-08 20:00:21.000000000 +0100
+++ new/ginac-1.8.7/ginac/version.h 2023-08-12 17:42:15.000000000 +0200
@@ -30,7 +30,7 @@
#define GINACLIB_MINOR_VERSION 8
/* Micro version of GiNaC */
-#define GINACLIB_MICRO_VERSION 6
+#define GINACLIB_MICRO_VERSION 7
// GiNaC library version information. It has very little to do with GiNaC
// version number. In particular, library version is OS dependent.
@@ -56,7 +56,7 @@
// * change matrix inverse to use default argument (twice)
// * check for interfaces marked as deprecated
#define GINAC_LT_CURRENT 12
-#define GINAC_LT_REVISION 5
+#define GINAC_LT_REVISION 6
#define GINAC_LT_AGE 1
/*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginac.pc new/ginac-1.8.7/ginac.pc
--- old/ginac-1.8.6/ginac.pc 2023-02-08 20:23:47.000000000 +0100
+++ new/ginac-1.8.7/ginac.pc 2023-08-12 18:10:13.000000000 +0200
@@ -5,7 +5,7 @@
Name: GiNaC
Description: C++ library for symbolic calculations
-Version: 1.8.6
+Version: 1.8.7
Requires: cln >= 1.2.2
Libs: -L${libdir} -lginac -Wl,-rpath -Wl,${libdir}
Cflags: -I${includedir}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginsh/ginsh_lexer.cpp new/ginac-1.8.7/ginsh/ginsh_lexer.cpp
--- old/ginac-1.8.6/ginsh/ginsh_lexer.cpp 2023-02-08 20:24:48.000000000 +0100
+++ new/ginac-1.8.7/ginsh/ginsh_lexer.cpp 2023-08-12 18:10:30.000000000 +0200
@@ -2171,8 +2171,16 @@
YY_FATAL_ERROR("input in flex scanner failed");
result = n;
#endif
- } else if (((result = fread(buf, 1, max_size, yyin)) == 0) && ferror(yyin))
- YY_FATAL_ERROR("input in flex scanner failed");
+ } else {
+ int c = '*', n;
+ for (n = 0; n < max_size && (c = getc(yyin)) != EOF && c != '\n'; ++n)
+ buf[n] = (char)c;
+ if (c == '\n')
+ buf[n++] = (char)c;
+ if (c == EOF && ferror(yyin))
+ YY_FATAL_ERROR("input in flex scanner failed");
+ result = n;
+ }
return result;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/ginsh/ginsh_lexer.lpp new/ginac-1.8.7/ginsh/ginsh_lexer.lpp
--- old/ginac-1.8.6/ginsh/ginsh_lexer.lpp 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/ginsh/ginsh_lexer.lpp 2023-06-21 20:41:54.000000000 +0200
@@ -203,8 +203,16 @@
YY_FATAL_ERROR("input in flex scanner failed");
result = n;
#endif
- } else if (((result = fread(buf, 1, max_size, yyin)) == 0) && ferror(yyin))
- YY_FATAL_ERROR("input in flex scanner failed");
+ } else {
+ int c = '*', n;
+ for (n = 0; n < max_size && (c = getc(yyin)) != EOF && c != '\n'; ++n)
+ buf[n] = (char)c;
+ if (c == '\n')
+ buf[n++] = (char)c;
+ if (c == EOF && ferror(yyin))
+ YY_FATAL_ERROR("input in flex scanner failed");
+ result = n;
+ }
return result;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/m4/ax_cxx_compile_stdcxx.m4 new/ginac-1.8.7/m4/ax_cxx_compile_stdcxx.m4
--- old/ginac-1.8.6/m4/ax_cxx_compile_stdcxx.m4 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/m4/ax_cxx_compile_stdcxx.m4 2023-08-12 17:32:38.000000000 +0200
@@ -43,7 +43,7 @@
# and this notice are preserved. This file is offered as-is, without any
# warranty.
-#serial 15
+#serial 18
dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
dnl (serial version number 13).
@@ -104,9 +104,18 @@
dnl HP's aCC needs +std=c++11 according to:
dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Not…
dnl Cray's crayCC needs "-h std=c++11"
+ dnl MSVC needs -std:c++NN for C++17 and later (default is C++14)
for alternative in ${ax_cxx_compile_alternatives}; do
- for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
- cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+ for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}" MSVC; do
+ if test x"$switch" = xMSVC; then
+ dnl AS_TR_SH maps both `:` and `=` to `_` so -std:c++17 would collide
+ dnl with -std=c++17. We suffix the cache variable name with _MSVC to
+ dnl avoid this.
+ switch=-std:c++${alternative}
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_${switch}_MSVC])
+ else
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+ fi
AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
$cachevar,
[ac_save_CXX="$CXX"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/m4/lib-link.m4 new/ginac-1.8.7/m4/lib-link.m4
--- old/ginac-1.8.6/m4/lib-link.m4 2023-02-08 20:20:49.000000000 +0100
+++ new/ginac-1.8.7/m4/lib-link.m4 2023-08-12 17:37:07.000000000 +0200
@@ -224,7 +224,7 @@
additional_libdir3=
fi
dnl Search the library and its dependencies in $additional_libdir and
- dnl $LDFLAGS. Using breadth-first-seach.
+ dnl $LDFLAGS. Use breadth-first search.
LIB[]NAME=
LTLIB[]NAME=
INC[]NAME=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/m4/libtool.m4 new/ginac-1.8.7/m4/libtool.m4
--- old/ginac-1.8.6/m4/libtool.m4 2022-12-19 21:12:39.000000000 +0100
+++ new/ginac-1.8.7/m4/libtool.m4 2023-08-12 17:34:17.000000000 +0200
@@ -1,6 +1,6 @@
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
-# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
+# Copyright (C) 1996-2001, 2003-2019, 2021-2023 Free Software
# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
@@ -1368,7 +1368,7 @@
;;
x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \
-s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+s390*-*linux*|s390*-*tpf*|sparc*-*linux*|x86_64-gnu*)
# Find out what ABI is being produced by ac_compile, and set linker
# options accordingly. Note that the listed cases only cover the
# situations where additional linker options are needed (such as when
@@ -1383,7 +1383,7 @@
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_i386_fbsd"
;;
- x86_64-*linux*)
+ x86_64-*linux*|x86_64-gnu*)
case `$FILECMD conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
@@ -1412,7 +1412,7 @@
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_x86_64_fbsd"
;;
- x86_64-*linux*)
+ x86_64-*linux*|x86_64-gnu*)
LD="${LD-ld} -m elf_x86_64"
;;
powerpcle-*linux*)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ginac-1.8.6/scripts/fixupind.py new/ginac-1.8.7/scripts/fixupind.py
--- old/ginac-1.8.6/scripts/fixupind.py 2022-12-31 19:47:20.000000000 +0100
+++ new/ginac-1.8.7/scripts/fixupind.py 1970-01-01 01:00:00.000000000 +0100
@@ -1,30 +0,0 @@
-
-# encoding: utf-8
-# TeX Live 2012 seems to dislike files produces by doxygen (1.8.x.y)
-# In particular, makeindex(1) program creates invalid index entries like
-# \hyperpage{NNN_}
-# (note the trailing underscore in the page number). This breaks automatic
-# builds and is very annoying. Hence this script. It replaces (broken)
-# \hyperpage{NNN_} with \hyperpage{NNN}.
-# Note: this is an ugly work around, a proper fix is welcome.
-import sys, os, re
-
-def fixupind(fname):
- """ Fix \\hyperpage{NNN_} entries in the ind file @var{fname} """
- tmpout = fname + '.tmp'
- inp = open(fname)
- out = open(tmpout, 'wt')
- rx = re.compile('(hyperpage)[{]([0-9]+)[_][}]')
- for line in inp:
- out.write(re.sub(rx, '\\1{\\2}', line))
- out.flush()
- out.close()
- inp.close()
- os.rename(tmpout, fname)
-
-if __name__ == '__main__':
- if len(sys.argv) <= 1:
- sys.exit(1)
- fixupind(sys.argv[1])
- sys.exit(0)
-
++++++ ginac-fix-makeindex.patch ++++++
--- /var/tmp/diff_new_pack.u95SpC/_old 2024-01-03 12:23:51.829012752 +0100
+++ /var/tmp/diff_new_pack.u95SpC/_new 2024-01-03 12:23:51.833012898 +0100
@@ -10,5 +10,5 @@
+ set(_idx ${_basename}.idx)
set(_ind ${_dirname}/${_basename}.ind)
set(_pdf ${_dirname}/${_basename}.pdf)
- set(_fixupind ${CMAKE_SOURCE_DIR}/scripts/fixupind.py)
+ add_custom_command(
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-neovim for openSUSE:Factory checked in at 2024-01-03 12:23:46
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-neovim (Old)
and /work/SRC/openSUSE:Factory/.python-neovim.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-neovim"
Wed Jan 3 12:23:46 2024 rev:18 rq:1135605 version:0.5.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-neovim/python-neovim.changes 2021-03-18 22:55:23.579560163 +0100
+++ /work/SRC/openSUSE:Factory/.python-neovim.new.28375/python-neovim.changes 2024-01-03 12:23:48.652896672 +0100
@@ -1,0 +2,29 @@
+Thu Dec 28 11:53:21 UTC 2023 - Soc Virnyl Estela <uncomfy+openbuildservice(a)uncomfyhalomacro.pl>
+
+- Remove deprecated python-rpm-macro definitions
+- Update to version 0.5.0:
+ * feat: Ex command ":py=" evaluate and print expression
+ * test: always use the same python regardless of $PATH
+ * packaging: Add pynvim.version attribute
+ * fix: ignore flaky OSError on windows
+ * fix: EOF error on piped stderr being closed on Windows
+ * fix: do not leak resources across tests so as to prevent side effects
+ * deps: Require greenlet >= 3.0 since it supports Python 3.12
+ * fix: broken dynamic import of rplugin modules
+ * fix: sphinx "invalid language code"
+ * fix: mypy type annotation warnings
+ * fix: sphinx "Unexpected indentation" warning
+ * fix: PEP 484 prohibits implicit Optional
+ * fix: undefined name 'original_find_module'
+ * fix(test): Unknown config option: timeout warning
+ * test_buffer: don't depend on version-dependent default values
+ * fix: imp module is deprecated
+ * Drop old python versions, add type annotations
+ * docs: python 2 is not supported
+ * test: update 'define' option default
+ * refactor: remove usage of imp
+ * packaging: conform to PEP 517 guidelines
+ * fix: vim.eval('v:true') should return python bool
+ * fix the first call to sync functions returning null
+
+-------------------------------------------------------------------
Old:
----
pynvim-0.4.3.tar.gz
New:
----
pynvim-0.5.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-neovim.spec ++++++
--- /var/tmp/diff_new_pack.28ufnB/_old 2024-01-03 12:23:49.252918601 +0100
+++ /var/tmp/diff_new_pack.28ufnB/_new 2024-01-03 12:23:49.252918601 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-neovim
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,12 +17,8 @@
%define modname pynvim
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%if 0%{?rhel} >= 7
-%define python_module() python34-%{**}
-%endif
Name: python-neovim
-Version: 0.4.3
+Version: 0.5.0
Release: 0
Summary: Python client to Neovim
License: Apache-2.0
@@ -38,9 +34,9 @@
BuildRequires: %{python_module greenlet}
BuildRequires: neovim
# /SECTION
-Requires: neovim >= 0.1.6
-Requires: python-greenlet
-Requires: python-msgpack-python
+Requires: neovim >= 0.9.0
+Requires: %{python_module greenlet}
+Requires: %{python_module msgpack}
Provides: python-nvim
BuildArch: noarch
%python_subpackages
++++++ pynvim-0.4.3.tar.gz -> pynvim-0.5.0.tar.gz ++++++
++++ 4492 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package conan for openSUSE:Factory checked in at 2024-01-03 12:23:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/conan (Old)
and /work/SRC/openSUSE:Factory/.conan.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "conan"
Wed Jan 3 12:23:43 2024 rev:3 rq:1135590 version:2.0.16
Changes:
--------
--- /work/SRC/openSUSE:Factory/conan/conan.changes 2023-12-17 21:35:04.131566429 +0100
+++ /work/SRC/openSUSE:Factory/.conan.new.28375/conan.changes 2024-01-03 12:23:45.380777083 +0100
@@ -1,0 +2,109 @@
+Thu Dec 28 17:01:29 UTC 2023 - Atri Bhattacharya <badshah400(a)gmail.com>
+
+- Update to version 2.0.16:
+ * Bugfix: Revert the default of source_buildenv, make it False
+ by default [gh#conan-io/conan#15319].
+- Changes from version 2.0.15:
+ * Feature: New conan lock remove command to remove requires from
+ lockfiles [gh#conan-io/conan#15284].
+ * Feature: New CMake.ctest() helper method to launch directly
+ ctest instead of via cmake --target=RUN_TEST
+ [gh#conan-io/conan#15282].
+ * Feature: Add tracking syntax in <host_version> for different
+ references [gh#conan-io/conan#15274].
+ * Feature: Add pkglist formatter for conan export command
+ [gh#conan-io/conan#15266].
+ * Feature: Define CONAN_LOG_LEVEL env-var to be able to change
+ verbosity at a global level [gh#conan-io/conan#15263].
+ * Feature: conan cache path xxx --folder xxxx raises an error if
+ the folder requested does not exist [gh#conan-io/conan#15257].
+ * Feature: Add in operator support for ConanFile's
+ self.dependencies [gh#conan-io/conan#15221].
+ * Feature: Make CMakeDeps generator create a conandeps.cmake
+ that aggregates all direct dependencies in a cmake-like
+ generator style [gh#conan-io/conan#15207].
+ * Feature: Add build environment information to CMake configure
+ preset and run environment information to CMake test presets
+ [gh#conan-io/conan#15192].
+ * Feature: Removed a warning about a potential issue with conan
+ migration that would print every time a build failed
+ [gh#conan-io/conan#15174].
+ * Feature: New deploy() method in recipes for explicit
+ per-recipe deployment [gh#conan-io/conan#15172].
+ * Feature: Allow tool-requires to be used in source() method
+ injecting environment [gh#conan-io/conan#15153].
+ * Feature: Allow accessing the contents of settings.yml (and
+ settings_user!) from ConfigAPI [gh#conan-io/conan#15151].
+ * Feature: Add builtin conf access from ConfigAPI
+ [gh#conan-io/conan#15151].
+ * Feature: Add redirect_stdout to CMake integration methods
+ [gh#conan-io/conan#15150].
+ * Feature: Add core:warnings_as_errors configuration option to
+ make Conan raise on warnings and errors
+ [gh#conan-io/conan#15149].
+ * Feature: Added FTP_TLS option using secure argument in
+ ftp_download for secure communication
+ [gh#conan-io/conan#15137].
+ * Feature: New [replace_requires] and [replace_tool_requires] in
+ profile for redefining requires, useful for package
+ replacements like zlibng/zlib, to solve conflicts, and to
+ replace some dependencies by system alternatives wrapped in
+ another Conan package recipe [gh#conan-io/conan#15136].
+ * Feature: Add stderr capture argument to conanfile's run()
+ method [gh#conan-io/conan#15121].
+ * Feature: New [platform_requires] profile definition to be able
+ to replace Conan dependencies by platform-provided
+ dependencies [gh#conan-io/conan#14871].
+ * Feature: New conan graph explain command to search, compare
+ and explain missing binaries [gh#conan-io/conan#14694].
+ * Feature: Global cpp_info can be used to initialize components
+ values [gh#conan-io/conan#13994].
+ * Fix: Make core:warnings_as_errors accept a list
+ [gh#conan-io/conan#15297].
+ * Fix: Fix user confs package scoping when no separator was
+ given [gh#conan-io/conan#15296].
+ * Fix: Fix range escaping in conflict reports involving ranges
+ [gh#conan-io/conan#15222].
+ * Fix: Allow hard set_name() and set_version() to mutate name
+ and version provided in command line
+ [gh#conan-io/conan#15211].
+ * Fix: Make conan graph info --format=text print to stdout
+ [gh#conan-io/conan#15170].
+ * Fix: Avoid warning in CMake output due to
+ CMAKE_POLICY_DEFAULT_CMP0091 unused variable
+ [gh#conan-io/conan#15127].
+ * Fix: Deprecate [system_tools] in favor of
+ [platform_tool_requires] to align with [platform_requires] for
+ regular dependencies. Changed output from "System tool" to
+ "Platform" [gh#conan-io/conan#14871].
+ * Bugfix: Ensure user confs have at least 1 : separator
+ [gh#conan-io/conan#15296].
+ * Bugfix: Git.is_dirty() will use git status . -s to make sure
+ it only process the current path, not the whole repo,
+ similarly to other Git methods [gh#conan-io/conan#15289].
+ * Bugfix: Make self.info.clear() and header-only packages to
+ remove python_requires and tool_requires
+ [gh#conan-io/conan#15285].
+ * Bugfix: Make conan cache save/restore portable across Windows
+ and other OSs [gh#conan-io/conan#15253].
+ * Bugfix: Do not relativize absolute paths in deployers
+ [gh#conan-io/conan#15244].
+ * Bugfix: Add architecture to CMakePresets to avoid cmake
+ ignoring toolchain definitions when using presets
+ [gh#conan-io/conan#15215].
+ * Bugfix: Fix conan graph info --format=html reporting
+ misleading conflicting nodes [gh#conan-io/conan#15196].
+ * Bugfix: Fix serialization of tool_requires in conan profile
+ show --format=json [gh#conan-io/conan#15185].
+ * Bugfix: Fix NMakeDeps quoting issues
+ [gh#conan-io/conan#15140].
+ * Bugfix: Fix the 2.0.14 migration to add LRU data to the cache
+ when storage_path conf is defined [gh#conan-io/conan#15135].
+ * Bugfix: Fix definition of package_metadata_folder for conan
+ export-pkg command [gh#conan-io/conan#15126].
+ * Bugfix: pyinstaller.py was broken for Python 3.12 due to a
+ useless distutils import [gh#conan-io/conan#15116].
+ * Bugfix: Fix backup sources error when no
+ core.sources:download_cache is set [gh#conan-io/conan#15109].
+
+-------------------------------------------------------------------
Old:
----
conan-2.0.14.tar.gz
New:
----
conan-2.0.16.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ conan.spec ++++++
--- /var/tmp/diff_new_pack.CYdAQM/_old 2024-01-03 12:23:46.248808808 +0100
+++ /var/tmp/diff_new_pack.CYdAQM/_new 2024-01-03 12:23:46.248808808 +0100
@@ -18,7 +18,7 @@
# Note: We only want to build for the default python3
Name: conan
-Version: 2.0.14
+Version: 2.0.16
Release: 0
Summary: A C/C++ package manager
License: MIT
++++++ conan-2.0.14.tar.gz -> conan-2.0.16.tar.gz ++++++
++++ 3567 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package armadillo for openSUSE:Factory checked in at 2024-01-03 12:23:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/armadillo (Old)
and /work/SRC/openSUSE:Factory/.armadillo.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "armadillo"
Wed Jan 3 12:23:40 2024 rev:183 rq:1135589 version:12.6.7
Changes:
--------
--- /work/SRC/openSUSE:Factory/armadillo/armadillo.changes 2023-11-24 23:36:01.334157975 +0100
+++ /work/SRC/openSUSE:Factory/.armadillo.new.28375/armadillo.changes 2024-01-03 12:23:43.788718897 +0100
@@ -1,0 +2,6 @@
+Thu Dec 28 17:30:21 UTC 2023 - Atri Bhattacharya <badshah400(a)gmail.com>
+
+- Update to version 12.6.7:
+ * No release notes.
+
+-------------------------------------------------------------------
Old:
----
armadillo-12.6.6.tar.xz
New:
----
armadillo-12.6.7.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ armadillo.spec ++++++
--- /var/tmp/diff_new_pack.wKVcUG/_old 2024-01-03 12:23:44.520745651 +0100
+++ /var/tmp/diff_new_pack.wKVcUG/_new 2024-01-03 12:23:44.520745651 +0100
@@ -18,7 +18,7 @@
%define soname libarmadillo12
Name: armadillo
-Version: 12.6.6
+Version: 12.6.7
Release: 0
Summary: C++ matrix library with interfaces to LAPACK and ATLAS
License: Apache-2.0
++++++ armadillo-12.6.6.tar.xz -> armadillo-12.6.7.tar.xz ++++++
/work/SRC/openSUSE:Factory/armadillo/armadillo-12.6.6.tar.xz /work/SRC/openSUSE:Factory/.armadillo.new.28375/armadillo-12.6.7.tar.xz differ: char 46, line 1
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-uncertainties for openSUSE:Factory checked in at 2024-01-03 12:23:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-uncertainties (Old)
and /work/SRC/openSUSE:Factory/.python-uncertainties.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-uncertainties"
Wed Jan 3 12:23:37 2024 rev:15 rq:1135596 version:3.1.7
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-uncertainties/python-uncertainties.changes 2023-09-07 21:14:15.064544189 +0200
+++ /work/SRC/openSUSE:Factory/.python-uncertainties.new.28375/python-uncertainties.changes 2024-01-03 12:23:39.896576647 +0100
@@ -1,0 +2,5 @@
+Thu Dec 28 15:26:42 UTC 2023 - ecsos <ecsos(a)opensuse.org>
+
+- Add %{?sle15_python_module_pythons}
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-uncertainties.spec ++++++
--- /var/tmp/diff_new_pack.Mnjw8W/_old 2024-01-03 12:23:41.204624453 +0100
+++ /var/tmp/diff_new_pack.Mnjw8W/_new 2024-01-03 12:23:41.220625038 +0100
@@ -16,6 +16,7 @@
#
+%{?sle15_python_module_pythons}
Name: python-uncertainties
Version: 3.1.7
Release: 0
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-Pint for openSUSE:Factory checked in at 2024-01-03 12:23:36
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Pint (Old)
and /work/SRC/openSUSE:Factory/.python-Pint.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-Pint"
Wed Jan 3 12:23:36 2024 rev:17 rq:1135595 version:0.22
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Pint/python-Pint.changes 2023-08-02 16:52:27.106227152 +0200
+++ /work/SRC/openSUSE:Factory/.python-Pint.new.28375/python-Pint.changes 2024-01-03 12:23:38.468524455 +0100
@@ -1,0 +2,5 @@
+Thu Dec 28 15:25:28 UTC 2023 - ecsos <ecsos(a)opensuse.org>
+
+- Add %{?sle15_python_module_pythons}
+
+-------------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-Pint.spec ++++++
--- /var/tmp/diff_new_pack.ibRIWM/_old 2024-01-03 12:23:39.244552817 +0100
+++ /var/tmp/diff_new_pack.ibRIWM/_new 2024-01-03 12:23:39.244552817 +0100
@@ -16,7 +16,7 @@
#
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%{?sle15_python_module_pythons}
Name: python-Pint
Version: 0.22
Release: 0
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-txtorcon for openSUSE:Factory checked in at 2024-01-03 12:23:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-txtorcon (Old)
and /work/SRC/openSUSE:Factory/.python-txtorcon.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-txtorcon"
Wed Jan 3 12:23:32 2024 rev:15 rq:1135604 version:23.11.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-txtorcon/python-txtorcon.changes 2023-09-20 13:34:01.889053198 +0200
+++ /work/SRC/openSUSE:Factory/.python-txtorcon.new.28375/python-txtorcon.changes 2024-01-03 12:23:34.792390100 +0100
@@ -1,0 +2,10 @@
+Fri Dec 29 09:02:35 UTC 2023 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 23.11.0:
+ * Fix test-failures on Python 3.12
+ * Particular GETINFO hanging
+ (ultra-long lines over 16KiB caused problems in the protocol)
+ * Use built-in `mock` only
+ * Remove `incremental`
+
+-------------------------------------------------------------------
Old:
----
txtorcon-23.5.0.tar.gz
New:
----
txtorcon-23.11.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-txtorcon.spec ++++++
--- /var/tmp/diff_new_pack.rnRzrE/_old 2024-01-03 12:23:35.600419632 +0100
+++ /var/tmp/diff_new_pack.rnRzrE/_new 2024-01-03 12:23:35.600419632 +0100
@@ -17,7 +17,7 @@
Name: python-txtorcon
-Version: 23.5.0
+Version: 23.11.0
Release: 0
Summary: Twisted-based asynchronous Tor control protocol implementation
License: MIT
@@ -29,7 +29,6 @@
Requires: python-Automat
Requires: python-Twisted-tls >= 15.5.0
Requires: python-cryptography
-Requires: python-incremental
Requires: python-six
Requires: python-zope.interface >= 3.6.1
BuildArch: noarch
@@ -38,7 +37,6 @@
BuildRequires: %{python_module Automat}
BuildRequires: %{python_module Twisted-tls >= 15.5.0}
BuildRequires: %{python_module cryptography}
-BuildRequires: %{python_module incremental}
BuildRequires: %{python_module six}
BuildRequires: %{python_module zope.interface >= 3.6.1}
%python_subpackages
@@ -62,8 +60,6 @@
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
-# https://github.com/meejah/txtorcon/issues/368
-sed -i 's:from mock:from unittest.mock:' test/*.py
# looks more like integration tests
# Async tests don't work with pytest gh#crossbario/autobahn-python#1235
%{python_expand export PYTHONPATH=%{buildroot}%{$python_sitelib}
++++++ txtorcon-23.5.0.tar.gz -> txtorcon-23.11.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/Makefile new/txtorcon-23.11.0/Makefile
--- old/txtorcon-23.5.0/Makefile 2023-05-19 03:13:45.000000000 +0200
+++ new/txtorcon-23.11.0/Makefile 2023-11-20 08:48:37.000000000 +0100
@@ -1,6 +1,6 @@
.PHONY: test html counts coverage sdist clean install doc integration diagrams
default: test
-VERSION = 23.5.0
+VERSION = 23.11.0
test:
PYTHONPATH=. trial --reporter=text test
@@ -124,7 +124,7 @@
venv:
- virtualenv venv
+ python -m venv venv
./venv/bin/pip install -r requirements.txt
./venv/bin/pip install -r dev-requirements.txt
@echo "created venv"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/PKG-INFO new/txtorcon-23.11.0/PKG-INFO
--- old/txtorcon-23.5.0/PKG-INFO 2023-05-19 03:21:31.507377600 +0200
+++ new/txtorcon-23.11.0/PKG-INFO 2023-11-20 08:48:41.153334100 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: txtorcon
-Version: 23.5.0
+Version: 23.11.0
Summary: Twisted-based Tor controller client, with state-tracking and configuration abstractions. https://txtorcon.readthedocs.org https://github.com/meejah/txtorcon
Home-page: https://github.com/meejah/txtorcon
Author: meejah
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/dev-requirements.txt new/txtorcon-23.11.0/dev-requirements.txt
--- old/txtorcon-23.5.0/dev-requirements.txt 2020-04-20 04:58:02.000000000 +0200
+++ new/txtorcon-23.11.0/dev-requirements.txt 2023-11-20 07:11:22.000000000 +0100
@@ -10,7 +10,6 @@
twine
pyflakes
pycodestyle
-mock
ipaddress>=1.0.16
geoip
readme_renderer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/conf.py new/txtorcon-23.11.0/docs/conf.py
--- old/txtorcon-23.5.0/docs/conf.py 2022-06-17 21:32:04.000000000 +0200
+++ new/txtorcon-23.11.0/docs/conf.py 2023-08-11 09:41:38.000000000 +0200
@@ -165,7 +165,7 @@
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
-html_title = 'timaq4ygg2iegci7.onion: txtorcon documentation'
+html_title = 'fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion: txtorcon documentation'
# A shorter title for the navigation bar. Default is the same as html_title.
html_short_title = 'txtorcon docs'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/guide.rst new/txtorcon-23.11.0/docs/guide.rst
--- old/txtorcon-23.5.0/docs/guide.rst 2020-04-20 04:58:02.000000000 +0200
+++ new/txtorcon-23.11.0/docs/guide.rst 2023-08-11 09:41:38.000000000 +0200
@@ -361,7 +361,7 @@
registers a ``tor:`` plugin. This also implies that any Twisted-using
program that supports configuring endpoint strings gets Tor support
"for free". For example, passing a string like
-``tor:timaq4ygg2iegci7.onion:80`` to `clientFromString`_ will return
+``tor:fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:80`` to `clientFromString`_ will return
an endpoint that will connect to txtorcon's onion-service
website. Note that these endpoints will use the "global to txtorcon"
Tor instance (available from :meth:`.get_global_tor`). Thus,
@@ -428,7 +428,7 @@
part);
- these keys can be on disk (in the "hidden service directory");
- or, they can be "ephemeral" (only in memory);
-- the "host name" is a hash of the public-key (e.g. ``timaq4ygg2iegci7.onion``);
+- the "host name" is a hash of the public-key (e.g. ``fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion``);
- a "Descriptor" (which tells clients how to connect) must be
published (to a "Hidden Service Directory", or HSDir);
- a service has a list of port-mappings (public -> local):
@@ -534,7 +534,7 @@
Factors to consider when deciding whether to use "authenticated"
service or not:
- - if you want anyone with e.g. the URL http://timaq4ygg2iegci7.onion
+ - if you want anyone with e.g. the URL http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion
to be able to put it in `Tor Browser Bundle
<https://www.torproject.org/download/download.html.en>`_ and see a
Web site, you **do not want** authentication;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/installing.rst new/txtorcon-23.11.0/docs/installing.rst
--- old/txtorcon-23.5.0/docs/installing.rst 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.11.0/docs/installing.rst 2023-08-11 09:41:38.000000000 +0200
@@ -89,11 +89,11 @@
-----------
Most people will use the code from https://github.com/meejah/txtorcon
-The canonical URI is http://timaq4ygg2iegci7.onion
+The canonical URI is http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion
I sign tags with my public key (:download:`meejah.asc <../meejah.asc>`)
- ``git clone https://github.com/meejah/txtorcon.git``
-- ``torsocks git clone git://timaq4ygg2iegci7.onion/meejah/txtorcon.git``
+- ``torsocks git clone git://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/meejah/txtorcon.git``
Rendered documentation for the latest release is at `txtorcon.readthedocs.org <https://txtorcon.readthedocs.org/en/latest/>`_.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/introduction.rst new/txtorcon-23.11.0/docs/introduction.rst
--- old/txtorcon-23.5.0/docs/introduction.rst 2022-04-12 00:21:37.000000000 +0200
+++ new/txtorcon-23.11.0/docs/introduction.rst 2023-08-11 09:41:38.000000000 +0200
@@ -99,6 +99,14 @@
.. literalinclude:: ../examples/readme.py
+.. _testimonials:
+
+Testimonials
+------------
+
+- `@thegrugq <https://twitter.com/thegrugq/status/359495805025001472>`_: "Holy fucking shit, the awesomeness of this project cannot be denied!" (July 2013)
+
+
.. _known_users:
Known Users
@@ -112,7 +120,7 @@
- `foolscap <https://github.com/warner/foolscap/>`_ RPC system inspired by Twisted's built-in "Perspective Broker" package.
- `bwscanner <https://github.com/TheTorProject/bwscanner>`_ next-gen bandwidth scanner for Tor network
- `unmessage <https://github.com/AnemoneLabs/unmessage>`_ Privacy enhanced instant messenger
-- `APAF <https://github.com/globaleaks/APAF>`_ anonymous Python application framework
+- `GlobaLeaks <https://github.com/globaleaks/GlobaLeaks>`_ Free and open source software enabling anyone to easily set up and maintain a secure whistleblowing platform
- `OONI <https://ooni.torproject.org/>`_ the Open Observatory of Network Interference
- `exitaddr <https://github.com/arlolra/exitaddr>`_ scan Tor exit addresses
- `txtorhttpproxy <https://github.com/david415/txtorhttpproxy>`_ simple HTTP proxy in Twisted
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/release-checklist.rst new/txtorcon-23.11.0/docs/release-checklist.rst
--- old/txtorcon-23.5.0/docs/release-checklist.rst 2023-05-19 03:20:48.000000000 +0200
+++ new/txtorcon-23.11.0/docs/release-checklist.rst 2023-08-11 09:41:38.000000000 +0200
@@ -21,7 +21,6 @@
* update docs/releases.rst to reflect upcoming reality
* blindly make links to the signatures
* update heading, date
- * commit it all
* on both signing-machine and build-machine shells:
* export VERSION=22.0.0
@@ -74,8 +73,8 @@
Releases are also available from the hidden service:
- http://timaq4ygg2iegci7.onion/txtorcon-0.12.0.tar.gz
- http://timaq4ygg2iegci7.onion/txtorcon-0.12.0.tar.gz.asc
+ http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…
+ http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…
Or via a "version 3" service:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/docs/releases.rst new/txtorcon-23.11.0/docs/releases.rst
--- old/txtorcon-23.5.0/docs/releases.rst 2023-05-19 03:18:27.000000000 +0200
+++ new/txtorcon-23.11.0/docs/releases.rst 2023-11-20 08:34:46.000000000 +0100
@@ -15,8 +15,18 @@
See also :ref:`api_stability`.
-`git main <https://github.com/meejah/txtorcon>`_ *will likely become v23.6.0*
+`git main <https://github.com/meejah/txtorcon>`_ *will likely become v24.1.0*
+v23.11.0
+--------
+
+November 20, 2023
+
+ * Fix test-failures on Python 3.12
+ * Particular GETINFO hanging (`#389 <https://github.com/meejah/txtorcon/issues/389>`_)
+ (ultra-long lines over 16KiB caused problems in the protocol)
+ * Use built-in `mock` only (from `jelly <https://github.com/jelly>`_)
+ * Remove `incremental` (from `gdrosos <https://github.com/gdrosos>`_)
v23.5.0
@@ -88,7 +98,7 @@
September 10, 2019
- * `txtorcon-19.1.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-19.1.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/19.1.0>`_ (:download:`local-sig </../signatues/txtorcon-19.1.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-19.1.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v19.1.0.tar.gz>`_)
+ * `txtorcon-19.1.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/19.1.0>`_ (:download:`local-sig </../signatues/txtorcon-19.1.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-19.1.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v19.1.0.tar.gz>`_)
* `TorControlProtocol.on_disconnect` is deprecated in favour of
:func:`TorControlProtocol.when_disconnected`
@@ -107,7 +117,7 @@
January 15, 2019
- * `txtorcon-19.0.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-19.0.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/19.0.0>`_ (:download:`local-sig </../signatues/txtorcon-19.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-19.0.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v19.0.0.tar.gz>`_)
+ * `txtorcon-19.0.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/19.0.0>`_ (:download:`local-sig </../signatues/txtorcon-19.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-19.0.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v19.0.0.tar.gz>`_)
* add :func:`TorControlProtocol.when_disconnected` (will replace `.on_disconnect`)
* add `detach=` kwarg to :func:`Tor.create_onion_service`
* add `purpose=` kwarg to :func:`TorState.build_circuit`
@@ -116,14 +126,14 @@
v18.3.0
-------
- * `txtorcon-18.3.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.3.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.3.0>`_ (:download:`local-sig </../signatues/txtorcon-18.3.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.3.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.3.0.tar.gz>`_)
+ * `txtorcon-18.3.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.3.0>`_ (:download:`local-sig </../signatues/txtorcon-18.3.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.3.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.3.0.tar.gz>`_)
* add `singleHop={true,false}` for endpoint-strings as well
v18.2.0
-------
- * `txtorcon-18.2.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.2.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.2.0>`_ (:download:`local-sig </../signatues/txtorcon-18.2.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.2.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.2.0.tar.gz>`_)
+ * `txtorcon-18.2.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.2.0>`_ (:download:`local-sig </../signatues/txtorcon-18.2.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.2.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.2.0.tar.gz>`_)
* add `privateKeyFile=` option to endpoint parser (ticket 313)
* use `privateKey=` option properly in endpoint parser
* support `NonAnonymous` mode for `ADD_ONION` via `single_hop=` kwarg
@@ -134,7 +144,7 @@
September 26, 2018
- * `txtorcon-18.1.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.1.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.1.0>`_ (:download:`local-sig </../signatues/txtorcon-18.1.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.1.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.1.0.tar.gz>`_)
+ * `txtorcon-18.1.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.1.0>`_ (:download:`local-sig </../signatues/txtorcon-18.1.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.1.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.1.0.tar.gz>`_)
* better error-reporting (include REASON and REMOTE_REASON if
available) when circuit-builds fail (thanks `David Stainton
<https://github.com/david415>`_)
@@ -153,7 +163,7 @@
July 2, 2018
- * `txtorcon-18.0.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.0.2.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.2>`_ (:download:`local-sig </../signatues/txtorcon-18.0.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.2.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.2.tar.gz>`_)
+ * `txtorcon-18.0.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.2>`_ (:download:`local-sig </../signatues/txtorcon-18.0.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.2.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.2.tar.gz>`_)
* Python3.4 doesn't support async-def or await
@@ -162,7 +172,7 @@
June 30, 2018
- * `txtorcon-18.0.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.0.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.1>`_ (:download:`local-sig </../signatues/txtorcon-18.0.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.1.tar.gz>`_)
+ * `txtorcon-18.0.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.1>`_ (:download:`local-sig </../signatues/txtorcon-18.0.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.1.tar.gz>`_)
* fix a Python2/3 regression when parsing onion services
@@ -171,7 +181,7 @@
June 21, 2018
- * `txtorcon-18.0.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-18.0.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.0>`_ (:download:`local-sig </../signatues/txtorcon-18.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.0.tar.gz>`_)
+ * `txtorcon-18.0.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/18.0.0>`_ (:download:`local-sig </../signatues/txtorcon-18.0.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-18.0.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v18.0.0.tar.gz>`_)
* `await_all_uploads` options when creating Onions
* properly re-map progress percentages (including descriptor uploads)
@@ -245,7 +255,7 @@
February 22, 2018
- * `txtorcon-0.20.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.20.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.20.0>`_ (:download:`local-sig </../signatues/txtorcon-0.20.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.20.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.20.0.tar.gz>`_)
+ * `txtorcon-0.20.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.20.0>`_ (:download:`local-sig </../signatues/txtorcon-0.20.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.20.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.20.0.tar.gz>`_)
* doc fixes from `hotelzululima <https://twitter.com/hotelzululima>`_
* fix endpoints so `.connect` on them works properly more than once
@@ -266,7 +276,7 @@
May 24, 2017
- * `txtorcon-0.19.3.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.19.3.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.3>`_ (:download:`local-sig </../signatues/txtorcon-0.19.3.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.3.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.3.tar.gz>`_)
+ * `txtorcon-0.19.3.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.3>`_ (:download:`local-sig </../signatues/txtorcon-0.19.3.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.3.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.3.tar.gz>`_)
* Incorrect parsing of SocksPort options (see `Issue 237 <https://github.com/meejah/txtorcon/issues/237>`_)
@@ -276,7 +286,7 @@
May 11, 2017
- * `txtorcon-0.19.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.19.2.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.2>`_ (:download:`local-sig </../signatues/txtorcon-0.19.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.2.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.2.tar.gz>`_)
+ * `txtorcon-0.19.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.2>`_ (:download:`local-sig </../signatues/txtorcon-0.19.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.2.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.2.tar.gz>`_)
* Work around a bug in `incremental` (see `Issue 233 <https://github.com/meejah/txtorcon/issues/233>`_)
* Fix for `Issue 190 <https://github.com/meejah/txtorcon/issues/190>`_ from Felipe Dau.
@@ -288,7 +298,7 @@
April 26, 2017
- * `txtorcon-0.19.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.19.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.1>`_ (:download:`local-sig </../signatues/txtorcon-0.19.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.1.tar.gz>`_)
+ * `txtorcon-0.19.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.1>`_ (:download:`local-sig </../signatues/txtorcon-0.19.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.1.tar.gz>`_)
* Fix a regression in ``launch_tor``, see `Issue 227 <https://github.com/meejah/txtorcon/issues/227>`_
@@ -298,7 +308,7 @@
April 20, 2017
- * `txtorcon-0.19.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.19.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.0>`_ (:download:`local-sig </../signatues/txtorcon-0.19.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.0.tar.gz>`_)
+ * `txtorcon-0.19.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.19.0>`_ (:download:`local-sig </../signatues/txtorcon-0.19.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.19.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.19.0.tar.gz>`_)
* Full Python3 support
* Drop `txsocksx` and use a custom implementation (this also
@@ -342,7 +352,7 @@
January 11, 2017
- * `txtorcon-0.18.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.18.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.18.0>`_ (:download:`local-sig </../signatues/txtorcon-0.18.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.18.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.18.0.tar.gz>`_)
+ * `txtorcon-0.18.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.18.0>`_ (:download:`local-sig </../signatues/txtorcon-0.18.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.18.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.18.0.tar.gz>`_)
* `issue 200 <https://github.com/meejah/txtorcon/issues/200>`_: better feedback if the cookie data can't be read
@@ -351,7 +361,7 @@
*October 4, 2016*
- * `txtorcon-0.17.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.17.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.17.0>`_ (:download:`local-sig </../signatues/txtorcon-0.17.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.17.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.17.0.tar.gz>`_)
+ * `txtorcon-0.17.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.17.0>`_ (:download:`local-sig </../signatues/txtorcon-0.17.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.17.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.17.0.tar.gz>`_)
* `issue 187 <https://github.com/meejah/txtorcon/issues/187>`_: fix unix-socket control endpoints
* sometimes mapping streams to hostnames wasn't working properly
* backwards-compatibility API for `socks_hostname` was incorrectly named
@@ -362,7 +372,7 @@
*August 31, 2016*
- * `txtorcon-0.16.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.16.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.16.1>`_ (:download:`local-sig </../signatues/txtorcon-0.16.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.16.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.16.1.tar.gz>`_)
+ * `txtorcon-0.16.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.16.1>`_ (:download:`local-sig </../signatues/txtorcon-0.16.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.16.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.16.1.tar.gz>`_)
* `issue 172 <https://github.com/meejah/txtorcon/issues/172>`_: give `TorProcessProtocol` a `.quit` method
* `issue 181 <https://github.com/meejah/txtorcon/issues/181>`_: enable SOCKS5-over-unix-sockets for TorClientEndpoint (thanks to `david415 <https://github.com/david415>`_
@@ -376,7 +386,7 @@
v0.15.1
-------
- * `txtorcon-0.15.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.15.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.15.1>`_ (:download:`local-sig </../signatues/txtorcon-0.15.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.15.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.15.1.tar.gz>`_)
+ * `txtorcon-0.15.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.15.1>`_ (:download:`local-sig </../signatues/txtorcon-0.15.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.15.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.15.1.tar.gz>`_)
* fix `issue 179 <https://github.com/meejah/txtorcon/issues/179>`_ with `Circuit.age`.
@@ -385,7 +395,7 @@
*July 26, 2016*
- * `txtorcon-0.15.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.15.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.15.0>`_ (:download:`local-sig </../signatues/txtorcon-0.15.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.15.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.15.0.tar.gz>`_)
+ * `txtorcon-0.15.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.15.0>`_ (:download:`local-sig </../signatues/txtorcon-0.15.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.15.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.15.0.tar.gz>`_)
* added support for NULL control-port-authentication which is often
appropriate when used with a UNIX domain socket
* switched to `ipaddress
@@ -422,7 +432,7 @@
*December 2, 2015*
- * `txtorcon-0.14.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.14.2.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.14.2>`_ (:download:`local-sig </../signatues/txtorcon-0.14.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.14.2.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.14.2.tar.gz>`_)
+ * `txtorcon-0.14.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.14.2>`_ (:download:`local-sig </../signatues/txtorcon-0.14.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.14.2.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.14.2.tar.gz>`_)
* compatibility for Twisted 15.5.0 (released on 0.14.x for `OONI <http://ooni.io/>`_)
@@ -440,14 +450,14 @@
*September 26, 2015*
- * `txtorcon-0.14.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.14.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.14.0>`_ (:download:`local-sig </../signatues/txtorcon-0.14.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.14.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.14.0.tar.gz>`_)
+ * `txtorcon-0.14.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.14.0>`_ (:download:`local-sig </../signatues/txtorcon-0.14.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.14.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.14.0.tar.gz>`_)
* :class:`txtorcon.interface.IStreamAttacher` handling was missing ``None`` and ``DO_NOT_ATTACH`` cases if a Deferred was returned.
* add ``.is_built`` Deferred to :class:`txtorcon.Circuit` that gets `callback()`d when the circuit becomes BUILT
* `david415 <https://github.com/david415>`_ ported his ``tor:``
endpoint parser so now both client and server endpoints are
supported. This means **any** Twisted program using endpoints can
use Tor as a client. For example, to connect to txtorcon's Web site:
- ``ep = clientFromString("tor:timaq4ygg2iegci7.onion:80")``.
+ ``ep = clientFromString("tor:fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:80")``.
(In the future, I'd like to automatically launch Tor if required, too).
* Python3 fixes from `isis <https://github.com/isislovecruft>`_ (note: needs Twisted 15.4.0+)
@@ -457,7 +467,7 @@
*May 10, 2015*
- * `txtorcon-0.13.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.13.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.13.0>`_ (:download:`local-sig </../signatues/txtorcon-0.13.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.13.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.13.0.tar.gz>`_)
+ * `txtorcon-0.13.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.13.0>`_ (:download:`local-sig </../signatues/txtorcon-0.13.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.13.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.13.0.tar.gz>`_)
* support ``basic`` and ``stealth`` hidden service authorization, and parse ``client_keys`` files.
* 2x speedup for TorState parsing (mostly by lazy-parsing timestamps)
* can now parse ~75000 microdescriptors/second per core of 3.4GHz Xeon E3
@@ -474,7 +484,7 @@
*February 3, 2015*
- * `txtorcon-0.12.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.12.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.12.0>`_ (:download:`local-sig </../signatues/txtorcon-0.12.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.12.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.12.0.tar.gz>`_)
+ * `txtorcon-0.12.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.12.0>`_ (:download:`local-sig </../signatues/txtorcon-0.12.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.12.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.12.0.tar.gz>`_)
* doc, code and import cleanups from `Kali Kaneko <https://github.com/kalikaneko>`_
* HiddenServiceDirGroupReadable support
* Issue #80: honour ``ControlPort 0`` in incoming TorConfig
@@ -501,9 +511,9 @@
*August 16, 2014*
- * September 6, 2015. bugfix release: `txtorcon-0.11.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.11.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.11.1>`_ (:download:`local-sig </../signatues/txtorcon-0.11.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.11.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.11.1.tar.gz>`_)
+ * September 6, 2015. bugfix release: `txtorcon-0.11.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.11.1>`_ (:download:`local-sig </../signatues/txtorcon-0.11.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.11.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.11.1.tar.gz>`_)
* fixed Debian bug `797261 <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=797261>`_ causing 3 tests to fail
- * `txtorcon-0.11.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.11.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.11.0>`_ (:download:`local-sig </../signatues/txtorcon-0.11.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.11.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.11.0.tar.gz>`_)
+ * `txtorcon-0.11.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.11.0>`_ (:download:`local-sig </../signatues/txtorcon-0.11.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.11.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.11.0.tar.gz>`_)
* More control for ``launch_tor``: access stdout, stderr in real-time
and control whether we kill Tor on and stderr output. See issue #79.
* Warning about ``build_circuit`` being called without a guard first
@@ -518,7 +528,7 @@
*July 20, 2014*
- * `txtorcon-0.10.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.10.1.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.10.1>`_ (:download:`local-sig </../signatues/txtorcon-0.10.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.10.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.10.1.tar.gz>`_)
+ * `txtorcon-0.10.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.10.1>`_ (:download:`local-sig </../signatues/txtorcon-0.10.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.10.1.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.10.1.tar.gz>`_)
* fix bug incorrectly issuing RuntimeError in brief window of time on event-listeners
* issue #78: Add tox tests and fix for Twisted 12.0.0 (and prior), as this is what Debian squeeze ships
* issue #77: properly expand relative and tilde paths for ``hiddenServiceDir`` via endpoints
@@ -529,7 +539,7 @@
*June 15, 2014*
- * `txtorcon-0.10.0.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.10.0.tar.gz>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.10.0>`_ (:download:`local-sig </../signatues/txtorcon-0.10.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.10.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.10.0.tar.gz>`_)
+ * `txtorcon-0.10.0.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (`PyPI <https://pypi.python.org/pypi/txtorcon/0.10.0>`_ (:download:`local-sig </../signatues/txtorcon-0.10.0.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.10.0.tar.…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.10.0.tar.gz>`_)
* In collaboration with `David Stainton <https://github.com/david415>`_ after a pull-request, we
have endpoint parser plugins for Twisted! This means code like
``serverFromString("onion:80").listen(...)`` is enough to start a
@@ -544,7 +554,7 @@
*April 23, 2014*
- * `txtorcon-0.9.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.9.2.tar.gz>`_ (:download:`local-sig </../signatues/txtorcon-0.9.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.9.2.tar.g…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.9.2.tar.gz>`_)
+ * `txtorcon-0.9.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (:download:`local-sig </../signatues/txtorcon-0.9.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.9.2.tar.g…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.9.2.tar.gz>`_)
* add ``on_disconnect`` callback for TorControlProtocol (no more monkey-patching Protocol API)
* add ``age()`` method to Circuit
* add ``time_created`` property to Circuit
@@ -567,7 +577,7 @@
*January 20, 2014*
- * `txtorcon-0.9.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.9.1.tar.gz>`_ (:download:`local-sig </../signatues/txtorcon-0.9.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.9.1.tar.g…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.9.1.tar.gz>`_)
+ * `txtorcon-0.9.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (:download:`local-sig </../signatues/txtorcon-0.9.1.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.9.1.tar.g…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.9.1.tar.gz>`_)
* put test/ directory at the top level
* using "`coverage <http://nedbatchelder.com/code/coverage/>`_" tool instead of custom script
* using `coveralls.io <https://coveralls.io/r/meejah/txtorcon>`_ and `travis-ci <https://travis-ci.org/meejah/txtorcon>`_ for test coverage and continuous integration
@@ -591,7 +601,7 @@
*November 22, 2013*
- * `txtorcon-0.8.2.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.8.2.tar.gz>`_ (:download:`local-sig </../signatues/txtorcon-0.8.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.8.2.tar.g…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.8.2.tar.gz>`_)
+ * `txtorcon-0.8.2.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (:download:`local-sig </../signatues/txtorcon-0.8.2.tar.gz.asc>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.8.2.tar.g…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.8.2.tar.gz>`_)
* ensure hidden service server-side endpoints listen only on 127.0.0.1
@@ -600,7 +610,7 @@
*May 13, 2013*
- * `txtorcon-0.8.1.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.8.1.tar.gz>`_ (:download:`local-sign </../signatues/txtorcon-0.8.1.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.8.1.tar.g…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.8.1.tar.gz>`_)
+ * `txtorcon-0.8.1.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (:download:`local-sign </../signatues/txtorcon-0.8.1.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.8.1.tar.g…>`_) (`source <https://github.com/meejah/txtorcon/archive/v0.8.1.tar.gz>`_)
* fixed improper import in setup.py preventing 0.8.0 from installing
* signatures with proper subkey this time
* Proper file-flushing in tests and PyPy fixes from Lukas Lueg
@@ -631,7 +641,7 @@
*November 21, 2012*
- * `txtorcon-0.7.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.7.tar.gz>`_ (:download:`local-sig <../signatues/txtorcon-0.7.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.7.tar.gz.…>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.7>`_)
+ * `txtorcon-0.7.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (:download:`local-sig <../signatues/txtorcon-0.7.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.7.tar.gz.…>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.7>`_)
* `issue #20 <https://github.com/meejah/txtorcon/issues/20>`_ config object now hooked up correctly after launch_tor();
* `patch <https://github.com/meejah/txtorcon/pull/22>`_ from hellais for properly handling data_dir given to TCPHiddenServiceEndpoint;
* `.tac example <https://github.com/meejah/txtorcon/pull/19>`_ from mmaker;
@@ -642,7 +652,7 @@
*October 10, 2012*
- * `txtorcon-0.6.tar.gz <http://timaq4ygg2iegci7.onion/txtorcon-0.6.tar.gz>`_ (:download:`local-sig <../signatues/txtorcon-0.6.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.6.tar.gz.…>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.6>`_)
+ * `txtorcon-0.6.tar.gz <http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/txtor…>`_ (:download:`local-sig <../signatues/txtorcon-0.6.tar.gz.sig>` or `github-sig <https://github.com/meejah/txtorcon/blob/main/signatues/txtorcon-0.6.tar.gz.…>`_) (`source <https://github.com/meejah/txtorcon/tarball/v0.6>`_)
* debian packaging (mmaker);
* psutil fully gone;
* *changed API* for launch_tor() to use TorConfig instead of args;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/examples/launch_onion.py new/txtorcon-23.11.0/examples/launch_onion.py
--- old/txtorcon-23.5.0/examples/launch_onion.py 1970-01-01 01:00:00.000000000 +0100
+++ new/txtorcon-23.11.0/examples/launch_onion.py 2023-08-10 21:30:17.000000000 +0200
@@ -0,0 +1,48 @@
+#!/usr/bin/env python
+
+from twisted.internet import defer, task, endpoints, error
+from twisted.web import server, resource
+
+import txtorcon
+import sys
+
+class Simple(resource.Resource):
+ """
+ A really simple Web site.
+ """
+ isLeaf = True
+
+ def render_GET(self, request):
+ return b"<html>Hello, world! I'm a hidden service!</html>"
+
+
+async def main(reactor):
+ print("main", reactor)
+ tor = await txtorcon.launch(
+ reactor,
+ stdout=sys.stdout,
+ stderr=sys.stderr,
+ progress_updates=print,
+ control_port="unix:/tmp/testing/torcontrolfoo",
+ data_directory="/tmp/tordatatmp",
+ )
+ print(tor)
+
+ # create ephemeral service listening on "80" publically, and a
+ # random local port.
+ for _ in range(2):
+ onion_service = await tor.create_onion_service([80], progress=print) # , await_all_uploads=True,
+ print(f"service: http://{onion_service.hostname}")
+ for port in onion_service.ports:
+ print(" ", port)
+ ep = endpoints.serverFromString(reactor, "tcp:{}".format(port.split()[1].split(":")[1]))
+ port = await ep.listen(server.Site(Simple()))
+ print(port)
+
+ await defer.Deferred() # wait forever
+
+
+if __name__ == "__main__":
+ def run(reactor):
+ return defer.ensureDeferred(main(reactor))
+ task.react(run)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/examples/web_client.py new/txtorcon-23.11.0/examples/web_client.py
--- old/txtorcon-23.5.0/examples/web_client.py 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.11.0/examples/web_client.py 2023-08-11 09:41:38.000000000 +0200
@@ -32,7 +32,7 @@
agent = tor.web_agent()
uri = b'http://surely-this-has-not-been-registered-and-is-invalid.com'
uri = b'https://www.torproject.org'
- uri = b'http://timaq4ygg2iegci7.onion/' # txtorcon documentation
+ uri = b'http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/' # txtorcon documentation
print("Downloading {}".format(uri))
resp = yield agent.request(b'GET', uri)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/requirements.txt new/txtorcon-23.11.0/requirements.txt
--- old/txtorcon-23.5.0/requirements.txt 2023-05-19 03:11:14.000000000 +0200
+++ new/txtorcon-23.11.0/requirements.txt 2023-08-29 17:13:24.000000000 +0200
@@ -3,6 +3,5 @@
##GeoIP>=1.2.9
Twisted[tls]>=15.5.0
zope.interface>=3.6.1
-incremental
automat
cryptography
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/py3_test_controller.py new/txtorcon-23.11.0/test/py3_test_controller.py
--- old/txtorcon-23.5.0/test/py3_test_controller.py 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/py3_test_controller.py 2023-11-20 07:11:22.000000000 +0100
@@ -1,4 +1,4 @@
-from mock import Mock
+from unittest.mock import Mock
from twisted.trial import unittest
from twisted.internet.defer import ensureDeferred
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_attacher.py new/txtorcon-23.11.0/test/test_attacher.py
--- old/txtorcon-23.5.0/test/test_attacher.py 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_attacher.py 2023-11-20 07:11:22.000000000 +0100
@@ -1,4 +1,4 @@
-from mock import Mock
+from unittest.mock import Mock
from zope.interface import directlyProvides
from twisted.trial import unittest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_circuit.py new/txtorcon-23.11.0/test/test_circuit.py
--- old/txtorcon-23.5.0/test/test_circuit.py 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_circuit.py 2023-11-20 07:11:22.000000000 +0100
@@ -1,6 +1,6 @@
import datetime
import ipaddress
-from mock import patch
+from unittest.mock import patch
from twisted.trial import unittest
from twisted.internet import defer
@@ -21,7 +21,7 @@
from txtorcon.interface import CircuitListenerMixin
from txtorcon.interface import ITorControlProtocol
-from mock import Mock
+from unittest.mock import Mock
@implementer(IRouterContainer)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_controller.py new/txtorcon-23.11.0/test/test_controller.py
--- old/txtorcon-23.5.0/test/test_controller.py 2020-04-20 04:58:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_controller.py 2023-11-20 07:11:22.000000000 +0100
@@ -2,7 +2,7 @@
import six
import functools
from os.path import join
-from mock import Mock, patch
+from unittest.mock import Mock, patch
from io import BytesIO
from twisted.internet.interfaces import IReactorCore
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_endpoints.py new/txtorcon-23.11.0/test/test_endpoints.py
--- old/txtorcon-23.5.0/test/test_endpoints.py 2023-02-16 06:25:43.000000000 +0100
+++ new/txtorcon-23.11.0/test/test_endpoints.py 2023-11-20 07:11:22.000000000 +0100
@@ -2,8 +2,8 @@
import os
import sys
-from mock import patch
-from mock import Mock, MagicMock
+from unittest.mock import patch
+from unittest.mock import Mock, MagicMock
from unittest import skipIf
from binascii import b2a_base64
@@ -1593,9 +1593,9 @@
)
def test_parser_basic(self):
- ep = clientFromString(None, 'tor:host=timaq4ygg2iegci7.onion:port=80:socksPort=9050')
+ ep = clientFromString(None, 'tor:host=fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:port=80:socksPort=9050')
- self.assertEqual(ep.host, 'timaq4ygg2iegci7.onion')
+ self.assertEqual(ep.host, 'fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion')
self.assertEqual(ep.port, 80)
# XXX what's "the Twisted way" to get the port out here?
self.assertEqual(ep._socks_endpoint._port, 9050)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_onion.py new/txtorcon-23.11.0/test/test_onion.py
--- old/txtorcon-23.5.0/test/test_onion.py 2019-05-19 14:35:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_onion.py 2023-11-20 07:11:22.000000000 +0100
@@ -2,7 +2,7 @@
import os
import sys
-from mock import Mock
+from unittest.mock import Mock
from os.path import join
from unittest import skipIf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_router.py new/txtorcon-23.11.0/test/test_router.py
--- old/txtorcon-23.5.0/test/test_router.py 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_router.py 2023-11-20 07:11:22.000000000 +0100
@@ -1,6 +1,6 @@
import json
from datetime import datetime
-from mock import Mock
+from unittest.mock import Mock
from twisted.trial import unittest
from twisted.internet import defer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_socks.py new/txtorcon-23.11.0/test/test_socks.py
--- old/txtorcon-23.5.0/test/test_socks.py 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_socks.py 2023-11-20 07:11:22.000000000 +0100
@@ -1,5 +1,5 @@
from six import BytesIO, text_type
-from mock import Mock, patch
+from unittest.mock import Mock, patch
from twisted.trial import unittest
from twisted.internet import defer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_stream.py new/txtorcon-23.11.0/test/test_stream.py
--- old/txtorcon-23.5.0/test/test_stream.py 2018-05-31 20:59:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_stream.py 2023-08-11 09:41:38.000000000 +0200
@@ -365,7 +365,7 @@
for address in [
'1.2.3.4:80',
'1.2.3.4.315D5684D5343580D409F16119F78D776A58AEFB.exit:80',
- 'timaq4ygg2iegci7.onion:80']:
+ 'fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:80']:
line = "316 %s 1 %s REASON=FOO"
for state in ['NEW', 'SUCCEEDED', 'REMAP',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_torconfig.py new/txtorcon-23.11.0/test/test_torconfig.py
--- old/txtorcon-23.5.0/test/test_torconfig.py 2019-05-19 14:35:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_torconfig.py 2023-11-20 07:11:22.000000000 +0100
@@ -6,7 +6,7 @@
import functools
import warnings
from six import StringIO
-from mock import Mock, patch
+from unittest.mock import Mock, patch
from os.path import join
from zope.interface import implementer, directlyProvides
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_torcontrolprotocol.py new/txtorcon-23.11.0/test/test_torcontrolprotocol.py
--- old/txtorcon-23.5.0/test/test_torcontrolprotocol.py 2019-05-19 14:35:02.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_torcontrolprotocol.py 2023-10-04 21:25:18.000000000 +0200
@@ -74,7 +74,7 @@
self.transport = proto_helpers.StringTransport()
def send(self, line):
- assert type(line) == bytes
+ assert isinstance(line, bytes)
self.protocol.dataReceived(line.strip() + b"\r\n")
def test_authenticate_cookie(self):
@@ -226,7 +226,7 @@
it_was_called.yes = False
d = self.protocol.when_disconnected()
- d.addCallback(it_was_called)
+ d.addBoth(it_was_called)
f = failure.Failure(error.ConnectionDone("It's all over"))
self.protocol.connectionLost(f)
self.assertTrue(it_was_called.yes)
@@ -284,6 +284,31 @@
self.protocol.connectionLost(f)
self.assertEqual(it_was_called.count, 2)
+ def test_disconnect_subsequent_commands(self):
+ """
+ commands issued after disconnect should errback
+ """
+
+ def it_was_called(f):
+ str(f)
+ it_was_called.count += 1
+ return None
+ it_was_called.count = 0
+
+ # one outstanding command
+ d0 = self.protocol.queue_command("some command0")
+ d0.addErrback(it_was_called)
+ self.protocol.on_disconnect.addErrback(lambda _: None)
+
+ f = failure.Failure(RuntimeError("The thing didn't do the stuff."))
+ self.protocol.connectionLost(f)
+
+ # one command issued _after_ we've disconnected
+ d1 = self.protocol.queue_command("some command1")
+ d1.addErrback(it_was_called)
+
+ self.assertEqual(it_was_called.count, 2)
+
class ProtocolTests(unittest.TestCase):
@@ -297,7 +322,7 @@
self.protocol = None
def send(self, line):
- assert type(line) == bytes
+ assert isinstance(line, bytes)
self.protocol.dataReceived(line.strip() + b"\r\n")
def test_statemachine_broadcast_no_code(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_torstate.py new/txtorcon-23.11.0/test/test_torstate.py
--- old/txtorcon-23.5.0/test/test_torstate.py 2023-02-16 06:25:43.000000000 +0100
+++ new/txtorcon-23.11.0/test/test_torstate.py 2023-11-20 07:11:22.000000000 +0100
@@ -12,7 +12,7 @@
from ipaddress import IPv4Address
-from mock import patch, Mock
+from unittest.mock import patch, Mock
from txtorcon import TorControlProtocol
from txtorcon import TorProtocolError
@@ -1293,7 +1293,14 @@
self.assertEqual(self.transport.value(), b'EXTENDCIRCUIT 0 0000000000000000000000000000000000000000,0000000000000000000000000000000000000001,0000000000000000000000000000000000000002\r\n')
# should have gotten a warning about this not being an entry
# guard
- self.assertEqual(len(self.flushWarnings()), 1)
+ self.assertEqual(
+ 1,
+ len([
+ warn
+ for warn in self.flushWarnings()
+ if "Circuit doesn't start with a guard" in warn["message"]
+ ])
+ )
def test_build_circuit_no_routers(self):
self.state.build_circuit()
@@ -1329,7 +1336,14 @@
self.send(b"250 EXTENDED 1234")
# should have gotten a warning about this not being an entry
# guard
- self.assertEqual(len(self.flushWarnings()), 1)
+ self.assertEqual(
+ 1,
+ len([
+ warn
+ for warn in self.flushWarnings()
+ if "Circuit doesn't start with a guard" in warn["message"]
+ ])
+ )
return d
def test_build_circuit_error(self):
@@ -1477,7 +1491,14 @@
self.state.circuits[1234].update(['1234', 'BUILT'])
# should have gotten a warning about this not being an entry
# guard
- self.assertEqual(len(self.flushWarnings()), 1)
+ self.assertEqual(
+ 1,
+ len([
+ warn
+ for warn in self.flushWarnings()
+ if "Circuit doesn't start with a guard" in warn["message"]
+ ])
+ )
return d
def test_build_circuit_failure(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_util.py new/txtorcon-23.11.0/test/test_util.py
--- old/txtorcon-23.5.0/test/test_util.py 2021-08-16 22:24:40.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_util.py 2023-11-20 07:11:22.000000000 +0100
@@ -1,7 +1,7 @@
import os
import tempfile
import ipaddress
-from mock import patch
+from unittest.mock import patch
from unittest import skip as _skip
from os.path import exists
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/test/test_web.py new/txtorcon-23.11.0/test/test_web.py
--- old/txtorcon-23.5.0/test/test_web.py 2023-05-19 03:11:14.000000000 +0200
+++ new/txtorcon-23.11.0/test/test_web.py 2023-11-20 07:11:22.000000000 +0100
@@ -1,5 +1,5 @@
-from mock import Mock
+from unittest.mock import Mock
from twisted.web.client import BrowserLikePolicyForHTTPS
from twisted.trial import unittest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/_metadata.py new/txtorcon-23.11.0/txtorcon/_metadata.py
--- old/txtorcon-23.5.0/txtorcon/_metadata.py 2023-05-19 03:13:53.000000000 +0200
+++ new/txtorcon-23.11.0/txtorcon/_metadata.py 2023-11-20 07:12:18.000000000 +0100
@@ -1,4 +1,4 @@
-__version__ = '23.5.0'
+__version__ = '23.11.0'
__author__ = 'meejah'
__contact__ = 'meejah(a)meejah.ca'
__url__ = 'https://github.com/meejah/txtorcon'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/controller.py new/txtorcon-23.11.0/txtorcon/controller.py
--- old/txtorcon-23.5.0/txtorcon/controller.py 2023-05-19 03:11:14.000000000 +0200
+++ new/txtorcon-23.11.0/txtorcon/controller.py 2023-08-30 01:34:05.000000000 +0200
@@ -692,9 +692,9 @@
add and remove onion authentication. For example, inside an
`async def` method that's had `ensureDeferred` called on it::
- async with tor.onion_authentication("timaq4ygg2iegci7.onion", "seekrit token"):
+ async with tor.onion_authentication("fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion", "seekrit token"):
agent = tor.web_agent()
- resp = await agent.request(b'GET', "http://timaq4ygg2iegci7.onion/")
+ resp = await agent.request(b'GET', "http://fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion/")
body = await readBody(resp)
# after the "async with" the token will be removed from Tor's configuration
@@ -1032,6 +1032,8 @@
control-connection goes away (this means the service will
appear in `GETINFO onions/detached` to all other
controllers)
+
+ :returns EphemeralOnionService:
"""
if version not in (2, 3):
raise ValueError(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/endpoints.py new/txtorcon-23.11.0/txtorcon/endpoints.py
--- old/txtorcon-23.5.0/txtorcon/endpoints.py 2021-08-16 22:24:37.000000000 +0200
+++ new/txtorcon-23.11.0/txtorcon/endpoints.py 2023-08-11 09:41:38.000000000 +0200
@@ -203,7 +203,7 @@
:class:`txtorcon.IAuthenticatedOnionClients` instance (and from
which you can recover private keys, the hostname, etc)
- :ivar onion_uri: the public key, like ``timaq4ygg2iegci7.onion``
+ :ivar onion_uri: the public key, like ``fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion``
which came from the hidden_service_dir's ``hostname`` file
:ivar onion_private_key: the contents of ``hidden_service_dir/private_key``
@@ -1193,11 +1193,11 @@
:api:`twisted.internet.endpoints.clientFromString
<clientFromString>` with a string argument like:
- ``tor:host=timaq4ygg2iegci7.onion:port=80:socksPort=9050``
+ ``tor:host=fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:port=80:socksPort=9050``
...or simply:
- ``tor:host=timaq4ygg2iegci7.onion:port=80``
+ ``tor:host=fjblvrw2jrxnhtg67qpbzi45r7ofojaoo3orzykesly2j3c2m3htapid.onion:port=80``
You may also include a username + password. By default, Tor will
not put two streams that provided different authentication on the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/torcontrolprotocol.py new/txtorcon-23.11.0/txtorcon/torcontrolprotocol.py
--- old/txtorcon-23.5.0/txtorcon/torcontrolprotocol.py 2019-05-19 14:35:02.000000000 +0200
+++ new/txtorcon-23.11.0/txtorcon/torcontrolprotocol.py 2023-10-04 21:25:18.000000000 +0200
@@ -232,6 +232,12 @@
:class:`txtorcon.TorState`, which is also the place to go if you
wish to add your own stream or circuit listeners.
"""
+ # override Twisted's LineOnlyReceiver maximum line-length. At
+ # least "GETINFO md/id/X" for some Xse exceeds 16384 (2**14, the
+ # default) and thus causes the control connection to
+ # fail. control.c defines MAX_COMMAND_LINE_LENGTH as 1024*1024 so
+ # we use that
+ MAX_LENGTH = 2 ** 20
def __init__(self, password_function=None):
"""
@@ -276,11 +282,6 @@
self._when_disconnected = SingleObserver()
"""
- Internal use. A :class:`SingleObserver` for when_disconnected()
- """
-
- self._when_disconnected = SingleObserver()
- """
Private. See :func:`.when_disconnected`
"""
@@ -356,7 +357,7 @@
self.stop_debug()
def start_debug(self):
- self.debuglog = open('txtorcon-debug.log', 'w')
+ self.debuglog = open('txtorcon-debug.log', 'wb')
def stop_debug(self):
def noop(*args, **kw):
@@ -692,10 +693,14 @@
def connectionLost(self, reason):
"Protocol API"
txtorlog.msg('connection terminated: ' + str(reason))
- if reason.check(ConnectionDone):
- self._when_disconnected.fire(self)
- else:
- self._when_disconnected.fire(reason)
+ self._when_disconnected.fire(
+ Failure(
+ TorDisconnectError(
+ text="Tor connection terminated",
+ error=reason,
+ )
+ )
+ )
# ...and this is why we don't do on_disconnect = Deferred() :(
# and instead should have had on_disconnect() method that
@@ -712,8 +717,10 @@
else:
self.on_disconnect.errback(reason)
self.on_disconnect = None
- self._when_disconnected.fire(self)
+
outstanding = [self.command] + self.commands if self.command else self.commands
+ self.command = None
+ self.defer = None
for d, cmd, cmd_arg in outstanding:
if not d.called:
d.errback(
@@ -754,6 +761,10 @@
if len(self.commands):
self.command = self.commands.pop(0)
(d, cmd, cmd_arg) = self.command
+
+ if self._when_disconnected.already_fired(d):
+ return
+
self.defer = d
self.debuglog.write(cmd + b'\n')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/torstate.py new/txtorcon-23.11.0/txtorcon/torstate.py
--- old/txtorcon-23.5.0/txtorcon/torstate.py 2020-04-20 04:58:02.000000000 +0200
+++ new/txtorcon-23.11.0/txtorcon/torstate.py 2023-08-11 09:41:38.000000000 +0200
@@ -477,7 +477,7 @@
(e.g. "SomeFlag=True"). Currently there are none that Tor accepts.
"""
- if type(stream) != int:
+ if not isinstance(stream, int):
# assume it's a Stream instance
stream = stream.id
try:
@@ -513,7 +513,7 @@
:meth:`Circuit.close <txtorcon.circuit.Circuit.close>`
"""
- if type(circid) != int:
+ if not isinstance(circid, int):
# assume it's a Circuit instance
circid = circid.id
flags = flags_from_dict(kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon/util.py new/txtorcon-23.11.0/txtorcon/util.py
--- old/txtorcon-23.5.0/txtorcon/util.py 2019-05-19 14:35:02.000000000 +0200
+++ new/txtorcon-23.11.0/txtorcon/util.py 2023-10-04 21:25:18.000000000 +0200
@@ -473,6 +473,19 @@
self._observers = []
self._fired = self._NotFired
+ def has_fired(self):
+ return self._fired is not self._NotFired
+
+ def already_fired(self, d):
+ """
+ If we have already fired, callback `d` with our result.
+ :returns bool: True if we already fired, False otherwise
+ """
+ if self.has_fired():
+ d.callback(self._fired)
+ return True
+ return False
+
def when_fired(self):
d = defer.Deferred()
if self._fired is not self._NotFired:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon.egg-info/PKG-INFO new/txtorcon-23.11.0/txtorcon.egg-info/PKG-INFO
--- old/txtorcon-23.5.0/txtorcon.egg-info/PKG-INFO 2023-05-19 03:21:31.000000000 +0200
+++ new/txtorcon-23.11.0/txtorcon.egg-info/PKG-INFO 2023-11-20 08:48:41.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: txtorcon
-Version: 23.5.0
+Version: 23.11.0
Summary: Twisted-based Tor controller client, with state-tracking and configuration abstractions. https://txtorcon.readthedocs.org https://github.com/meejah/txtorcon
Home-page: https://github.com/meejah/txtorcon
Author: meejah
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon.egg-info/SOURCES.txt new/txtorcon-23.11.0/txtorcon.egg-info/SOURCES.txt
--- old/txtorcon-23.5.0/txtorcon.egg-info/SOURCES.txt 2023-05-19 03:21:31.000000000 +0200
+++ new/txtorcon-23.11.0/txtorcon.egg-info/SOURCES.txt 2023-11-20 08:48:41.000000000 +0100
@@ -50,6 +50,7 @@
examples/disallow_streams_by_port.py
examples/dns_lookups.py
examples/hidden_echo.py
+examples/launch_onion.py
examples/launch_tor.py
examples/launch_tor2web.py
examples/launch_tor_endpoint.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/txtorcon-23.5.0/txtorcon.egg-info/requires.txt new/txtorcon-23.11.0/txtorcon.egg-info/requires.txt
--- old/txtorcon-23.5.0/txtorcon.egg-info/requires.txt 2023-05-19 03:21:31.000000000 +0200
+++ new/txtorcon-23.11.0/txtorcon.egg-info/requires.txt 2023-11-20 08:48:41.000000000 +0100
@@ -1,6 +1,5 @@
Twisted[tls]>=15.5.0
zope.interface>=3.6.1
-incremental
automat
cryptography
@@ -17,7 +16,6 @@
twine
pyflakes
pycodestyle
-mock
ipaddress>=1.0.16
geoip
readme_renderer
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-xsge_particle for openSUSE:Factory checked in at 2024-01-03 12:23:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-xsge_particle (Old)
and /work/SRC/openSUSE:Factory/.python-xsge_particle.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-xsge_particle"
Wed Jan 3 12:23:30 2024 rev:3 rq:1135601 version:1.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-xsge_particle/python-xsge_particle.changes 2021-06-01 10:37:49.864850774 +0200
+++ /work/SRC/openSUSE:Factory/.python-xsge_particle.new.28375/python-xsge_particle.changes 2024-01-03 12:23:32.660312178 +0100
@@ -1,0 +2,6 @@
+Fri Dec 29 09:01:10 UTC 2023 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 1.0.1:
+ * relicensed to LGPL
+
+-------------------------------------------------------------------
Old:
----
xsge_particle-1.0.tar.gz
New:
----
xsge_particle-1.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-xsge_particle.spec ++++++
--- /var/tmp/diff_new_pack.RRnagH/_old 2024-01-03 12:23:33.352337469 +0100
+++ /var/tmp/diff_new_pack.RRnagH/_new 2024-01-03 12:23:33.352337469 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-xsge_particle
#
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,15 +16,13 @@
#
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%define skip_python2 1
-%define skip_python36 1
+%{?sle15_python_module_pythons}
Name: python-xsge_particle
-Version: 1.0
+Version: 1.0.1
Release: 0
Summary: xSGE Particles
-License: GPL-3.0-or-later
-URL: http://xsge.nongnu.org
+License: LGPL-3.0-or-later
+URL: https://python-sge.github.io/
Source: https://files.pythonhosted.org/packages/source/x/xsge_particle/xsge_particl…
BuildRequires: %{python_module setuptools}
BuildRequires: fdupes
++++++ xsge_particle-1.0.tar.gz -> xsge_particle-1.0.1.tar.gz ++++++
++++ 6389 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package uperf for openSUSE:Factory checked in at 2024-01-03 12:23:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/uperf (Old)
and /work/SRC/openSUSE:Factory/.uperf.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "uperf"
Wed Jan 3 12:23:28 2024 rev:7 rq:1135602 version:1.0.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/uperf/uperf.changes 2020-05-07 14:54:51.278334646 +0200
+++ /work/SRC/openSUSE:Factory/.uperf.new.28375/uperf.changes 2024-01-03 12:23:30.816244781 +0100
@@ -1,0 +2,8 @@
+Fri Dec 29 07:20:38 UTC 2023 - Andrea Manzini <andrea.manzini(a)suse.com>
+
+- Update to 1.0.8:
+ * Add AF_VSOCK support
+ * Fixed minor memory leak
+ * Build system upkeep
+
+-------------------------------------------------------------------
Old:
----
uperf-1.0.7.tar.gz
New:
----
uperf-1.0.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ uperf.spec ++++++
--- /var/tmp/diff_new_pack.3Nq2OA/_old 2024-01-03 12:23:31.416266710 +0100
+++ /var/tmp/diff_new_pack.3Nq2OA/_new 2024-01-03 12:23:31.416266710 +0100
@@ -1,7 +1,7 @@
#
# spec file for package uperf
#
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,13 +17,15 @@
Name: uperf
-Version: 1.0.7
+Version: 1.0.8
Release: 0
Summary: Unified Network Performance Tool
License: GPL-3.0-only
Group: Productivity/Networking/Diagnostic
URL: http://www.uperf.org/
-Source0: https://github.com/uperf/uperf/archive/%{version}.tar.gz#/%{name}-%{version…
+Source0: https://github.com/uperf/uperf/archive/refs/tags/v%{version}.tar.gz#/%{name…
+BuildRequires: autoconf
+BuildRequires: automake
BuildRequires: lksctp-tools-devel
BuildRequires: openssl-devel
@@ -54,9 +56,10 @@
and much more!
%prep
-%setup -q
+%autosetup
%build
+autoreconf --install
%configure \
--datadir="%{_datadir}/%{name}" \
--enable-cpc \
++++++ uperf-1.0.7.tar.gz -> uperf-1.0.8.tar.gz ++++++
++++ 16475 lines of diff (skipped)
1
0
Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package mwic for openSUSE:Factory checked in at 2024-01-03 12:23:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mwic (Old)
and /work/SRC/openSUSE:Factory/.mwic.new.28375 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "mwic"
Wed Jan 3 12:23:26 2024 rev:8 rq:1135580 version:0.7.10
Changes:
--------
--- /work/SRC/openSUSE:Factory/mwic/mwic.changes 2023-01-20 17:39:12.676697470 +0100
+++ /work/SRC/openSUSE:Factory/.mwic.new.28375/mwic.changes 2024-01-03 12:23:28.348154578 +0100
@@ -1,0 +2,15 @@
+Thu Dec 28 20:31:54 UTC 2023 - Dirk Müller <dmueller(a)suse.com>
+
+- update to 0.7.10:
+ * Fix --max-context-width.
+ * When trimming strings, take grapheme clusters into account.
+ * Add new multi-word misspellings to the dictionary.
+ * Improve pager support:
+ + Don't reset encoding error handler to “strict”.
+ + Improve handling errors.
+ * Improve the test suite.
+ * Use “pytest” in “make test”.
+ * Enlarge screenshot.
+- mwic.keyring: update with 2023 key from https://jwilk.net/openpgp/
+
+-------------------------------------------------------------------
Old:
----
mwic-0.7.9.tar.gz
mwic-0.7.9.tar.gz.asc
New:
----
mwic-0.7.10.tar.gz
mwic-0.7.10.tar.gz.asc
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ mwic.spec ++++++
--- /var/tmp/diff_new_pack.IlAVLv/_old 2024-01-03 12:23:29.264188056 +0100
+++ /var/tmp/diff_new_pack.IlAVLv/_new 2024-01-03 12:23:29.264188056 +0100
@@ -18,7 +18,7 @@
%{!?license: %global license %doc}
Name: mwic
-Version: 0.7.9
+Version: 0.7.10
Release: 0
Summary: A spellchecker with grouping support
License: MIT
++++++ mwic-0.7.9.tar.gz -> mwic-0.7.10.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/Makefile new/mwic-0.7.10/Makefile
--- old/mwic-0.7.9/Makefile 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/Makefile 2023-02-23 16:00:36.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright © 2012-2019 Jakub Wilk <jwilk(a)jwilk.net>
+# Copyright © 2012-2022 Jakub Wilk <jwilk(a)jwilk.net>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the “Software”), to deal
@@ -59,12 +59,13 @@
.PHONY: test
test:
- $(PYTHON) tests/run-tests --verbose
+ $(PYTHON) -bb -m pytest -v
.PHONY: clean
clean:
find . -type f -name '*.py[co]' -delete
find . -type d -name '__pycache__' -delete
+ rm -rf .pytest_cache
rm -f .coverage
rm -f *.tmp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/dict/en new/mwic-0.7.10/dict/en
--- old/mwic-0.7.9/dict/en 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/dict/en 2023-02-23 16:00:36.000000000 +0100
@@ -184,7 +184,9 @@
do(es)?n’t user
# ISO 8895 (etc.) → ISO 8859
+# ISO 8061 (etc.) → ISO 8601
iso( |[_-])?(8858|8895|8559|5589)
+iso( |[_-])?(8061|8610)
# lot's of → lots of
lot’s of
@@ -198,6 +200,9 @@
# more that → more than
(more|less|larger|bigger|smaller|faster|slower) that(?! way)
+# no enough → not enough
+no enough
+
# an → a
an Unicode
an unary
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/doc/LICENSE new/mwic-0.7.10/doc/LICENSE
--- old/mwic-0.7.9/doc/LICENSE 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/doc/LICENSE 2023-02-23 16:00:36.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright © 2012-2022 Jakub Wilk <jwilk(a)jwilk.net>
+Copyright © 2012-2023 Jakub Wilk <jwilk(a)jwilk.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/doc/changelog new/mwic-0.7.10/doc/changelog
--- old/mwic-0.7.9/doc/changelog 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/doc/changelog 2023-02-23 16:00:36.000000000 +0100
@@ -1,3 +1,17 @@
+mwic (0.7.10) unstable; urgency=low
+
+ * Fix --max-context-width.
+ * When trimming strings, take grapheme clusters into account.
+ * Add new multi-word misspellings to the dictionary.
+ * Improve pager support:
+ + Don't reset encoding error handler to “strict”.
+ + Improve handling errors.
+ * Improve the test suite.
+ * Use “pytest” in “make test”.
+ * Enlarge screenshot.
+
+ -- Jakub Wilk <jwilk(a)jwilk.net> Thu, 23 Feb 2023 16:00:04 +0100
+
mwic (0.7.9) unstable; urgency=low
* Add new multi-word misspellings to the dictionary.
@@ -7,7 +21,7 @@
+ Use uppercase for CLI metavar.
* Drop support for Python < 3.6.
* Update Docutils homepage URL.
- * Make it possible use pytest as the test harness.
+ * Make it possible to use pytest as the test harness.
-- Jakub Wilk <jwilk(a)jwilk.net> Mon, 25 Apr 2022 14:33:05 +0200
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/doc/manpage.rst new/mwic-0.7.10/doc/manpage.rst
--- old/mwic-0.7.9/doc/manpage.rst 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/doc/manpage.rst 2023-02-23 16:00:36.000000000 +0100
@@ -7,8 +7,8 @@
---------------------------
:manual section: 1
-:version: mwic 0.7.9
-:date: 2022-04-25
+:version: mwic 0.7.10
+:date: 2023-02-23
Synopsis
--------
@@ -90,8 +90,8 @@
LESS
If this variable is unset, mwic sets it
- to ``FX``,
- or to ``FXR`` if the output is in color.
+ to ``-FX``,
+ or to ``-FXR`` if the output is in color.
LV
If this variable in unset, and the output is in color,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/doc/mwic.1 new/mwic-0.7.10/doc/mwic.1
--- old/mwic-0.7.9/doc/mwic.1 2022-04-25 14:33:19.000000000 +0200
+++ new/mwic-0.7.10/doc/mwic.1 2023-02-23 16:00:40.000000000 +0100
@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText.
.
-.TH MWIC 1 "2022-04-25" "mwic 0.7.9" ""
+.TH MWIC 1 "2023-02-23" "mwic 0.7.10" ""
.SH NAME
mwic \- Misspelled Words In Context
.
@@ -107,8 +107,8 @@
.TP
.B LESS
If this variable is unset, mwic sets it
-to \fBFX\fP,
-or to \fBFXR\fP if the output is in color.
+to \fB\-FX\fP,
+or to \fB\-FXR\fP if the output is in color.
.TP
.B LV
If this variable in unset, and the output is in color,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/doc/screenshot.svg new/mwic-0.7.10/doc/screenshot.svg
--- old/mwic-0.7.9/doc/screenshot.svg 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/doc/screenshot.svg 2023-02-23 16:00:36.000000000 +0100
@@ -1,4 +1,4 @@
-<svg xmlns="http://www.w3.org/2000/svg" baseProfile="full" version="1.1" viewBox="0 0 804 762" width="80.4ex" height="76.2ex">
+<svg xmlns="http://www.w3.org/2000/svg" baseProfile="full" version="1.1" viewBox="0 0 804 762" width="48em" height="45.4em">
<g font-family="monospace" font-size="16">
<rect width="804" height="764"></rect><rect width="10" height="20" x="2" y="2"></rect><g fill="#fff" font-weight="bold"><text x="2" y="17">$</text> </g><rect width="740" height="20" x="12" y="2"></rect><g fill="#eee"><text x="22" y="17">m</text><text x="32" y="17">w</text><text x="42" y="17">i</text><text x="52" y="17">c</text> <text x="72" y="17">-</text><text x="82" y="17">-</text><text x="92" y="17">b</text><text x="102" y="17">l</text><text x="112" y="17">a</text><text x="122" y="17">c</text><text x="132" y="17">k</text><text x="142" y="17">l</text><text x="152" y="17">i</text><text x="162" y="17">s</text><text x="172" y="17">t</text> <text x="192" y="17">/</text><text x="202" y="17">u</text><text x="212" y="17">s</text><text x="222" y="17">r</text><text x="232" y="17">/</text><text x="242" y="17">s</text><text x="252" y="17">h</text><text x="262" y="17">a</text><text x="272" y="17">r</text><text x="282" y="17">e</text><text x="292" y="17">/</text><text x="302" y="17">l</text><t
ext x="312" y="17">i</text><text x="322" y="17">n</text><text x="332" y="17">t</text><text x="342" y="17">i</text><text x="352" y="17">a</text><text x="362" y="17">n</text><text x="372" y="17">/</text><text x="382" y="17">d</text><text x="392" y="17">a</text><text x="402" y="17">t</text><text x="412" y="17">a</text><text x="422" y="17">/</text><text x="432" y="17">s</text><text x="442" y="17">p</text><text x="452" y="17">e</text><text x="462" y="17">l</text><text x="472" y="17">l</text><text x="482" y="17">i</text><text x="492" y="17">n</text><text x="502" y="17">g</text><text x="512" y="17">/</text><text x="522" y="17">c</text><text x="532" y="17">o</text><text x="542" y="17">r</text><text x="552" y="17">r</text><text x="562" y="17">e</text><text x="572" y="17">c</text><text x="582" y="17">t</text><text x="592" y="17">i</text><text x="602" y="17">o</text><text x="612" y="17">n</text><text x="622" y="17">s</text> <text x="642" y="17">r</text><text x="652" y="17">f</text><text x="662
" y="17">c</text><text x="672" y="17">1</text><text x="682" y="17">9</text><text x="692" y="17">2</text><text x="702" y="17">7</text><text x="712" y="17">.</text><text x="722" y="17">t</text><text x="732" y="17">x</text><text x="742" y="17">t</text></g>
<rect width="50" height="20" x="752" y="2"></rect><rect width="130" height="20" x="2" y="22"></rect><g fill="#eee"><text x="2" y="37">h</text><text x="12" y="37">e</text><text x="22" y="37">i</text><text x="32" y="37">r</text><text x="42" y="37">a</text><text x="52" y="37">r</text><text x="62" y="37">c</text><text x="72" y="37">h</text><text x="82" y="37">i</text><text x="92" y="37">c</text><text x="102" y="37">a</text><text x="112" y="37">l</text><text x="122" y="37">:</text></g>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/lib/cli.py new/mwic-0.7.10/lib/cli.py
--- old/mwic-0.7.9/lib/cli.py 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/lib/cli.py 2023-02-23 16:00:36.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright © 2013-2022 Jakub Wilk <jwilk(a)jwilk.net>
+# Copyright © 2013-2023 Jakub Wilk <jwilk(a)jwilk.net>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the “Software”), to deal
@@ -25,6 +25,7 @@
import argparse
import functools
import io
+import re
import signal
import sys
import types
@@ -41,7 +42,7 @@
from . import text
# pylint: enable=import-outside-toplevel
-__version__ = '0.7.9'
+__version__ = '0.7.10'
class VersionAction(argparse.Action):
@@ -99,7 +100,7 @@
help='omit blank lines in output')
ap.add_argument('--limit', metavar='N', type=int, default=1e999,
help='skip words that have >N instances')
- ap.add_argument('--max-context-width', metavar='N', default=30,
+ ap.add_argument('--max-context-width', type=int, metavar='N', default=30,
help='limit context width to N chars')
ap.add_argument('--suggest', metavar='N', type=int, default=0,
help='suggest up to N corrections')
@@ -173,8 +174,15 @@
if not misspellings:
sys.exit(rc)
raw_cc = options.output_format == 'color'
- with lib.pager.autopager(raw_control_chars=raw_cc):
- print_misspellings(ctxt)
+ try:
+ with lib.pager.autopager(raw_control_chars=raw_cc):
+ print_misspellings(ctxt)
+ except lib.pager.Error:
+ if options.traceback:
+ raise
+ msg = f'{ap.prog}: pager failed'
+ print(msg, file=sys.stderr)
+ rc = 1
sys.exit(rc)
def spellcheck_file(ctxt, file):
@@ -185,7 +193,7 @@
for line in file:
if force_ucs2:
# https://github.com/rfk/pyenchant/issues/58
- line = ''.join(c if c <= '\uFFFF' else '\uFFFD' for c in line)
+ line = re.sub(r'[^\0-\uFFFF]', '\uFFFD', line)
line = line.strip()
line = line.expandtabs()
taken = bytearray(len(line))
@@ -289,7 +297,7 @@
underline[x : x + len(word)] = underline_char * len(word)
if not header:
continue
- print(', '.join(header) + ':')
+ print(str.join(', ', header) + ':')
underline = underline.decode()
lwidth = len(underline) - len(underline.lstrip())
rwidth = len(underline) - len(underline.rstrip())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/lib/intdict.py new/mwic-0.7.10/lib/intdict.py
--- old/mwic-0.7.9/lib/intdict.py 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/lib/intdict.py 2023-02-23 16:00:36.000000000 +0100
@@ -67,7 +67,7 @@
for i, (name, definition) in enumerate(self._defs.items()):
substs += [definition]
regex += [f'(?P<mwic{i}>{re.escape(name)})']
- regex = '|'.join(regex)
+ regex = str.join('|', regex)
regex = re.compile(regex)
self._regex = regex
self._substs = substs
@@ -129,7 +129,7 @@
else:
raise error('malformed @-command') # no coverage
else:
- regex = r'\s+'.join(line)
+ regex = str.join(r'\s+', line)
regex = macros.expand(regex)
try:
re.compile(regex)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/lib/pager.py new/mwic-0.7.10/lib/pager.py
--- old/mwic-0.7.9/lib/pager.py 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/lib/pager.py 2023-02-23 16:00:36.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright © 2015-2021 Jakub Wilk <jwilk(a)jwilk.net>
+# Copyright © 2015-2022 Jakub Wilk <jwilk(a)jwilk.net>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the “Software”), to deal
@@ -35,13 +35,16 @@
def get_default_pager():
# Use "pager" if it exist:
- # https://www.debian.org/doc/debian-policy/#document-ch-customized-programs
+ # https://www.debian.org/doc/debian-policy/ch-customized-programs.html#editor…
# Fall back to "more", which is in POSIX.
return (
_find_command('pager')
or 'more'
)
+class Error(RuntimeError):
+ pass
+
@contextlib.contextmanager
def autopager(*, raw_control_chars=False):
if not sys.stdout.isatty():
@@ -53,7 +56,7 @@
return
env = None
if 'LESS' not in os.environ:
- lessopt = 'FX'
+ lessopt = '-FX'
if raw_control_chars:
lessopt += 'R'
env = dict(env or os.environ, LESS=lessopt)
@@ -64,6 +67,7 @@
with ipc.Popen(cmdline, shell=True, stdin=ipc.PIPE, env=env) as pager:
sys.stdout = io.TextIOWrapper(pager.stdin,
encoding=orig_stdout.encoding,
+ errors=orig_stdout.errors,
)
try:
yield
@@ -71,8 +75,11 @@
sys.stdout.close()
finally:
sys.stdout = orig_stdout
+ if pager.returncode:
+ raise Error
__all__ = [
+ 'Error',
'autopager',
]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/lib/text.py new/mwic-0.7.10/lib/text.py
--- old/mwic-0.7.9/lib/text.py 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/lib/text.py 2023-02-23 16:00:36.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright © 2013-2018 Jakub Wilk <jwilk(a)jwilk.net>
+# Copyright © 2013-2023 Jakub Wilk <jwilk(a)jwilk.net>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the “Software”), to deal
@@ -23,21 +23,29 @@
'''
import functools
-import re
+import regex as re
def ltrim(s, n, *, char='…'):
- if len(s) <= n:
+ if n <= 0:
+ return s and char
+ pat = re.compile(r'\X\X(\X{#})\Z'.replace('#', str(n - 1)))
+ match = pat.search(s)
+ if match is None:
return s
if n <= 1:
return char
- return char + s[-n+1:]
+ return char + match.group(1)
def rtrim(s, n, *, char='…'):
- if len(s) <= n:
+ if n <= 0:
+ return s and char
+ pat = re.compile(r'\A(\X{#})\X\X'.replace('#', str(n - 1)))
+ match = pat.match(s)
+ if match is None:
return s
if n <= 1:
return char
- return s[:n-1] + char
+ return match.group(1) + char
_camel_case_split = re.compile('([A-Z][^A-Z]*)').split
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/private/check-rst new/mwic-0.7.10/private/check-rst
--- old/mwic-0.7.9/private/check-rst 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/private/check-rst 2023-02-23 16:00:36.000000000 +0100
@@ -37,6 +37,6 @@
else
printf '%s\n' "$@"
fi |
-xargs -t -I{} "$rst2xml" $options {} /dev/null
+xargs -t -I{} "$rst2xml" $options {} > /dev/null
# vim:ts=4 sts=4 sw=4 et
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/private/update-branch-coverage new/mwic-0.7.10/private/update-branch-coverage
--- old/mwic-0.7.9/private/update-branch-coverage 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/private/update-branch-coverage 2023-02-23 16:00:36.000000000 +0100
@@ -1,6 +1,6 @@
-#!/usr/bin/env python3
+#!/bin/sh
-# Copyright © 2014 Jakub Wilk <jwilk(a)jwilk.net>
+# Copyright © 2022 Jakub Wilk <jwilk(a)jwilk.net>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the “Software”), to deal
@@ -20,51 +20,17 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-import io
-import os
-import sys
-
-import nose
-import nose.plugins.cover
-
-class Coverage(nose.plugins.cover.Coverage):
-
- stream = None
-
- def report(self, stream):
- return super().report(self.stream)
-
-basedir = os.path.join(
- os.path.dirname(__file__),
- os.pardir,
-)
-
-def main():
- argv = [
- sys.argv[0],
- '--with-coverage',
- '--cover-package=lib',
- '--cover-erase',
- ]
- path = os.path.join(
- 'tests',
- 'coverage'
- )
- plugin = Coverage()
- report_stream = plugin.stream = io.StringIO()
- print('Generated automatically by private/update-branch-coverage. '
- 'Do not edit.\n', file=report_stream)
- ok = nose.run(argv=argv, plugins=[plugin])
- if not ok:
- sys.exit(1)
- report_stream.seek(0)
- with open(path + '.tmp', 'wt', encoding='ASCII') as file:
- for line in report_stream:
- line = line.rstrip()
- print(line, file=file)
- os.rename(path + '.tmp', path)
-
-if __name__ == '__main__':
- main()
+set -e -u
+here=${0%/*}
+cd "$here/.."
+python3 -m pytest --cov=lib --cov-branch --cov-report= -q
+true > tests/coverage.tmp
+printf 'Generated automatically by private/update-branch-coverage. ' >> tests/coverage.tmp
+printf 'Do not edit.\n\n' >> tests/coverage.tmp
+python3 -m coverage report >> tests/coverage.tmp || {
+ printf '"python3 -m coverage" failed\n' >&2
+ exit 1
+}
+mv tests/coverage.tmp tests/coverage
# vim:ts=4 sts=4 sw=4 et
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/tests/coverage new/mwic-0.7.10/tests/coverage
--- old/mwic-0.7.9/tests/coverage 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/tests/coverage 2023-02-23 16:00:36.000000000 +0100
@@ -2,13 +2,13 @@
Name Stmts Miss Branch BrPart Cover Missing
-------------------------------------------------------------
-lib/__init__.py 1 0 2 1 67% 5->exit
-lib/cli.py 219 41 102 20 76% 62-63, 114, 125-131, 151, 163-169, 173, 187, 194, 221-222, 233, 236-238, 254-257, 278, 282, 285-287, 292, 308-316, 325-327, 65->67, 113->114, 124->125, 137->139, 150->151, 172->173, 185->187, 193->194, 220->221, 232->233, 235->236, 253->254, 265->267, 267->229, 277->278, 281->282, 284->285, 291->292, 307->308, 320->273
-lib/colors.py 36 5 12 3 83% 38, 45, 52-53, 62, 44->45, 51->52, 61->62
-lib/data.py 56 3 14 2 90% 38-39, 86, 35->38, 85->86
-lib/extdict.py 61 0 32 2 98% 84->88, 98->101
-lib/intdict.py 93 0 24 0 100%
-lib/pager.py 40 25 12 1 31% 33-34, 40, 50-76, 47->50
-lib/text.py 28 0 16 0 100%
+lib/__init__.py 1 0 0 0 100%
+lib/cli.py 229 49 106 19 75% 64-65, 68, 116, 127-133, 139->141, 165-171, 175, 180-185, 196, 203, 230-231, 242, 245-248, 264-267, 271->273, 273->238, 284, 288, 291-294, 299, 315-323, 327->279, 332-334
+lib/colors.py 36 5 12 3 83% 38, 45, 52-53, 62
+lib/data.py 57 3 18 2 91% 38-39, 86
+lib/extdict.py 61 0 34 2 98% 84->88, 98->101
+lib/intdict.py 95 0 26 0 100%
+lib/pager.py 42 25 18 1 33% 33-34, 40, 53-79
+lib/text.py 37 0 22 0 100%
-------------------------------------------------------------
-TOTAL 534 74 214 29 82%
+TOTAL 558 82 236 27 82%
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/tests/multiword-iso.exp new/mwic-0.7.10/tests/multiword-iso.exp
--- old/mwic-0.7.9/tests/multiword-iso.exp 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/tests/multiword-iso.exp 2023-02-23 16:00:36.000000000 +0100
@@ -2,10 +2,18 @@
| ISO-5589-1
^^^^^^^^
+ISO-8061:
+| ISO-8061
+ ^^^^^^^^
+
ISO-8559:
| ISO-8559-1
^^^^^^^^
+ISO-8610:
+| ISO-8610
+ ^^^^^^^^
+
ISO-8858:
| ISO-8858-1
^^^^^^^^
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/tests/multiword-iso.txt new/mwic-0.7.10/tests/multiword-iso.txt
--- old/mwic-0.7.9/tests/multiword-iso.txt 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/tests/multiword-iso.txt 2023-02-23 16:00:36.000000000 +0100
@@ -4,3 +4,8 @@
ISO-5589-1
ISO-8859-1
+
+ISO-8061
+ISO-8610
+
+ISO-8601
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/tests/multiword-no-enough.exp new/mwic-0.7.10/tests/multiword-no-enough.exp
--- old/mwic-0.7.9/tests/multiword-no-enough.exp 1970-01-01 01:00:00.000000000 +0100
+++ new/mwic-0.7.10/tests/multiword-no-enough.exp 2023-02-23 16:00:36.000000000 +0100
@@ -0,0 +1,4 @@
+no enough:
+| no enough memory
+ ^^^^^^^^^
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/tests/multiword-no-enough.txt new/mwic-0.7.10/tests/multiword-no-enough.txt
--- old/mwic-0.7.9/tests/multiword-no-enough.txt 1970-01-01 01:00:00.000000000 +0100
+++ new/mwic-0.7.10/tests/multiword-no-enough.txt 2023-02-23 16:00:36.000000000 +0100
@@ -0,0 +1 @@
+no enough memory
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/tests/run-nose new/mwic-0.7.10/tests/run-nose
--- old/mwic-0.7.9/tests/run-nose 1970-01-01 01:00:00.000000000 +0100
+++ new/mwic-0.7.10/tests/run-nose 2023-02-23 16:00:36.000000000 +0100
@@ -0,0 +1,35 @@
+#!/usr/bin/env python3
+
+# Copyright © 2016-2023 Jakub Wilk <jwilk(a)jwilk.net>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the “Software”), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+import pathlib
+import sys
+
+import nose
+
+sys.path[:0] = [str(pathlib.Path(__file__).parent.parent)]
+
+from tests import test_blackbox # pylint: disable=wrong-import-position
+
+if __name__ == '__main__':
+ nose.main(addplugins=[test_blackbox.nose_plugin()])
+
+# vim:ts=4 sts=4 sw=4 et
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/tests/run-tests new/mwic-0.7.10/tests/run-tests
--- old/mwic-0.7.9/tests/run-tests 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/tests/run-tests 1970-01-01 01:00:00.000000000 +0100
@@ -1,34 +0,0 @@
-#!/usr/bin/env python3
-
-# Copyright © 2016-2022 Jakub Wilk <jwilk(a)jwilk.net>
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the “Software”), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-
-import sys
-
-import nose
-
-sys.path[0] += '/..'
-
-from tests import test_blackbox
-
-if __name__ == '__main__':
- nose.main(addplugins=[test_blackbox.nose_plugin()])
-
-# vim:ts=4 sts=4 sw=4 et
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/tests/test_blackbox.py new/mwic-0.7.10/tests/test_blackbox.py
--- old/mwic-0.7.9/tests/test_blackbox.py 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/tests/test_blackbox.py 2023-02-23 16:00:36.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright © 2014-2022 Jakub Wilk <jwilk(a)jwilk.net>
+# Copyright © 2014-2023 Jakub Wilk <jwilk(a)jwilk.net>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the “Software”), to deal
@@ -21,34 +21,54 @@
import glob
import io
import os
+import random
+import signal
+import string
import sys
import unittest.mock
import lib.cli as M
from .tools import (
+ assert_in,
assert_multi_line_equal,
)
here = os.path.dirname(__file__)
here = os.path.relpath(here)
-def _get_output(path, language):
- argv = ['mwic', '--language', language, path]
+def _get_output(*args, stdin=''):
+ argv = ['mwic', *args]
+ binstdin = io.BytesIO(stdin.encode('UTF-8'))
+ textstdin = io.TextIOWrapper(binstdin, encoding='UTF-8')
binstdout = io.BytesIO()
textstdout = io.TextIOWrapper(binstdout, encoding='UTF-8')
- with unittest.mock.patch.multiple(sys, argv=argv, stdout=textstdout):
+ sys_patch = unittest.mock.patch.multiple(sys, argv=argv, stdin=textstdin, stdout=textstdout)
+ signal_patch = unittest.mock.patch('signal.signal')
+ with sys_patch, signal_patch:
try:
try:
M.main()
except SystemExit as exc:
if exc.code != 0:
raise
+ signal.signal.assert_called_once()
sys.stdout.flush()
return binstdout.getvalue().decode('UTF-8')
finally:
textstdout.close()
+def random_word():
+ return str.join('', [
+ random.choice(string.ascii_lowercase)
+ for x in range(32)
+ ])
+
+def test_max_context_width():
+ bad_word = random_word()
+ text = _get_output('--language', 'en', '--max-context-width=2', stdin=f'yes {bad_word} yes')
+ assert_in(f'… {bad_word} …', text)
+
def _test_text(xpath):
assert xpath.endswith('.exp')
if '@' in xpath:
@@ -57,7 +77,7 @@
language = 'en-US'
ipath = xpath[:-4]
ipath += '.txt'
- text = _get_output(ipath, language)
+ text = _get_output('--language', language, ipath)
with open(xpath, 'rt', encoding='UTF-8') as file:
expected = file.read()
if expected != text:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mwic-0.7.9/tests/test_trim.py new/mwic-0.7.10/tests/test_trim.py
--- old/mwic-0.7.9/tests/test_trim.py 2022-04-25 14:33:14.000000000 +0200
+++ new/mwic-0.7.10/tests/test_trim.py 2023-02-23 16:00:36.000000000 +0100
@@ -1,4 +1,4 @@
-# Copyright © 2014-2022 Jakub Wilk <jwilk(a)jwilk.net>
+# Copyright © 2014-2023 Jakub Wilk <jwilk(a)jwilk.net>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the “Software”), to deal
@@ -18,6 +18,11 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
+import re
+import sys
+
+import regex
+
import lib.text as M
from .tools import (
@@ -25,14 +30,29 @@
assert_greater_equal,
)
+if sys.version_info >= (3, 7):
+ isascii = str.isascii # pylint: disable=no-member
+else:
+ def isascii(s):
+ return re.fullmatch(r'[\0-\x7F]*', s) is not None
+
+def xlen(s):
+ n = sum(1 if c else 0 for c in regex.split(r'(\X)', s))
+ if isascii(s):
+ assert n == len(s)
+ else:
+ assert n <= len(s)
+ return n
+
def test_ltrim():
def t(s, n, expected):
result = M.ltrim(s, n)
+ assert_equal(result, expected)
assert_greater_equal(
max(1, n),
- len(result)
+ xlen(result)
)
- assert_equal(result, expected)
+ t('', 0, '')
truncations = [
'…',
'…',
@@ -43,11 +63,22 @@
]
for n, s in enumerate(truncations):
t(truncations[-1], n, s)
+ truncations = [
+ s.replace('g', 'g\N{COMBINING GRAVE ACCENT}')
+ for s in truncations
+ ]
+ for n, s in enumerate(truncations):
+ t(truncations[-1], n, s)
def test_rtrim():
def t(s, n, expected):
result = M.rtrim(s, n)
assert_equal(result, expected)
+ assert_greater_equal(
+ max(1, n),
+ xlen(result)
+ )
+ t('', 0, '')
truncations = [
'…',
'…',
@@ -58,5 +89,11 @@
]
for n, s in enumerate(truncations):
t(truncations[-1], n, s)
+ truncations = [
+ s.replace('g', 'g\N{COMBINING ACUTE ACCENT}')
+ for s in truncations
+ ]
+ for n, s in enumerate(truncations):
+ t(truncations[-1], n, s)
# vim:ts=4 sts=4 sw=4 et
++++++ mwic.keyring ++++++
--- /var/tmp/diff_new_pack.IlAVLv/_old 2024-01-03 12:23:29.380192296 +0100
+++ /var/tmp/diff_new_pack.IlAVLv/_new 2024-01-03 12:23:29.384192442 +0100
@@ -1,85 +1,14 @@
-pub rsa4096/0x2D4EB3A6015475F5 2009-10-23 [SC] [expires: 2018-01-01]
- CDB5A1243ACDB63009AD07212D4EB3A6015475F5
-uid [ unknown] Jakub Wilk <jwilk(a)jwilk.net>
-uid [ unknown] Jakub Wilk <jwilk(a)debian.org>
-uid [ unknown] Jakub Wilk <ubanus(a)users.sf.net>
-sub rsa4096/0x49A526BFE5874F63 2009-10-23 [E]
-
-----BEGIN PGP PUBLIC KEY BLOCK-----
-mQINBEriG80BEADRWluqqGiV3JDkqAJvLcd8GpdJ1ILAeVceR0rWENpVP8f8qLp+
-d423rMEd2M5IagCngKUhTDt7zylCttRulUzde2VrhFSX+LsVaOhZrDTLjzdxOKZJ
-W6sDBUbEhZA9O40sC7wOc60On7SIbAHewOiVlSSzrpuaNOcmeFqxxqXnl03a13ip
-Jj8BYlkTGtpWK5eAxcl8Tnu8zuxwlXjJ6CANmYnctA/JOwDVr86Vqx7We46yCt6T
-+uE1f/6qdV9yzPG4sCJOcCe2nr52W0drqcm4AV03MRf5Gfyk0q6ZcyoNiZGMbmP0
-87pvkC14YQuelPnucUpT29zuZdJDlnl0nxk7MG77S7TafBrJii4cd1UIvbbfti0s
-e3S6xuW5VG2VmkN7tIGrVxt4f+x3Gmsimk665HZClbSbTjEUV6XGk77LoCzYFZR7
-aubQDUPq59Gj5ES98QjMEAUVp70ZqIwok9SQ3ZQlHcdcjGwSFFJcCPAS5z3Cx+1l
-57uaqEaF7lSkL9mqlBTpokb6NO9KNbi7gC2Weh5Kp2nl5ka0eCFe0dxPk0f4d8xq
-9YuCxYtGungL36J0JVhaxiMwLaNXy6Q7IVdS4i38Ky0TBiT4oerhzExcMNPxXGp6
-9syBm5R3SbbAJ36UW+U4u6nMB/eGcrvO/UqIZ/Z7r6DivY5+LiAxmsvzkwARAQAB
-tBxKYWt1YiBXaWxrIDxqd2lsa0Bqd2lsay5uZXQ+iQJVBBMBCAA/AhsDAh4BAheA
-AhkBBQsJCAcDAxUICwUWAwIBABYhBM21oSQ6zbYwCa0HIS1Os6YBVHX1BQJX7vyA
-BQkPZ14zAAoJEC1Os6YBVHX1cGcQAJaLsvKjEVGE470Z1vNyP/RvXfArIaWLG/gJ
-EvyhvbJHPuzViAA+YfB/NFBqxNFwBOOzPGcsnV+n8EfigpHMllyiwr81Ljpm1TLW
-oEHow/afVFQdIWcXtoam4JVBmJsPczjRaHJOwHWQ2skPwyZdmZE+IyvccMiT1vtS
-1hLtdsgfqbmnART8mL5RkuReQkJRN3WOCKZfes9AOf9lFWaj9E5JKmKxQI6J4PPT
-3iomTUVYNPaFoy/pR+/B21bJhC00LSBUfe3+UHolMQJd8KDKdvp3vT9Yv1KO21Oz
-BTpnLSglkKheFN2tGH4KHdCzFUSENsEqDN7cAB+oFV9Rzj74R3qHDKfYceAg+WSa
-sAkLmkCmikw+B5V5Jz6EW3d3+l88/w6q5f+fae7IRXo8jVp7uiFUDxZ/BNq3ivWb
-lHfnDurVaanRFDUACBKgMCQK2UXuZe0j27ES1st2BwdKVc3nF9X10WGIBwhIskuA
-8Ffi6JAqKbYh0Djsm/NBOi5aPcZrbrIgJKjxekG2KTyxamPK4V92wNrAy6+g734d
-edpgSVlUXY1cxuz/Xwjnjw11AvkZHNshZko9aIWBBxR8sike1qiOhS1G0jInpnXx
-x/OOb7LRVBGx8MDOmhwhr1XoGb4wIhJDiS2OsmNqL/cn6v1YJOtchaR03PEtwklz
-6DiCdr1dtB1KYWt1YiBXaWxrIDxqd2lsa0BkZWJpYW4ub3JnPokCUgQTAQgAPAIb
-AwIeAQIXgAULCQgHAwMVCAsFFgMCAQAWIQTNtaEkOs22MAmtByEtTrOmAVR19QUC
-V+78gAUJD2deMwAKCRAtTrOmAVR19Z5VD/9+pLcwnoqQUkt7OVK7yEpF02Zn//8J
-iZ8q5fsuYhRw7jioXQn6auwKBsD00XKM16veHAHI9FiOAqewLQmhwju+gf/5gB5w
-JcKDhxy1YZGEGPNPffqemZxEKRz5hsS8zJBhcuFUf0RGZtHK40+vpM3ZZooCpDEn
-9eBlclgf5F8vmwZYumyW2NeLc+fVbpIt2PD+FJBJhgUNF2sLHc2bNGI0SAn0Ifrb
-rBNhJKDyAK4JmLwNjnya6WvP70abVySn5D2kJWDlhHIbyvr2h0F2PzPKzIzEzg4Y
-PypjbO06xm845gmuMCFbC2W3shLK2dpXSaY6IbzLRwlof2bIlvZIcv+Axpoi04Jd
-i9TEmvOmnwCsBEv9wPlTU2Hv0QQ+bReQ8sHHgwCNYZEC6h00Yr6b+4cKZiZGjiuR
-yMa0BmvkiZo9Ha2KZ3bOTSdaj6KhKFyWm/eD8cOu/b658SEEhQ1odc/VvBODiWx+
-e+NTjWEMoFI+g3GTMicne3elAGoTXHBbW9SDDixaws+qboHI3yow5SlK36InmGH7
-hsOY3tGsATpj0dDVBsJaxS442eiqcNiI9F+O0wxwpdVU1OcExQBhAnBzLVu4e0kV
-ym72HiK3EqFx3R+gxWv3bp1B7xwPpu7dMVlZGhwlbTrCF0vfR5D8cfz31/9WfTaj
-3Yb/IguzJZIF2rQgSmFrdWIgV2lsayA8dWJhbnVzQHVzZXJzLnNmLm5ldD6JAj0E
-EwEIACcCGwMFCwkIBwMFFQoJCAsFFgMCAQACHgECF4AFAk3uTjgFCQXUHDgACgkQ
-LU6zpgFUdfWAxg/+PqysL3WIDROwiInHhW3zkaPRhpjOMfHzjptu3K+2GIL6yXQJ
-tekld6DaFXh6PWIQ/Huw6qvzg/wof9NB/zXeaE/aeP9b9BVq4zz3DPeKOfAlS6CK
-VTe677AoiEN4Vlu9knZLL/oLjkiJx3pepz52s1DA1YQl19kFWjdoZS53d3OGdch1
-vh0ZQYgv266Zn5WWGvL7GgQSehbplMM3SBcsbAFhRTeRUPE5Ff1UI7kA2V7yPPwu
-LWFFmqXWebObr57qqcf/HOjhAVuMhZHPFvyL63LamhaEeFZT6/H6Nn66efsEsyk6
-UVpz0GT1k0HLlypnN7QiAnz8bJ07FxwxwR+KdsuB5+rMgPX8iXksMAFYgCLR9DlV
-QNoI80rf7sYt8syKq2yuHJ7fSB+8TOP7FXTPeD0cGUr1x00AUrcBrXcGJh+8INek
-YowEe7U/tkJuRsJVwWun32UnO8fQL4j4u5CDm0nu/HT2BzbxAiYoF5YkcawDr8+C
-r2oZ/McqYiyuSeouxTpqqCPF+AB7ZtElGkWqyNRHhJ1j9RjNTopdzfpzb0kQfV1H
-bs5PdpV/QZqnVUlmA1d4jkIk1a4laBJPp82tUkf7CNd4YNS5fItyIOA5L9KTSL6T
-smNye9+PFgQN3KBRhomgreN09p76TJTsP3k5re/gttSb/MFbezNYsMcz4qW5Ag0E
-SuIbzQEQAOVx98yQNn72FfQKQgJ3a5MU5yWpa6v+OXTSDOZsw8FR39ZU0UzSpKWh
-ukvISiDWwvyrl9T70kEdZgYz413kdF+1YNyN2abu3E61VwOinSYGvqRCXWPG7y2i
-GIMTiU13J4lgrBllaAb/IGWjyKbos8dnzmHuN7HLHAmBpppTKjXYuXPGb9lsQCPD
-JCulDWa4gEozl9zSaJ2ILQnR6H+2pnxPIJwv+yQ7okiB2Tgym5UOwYKpJwleSQEx
-oeDMYq+St+BoVMzCT+wL/41V2fpbntq7RpGuOJSroJCAqp3k1i8EHbcamU1C8FKq
-TzN2qbZ3n+ZRj7aEHoAWBXY2ofST6ghMtFTqccZhan4c5dp3/BGnJpyX8qL3xMo0
-xht6jrCLfySe2VE/fqFctzvoyYeTkMjttXWvhY/S9mnr9AdFN70icohqDT5ppipN
-weGiq3BLsjndV2/ukJZXmyhk6bMDI1f6q2/FOgSpLlx0oZLdAF84PMY+Wtm/IZLk
-tEhGNeiXDM7aUBs15g8537vdbHtf2LVqK0IfBlkQyVoE/VGRLX//yHxqbEoshbm0
-JmRRsOqceIOn/d3swsA7pFVgXrfX51ruB213BA8O0lj8E3ALntT3vzutFdkpXG/s
-Zpj2pVDVj5EGtYDrxC03Pz0q0T5SaWeIIkSCgvrfztDBy+354qjZABEBAAGJAh8E
-GAEIAAkFAkriG80CGwwACgkQLU6zpgFUdfW31xAAyILZ5+iaI6MBhjrmMlwwK5ms
-z3Xd8ariPXyzqMOlBW6+ZkzTwrg0v5xct72mNFwMJZ+Fcb8u+dPPL1rj7MYFWLNT
-ZXMvKbicqQcV7FkwPUev1yb5mQsuxGmpUIGCdUSlVcmATF4BMvwmUI+IVQwAB590
-JCgQ85OAh3PY2O+2x0iRpHmpvCWCF9gHlDA67B+Eb60ZqQTp3fWh2zmVAT2Jf0nT
-2HJuL35sV/yLOoeK20nkU7D5p9LuzW+YIjqkrf825J3Arjw+B/jfGM9xY3+rRlvW
-9i+AVAMcnS4qp499076Z7hgyMWHXZv+mpkbY4fc5u89DxMZ1zuBops8d+mor3wfT
-otaetE664mv5I1UeI46c/2ndLubYIVMiZTSqB6uJXhjI+MaPBA9sLGa+b6cz29/5
-WkWj3rc/89vrES5HUqNBbOCXiD1Rbv2B3fv4u+Hf/q2+Ci1giVV2VLaXOuuWKoE7
-jQ7fH1Wl5YmFk998CaKaXiVeeo7aTfi3pZqkjsGAMIWCkYzszGFZFm8OdoynJ60r
-azRgyqz9/UJ77+2wn50YVJutP44WiP5NF9ELufGkDo9/r/DfknlIS5pyc55t4YjF
-jD6M2V8oO8pHuQ2TO14TkX629hChBlVCQQBUSU07toQ3iDw5umCFH7TobN5AxyPu
-i0i3KQXs09FW/+n9DTw=
-=R8Zy
+mDMEYzeDABYJKwYBBAHaRw8BAQdAKDC8FwZXK9zK/RIePpJ+OIpCpZnUjnmfrVBy
+7V3kIsi0HEpha3ViIFdpbGsgPGp3aWxrQGp3aWxrLm5ldD6IlAQTFggAPAIbAwUL
+CQgHAwMVCAsFFgMCAQACHgECF4AWIQR/XQ6dMyP4A9iIwx7hq8h3aW7HTgUCZRi2
+gAUJBD0CgAAKCRDhq8h3aW7HTlarAQDrifQgY1Pt9pIi/fjzNQeNl4XAJsjNzX71
+GCotzYRE7wD/ex7PtITHm4z9qGcKhkCPavaR0Axoa1tm5MpyPTsDQQ64OARjN4MA
+EgorBgEEAZdVAQUBAQdAGTvkypRjUwt2khbbjNlLIzYjKnhA96X7e5sWYsJGK2kD
+AQgHiH4EGBYIACYCGwwWIQR/XQ6dMyP4A9iIwx7hq8h3aW7HTgUCZRi2gAUJBD0C
+gAAKCRDhq8h3aW7HTvZ1AQDk6yxntgBX3DcrTipBvbmDB3+6BrNyOYpB9wlocokO
+1QD9EyiKFDs28KzUa36YwZYA240/2fnGMbbCNn1cOt0tqgg=
+=Es8D
-----END PGP PUBLIC KEY BLOCK-----
1
0