From 24f4602a40baa95194de61fe892ecf7021f19cbb Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 14 Jul 2018 08:53:58 +0000 Subject: [PATCH 01/37] - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 341c57a..a9564a2 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -2,7 +2,7 @@ Name: winpdb Version: 1.4.8 -Release: 16%{?dist} +Release: 17%{?dist} Summary: An advanced python debugger Group: Development/Debuggers License: GPLv2+ @@ -55,6 +55,9 @@ chmod +x $RPM_BUILD_ROOT%{python_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python_sitel %{_datadir}/pixmaps/%{name}.png %changelog +* Sat Jul 14 2018 Fedora Release Engineering - 1.4.8-17 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + * Fri Feb 09 2018 Fedora Release Engineering - 1.4.8-16 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From fdee3a5c49976408e344dcc2a3c18e862a3380c3 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Tue, 24 Jul 2018 10:20:46 -0400 Subject: [PATCH 02/37] fix FTBFS --- winpdb.spec | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/winpdb.spec b/winpdb.spec index a9564a2..8a4b3e9 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,8 +1,6 @@ -%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} - Name: winpdb Version: 1.4.8 -Release: 17%{?dist} +Release: 18%{?dist} Summary: An advanced python debugger Group: Development/Debuggers License: GPLv2+ @@ -32,10 +30,10 @@ sed -i 's/\r//g' README.txt chmod -x README.txt %build -%{__python} setup.py build +%{__python2} setup.py build %install -%{__python} setup.py install --skip-build --root=$RPM_BUILD_ROOT +%{__python2} setup.py install --skip-build --root=$RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%{_datadir}/pixmaps install -m0644 -p %{SOURCE2} $RPM_BUILD_ROOT%{_datadir}/pixmaps @@ -45,16 +43,19 @@ desktop-file-install \ --dir $RPM_BUILD_ROOT%{_datadir}/applications \ %{SOURCE1} -chmod +x $RPM_BUILD_ROOT%{python_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python_sitelib}/winpdb.py +chmod +x $RPM_BUILD_ROOT%{python2_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python2_sitelib}/winpdb.py %files %doc README.txt %{_bindir}/* -%{python_sitelib}/* +%{python2_sitelib}/* %{_datadir}/applications/*.desktop %{_datadir}/pixmaps/%{name}.png %changelog +* Tue Jul 24 2018 Tom Callaway - 1.4.8-18 +- fix FTBFS + * Sat Jul 14 2018 Fedora Release Engineering - 1.4.8-17 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild From 2a34be26642f73fa0ff0a8ffa896d716326b2f12 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 28 Jan 2019 20:18:30 +0100 Subject: [PATCH 03/37] Remove obsolete Group tag References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag --- winpdb.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 8a4b3e9..386810e 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -2,7 +2,6 @@ Name: winpdb Version: 1.4.8 Release: 18%{?dist} Summary: An advanced python debugger -Group: Development/Debuggers License: GPLv2+ URL: http://www.winpdb.org/ Source0: http://winpdb.googlecode.com/files/winpdb-%{version}.tar.gz From 0c4f692abe3a3e90880103b1a703763794a641b7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sun, 3 Feb 2019 11:47:46 +0000 Subject: [PATCH 04/37] - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 386810e..56db386 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 1.4.8 -Release: 18%{?dist} +Release: 19%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: http://www.winpdb.org/ @@ -52,6 +52,9 @@ chmod +x $RPM_BUILD_ROOT%{python2_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python2_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sun Feb 03 2019 Fedora Release Engineering - 1.4.8-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + * Tue Jul 24 2018 Tom Callaway - 1.4.8-18 - fix FTBFS From cc216cd97f52a22bcea690f95d2833bebbf32af3 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Tue, 4 Jun 2019 13:09:17 -0400 Subject: [PATCH 05/37] make explicit python2 --- winpdb.spec | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 56db386..07f779d 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 1.4.8 -Release: 19%{?dist} +Release: 20%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: http://www.winpdb.org/ @@ -28,6 +28,9 @@ communication and speed of up to 20 times that of pdb. sed -i 's/\r//g' README.txt chmod -x README.txt +sed -i 's|/usr/bin/env python|/usr/bin/python2|g' rpdb2.py +sed -i 's|/usr/bin/env python|/usr/bin/python2|g' winpdb.py + %build %{__python2} setup.py build @@ -52,6 +55,9 @@ chmod +x $RPM_BUILD_ROOT%{python2_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python2_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Tue Jun 04 2019 Tom Callaway - 1.4.8-20 +- make explicit python2 + * Sun Feb 03 2019 Fedora Release Engineering - 1.4.8-19 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild From da4d602dcd3492c3ef78c8c6d1ec7c95c020e5d2 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 27 Jul 2019 03:33:22 +0000 Subject: [PATCH 06/37] - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 07f779d..3340b96 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 1.4.8 -Release: 20%{?dist} +Release: 21%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: http://www.winpdb.org/ @@ -55,6 +55,9 @@ chmod +x $RPM_BUILD_ROOT%{python2_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python2_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sat Jul 27 2019 Fedora Release Engineering - 1.4.8-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Tue Jun 04 2019 Tom Callaway - 1.4.8-20 - make explicit python2 From ccba0fa44081fafa0b27303d423de3b042f74391 Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Thu, 15 Aug 2019 13:54:16 -0400 Subject: [PATCH 07/37] update to 2.0.0dev5, python3 --- .gitignore | 1 + sources | 2 +- winpdb-1.4.8-gnome-fix.patch | 12 - winpdb-1.4.8-issue19-fix.patch | 12 - winpdb-2.0.0dev5.patch | 1338 ++++++++++++++++++++++++++++++++ winpdb.spec | 45 +- wxpython3.0.patch | 47 -- 7 files changed, 1361 insertions(+), 96 deletions(-) delete mode 100644 winpdb-1.4.8-gnome-fix.patch delete mode 100644 winpdb-1.4.8-issue19-fix.patch create mode 100644 winpdb-2.0.0dev5.patch delete mode 100644 wxpython3.0.patch diff --git a/.gitignore b/.gitignore index be1e212..0499392 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ winpdb-1.4.6.tar.gz /winpdb-1.4.8.tar.gz +/WINPDB_1_5_0.tar.gz diff --git a/sources b/sources index d2efd48..b9ec0ef 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -e28049cc93c1614b9db20960d76b7ea3 winpdb-1.4.8.tar.gz +SHA512 (WINPDB_1_5_0.tar.gz) = 9d4104e93c512dab3f1cd52b861b021b341cd0aaf5d65d1235cef546ce6e6dcedcb699a50f40f5c582d4dc1789dc66ae70c2c1cab9d4ff3afcd1d796e055b8db diff --git a/winpdb-1.4.8-gnome-fix.patch b/winpdb-1.4.8-gnome-fix.patch deleted file mode 100644 index 8a64c13..0000000 --- a/winpdb-1.4.8-gnome-fix.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up winpdb-1.4.8/rpdb2.py.gnomefix winpdb-1.4.8/rpdb2.py ---- winpdb-1.4.8/rpdb2.py.gnomefix 2014-12-04 15:19:38.972288993 -0500 -+++ winpdb-1.4.8/rpdb2.py 2014-12-04 15:19:47.279229223 -0500 -@@ -1780,7 +1780,7 @@ osSpawn = { - NT_DEBUG: 'start "rpdb2 - Version ' + get_version() + ' - Debuggee Console" cmd.exe /K ""%(exec)s" %(options)s"', - POSIX: "%(term)s -e %(shell)s -c '%(exec)s %(options)s; %(shell)s' &", - 'Terminal': "Terminal --disable-server -x %(shell)s -c '%(exec)s %(options)s; %(shell)s' &", -- GNOME_DEFAULT_TERM: "gnome-terminal --disable-factory -x %(shell)s -c '%(exec)s %(options)s; %(shell)s' &", -+ GNOME_DEFAULT_TERM: "gnome-terminal -x %(shell)s -c '%(exec)s %(options)s; %(shell)s' &", - MAC: '%(exec)s %(options)s', - DARWIN: '%(exec)s %(options)s', - SCREEN: 'screen -t debuggee_console %(exec)s %(options)s' diff --git a/winpdb-1.4.8-issue19-fix.patch b/winpdb-1.4.8-issue19-fix.patch deleted file mode 100644 index 794c0af..0000000 --- a/winpdb-1.4.8-issue19-fix.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up winpdb-1.4.8/rpdb2.py.issue19 winpdb-1.4.8/rpdb2.py ---- winpdb-1.4.8/rpdb2.py.issue19 2015-04-01 08:47:34.601072072 -0400 -+++ winpdb-1.4.8/rpdb2.py 2015-04-01 08:48:02.336901383 -0400 -@@ -12056,7 +12056,7 @@ class CConsoleInternal(cmd.Cmd, threadin - - - def __parse_bp_arg(self, arg, fAllowExpr = True): -- _args = arg.split(BP_EVAL_SEP) -+ _args = arg.split(BP_EVAL_SEP, 1) - - if (len(_args) > 1) and (not fAllowExpr): - raise BadArgument diff --git a/winpdb-2.0.0dev5.patch b/winpdb-2.0.0dev5.patch new file mode 100644 index 0000000..825d683 --- /dev/null +++ b/winpdb-2.0.0dev5.patch @@ -0,0 +1,1338 @@ +diff -up winpdb-WINPDB_1_5_0/setup.py.dev5 winpdb-WINPDB_1_5_0/setup.py +--- winpdb-WINPDB_1_5_0/setup.py.dev5 2018-03-30 08:34:07.000000000 -0400 ++++ winpdb-WINPDB_1_5_0/setup.py 2019-08-15 13:48:27.575840068 -0400 +@@ -25,15 +25,17 @@ + + from setuptools import setup + +-import os ++import os, re + + # strip out build status + LONG_DESC = ''.join( open('README.rst').readlines()[1:-8] ) + ++WINPDB_VERSION = re.search( r'WINPDB_VERSION\s*=\s*"(.*)"', open('winpdb.py').read() ).group(1).replace('-alpha', 'a') ++print( 'Packaging winpdb version: "%s"' % WINPDB_VERSION ) + + setup( + name = 'winpdb-reborn', +- version = '1.5.0', ++ version = WINPDB_VERSION, + description = 'A platform independent GPL Python debugger.', + long_description = LONG_DESC, + author = 'Philippe Fremy, Nir Aides', +@@ -45,7 +47,9 @@ setup( + # How mature is this project? Common values are + # 3 - Alpha + # 4 - Beta +- 'Development Status :: 5 - Production/Stable', ++ # 5 - Production/Stable', ++ 'Development Status :: 3 - Alpha', ++ # 'Development Status :: 5 - Production/Stable', + + # Runs in different environments + 'Environment :: Console', +@@ -62,7 +66,7 @@ setup( + 'Operating System :: POSIX', + + # This version is for python 2 only +- 'Programming Language :: Python :: 2 :: Only', ++ 'Programming Language :: Python :: 3 :: Only', + + + 'Topic :: Software Development :: Debuggers', +@@ -83,7 +87,8 @@ setup( + 'Tracker': 'https://github.com/bluebird75/winpdb/issues', + }, + +- python_requires='>=2.6, <3', ++ python_requires='>=3.4', ++ install_requires='wxpython>=4', + py_modules = ['winpdb', 'rpdb2'], + + entry_points={ +diff -up winpdb-WINPDB_1_5_0/winpdb.py.dev5 winpdb-WINPDB_1_5_0/winpdb.py +--- winpdb-WINPDB_1_5_0/winpdb.py.dev5 2018-03-30 08:34:07.000000000 -0400 ++++ winpdb-WINPDB_1_5_0/winpdb.py 2019-08-15 13:48:24.183909002 -0400 +@@ -1,4 +1,5 @@ + #! /usr/bin/env python ++# -*- coding: utf-8 -*- + + """ + winpdb.py +@@ -23,7 +24,12 @@ + 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307 USA + """ + +-ABOUT_NOTICE = """*Winpdb Reborn* 1.5 is a platform independent lightweight ++VERSION = (2, 0, 0, 5, 'Tychod') ++WINPDB_VERSION = "2.0.0.dev5" ++WINPDB_TITLE = "Winpdb Reborn %s" % WINPDB_VERSION ++RPDB2_EXPECTED_VERSION = 'RPDB_1_5_0' ++ ++ABOUT_NOTICE = """*Winpdb Reborn* %s is a platform independent lightweight + standalone graphical debugger for Python 2 and 3. It supports + conditional breakpoints, multi-threaded debugging, smart + handling of forks, remote debugging and more. +@@ -43,7 +49,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICU + See the GNU General Public License for more details. + + Credits: +-Work on version 1.4.8 was sponsored by Investortools, Inc.""" ++Work on version 1.4.8 was sponsored by Investortools, Inc.""" % WINPDB_VERSION + + LICENSE_NOTICE = """ + This program is free software; you can redistribute it and/or modify it +@@ -279,15 +285,15 @@ END OF TERMS AND CONDITIONS + + import sys + +-WXVER_PYTHON2 = "3" +-WXVER_PYTHON3 = "4" ++# Winpdb Works only with WxPython 4, compatible with python 3.4+ ++MIN_WXVER = "4.0.0" + + STR_BAD_PYTHON_ERROR_TITLE = 'Winpdb Error' + STR_BAD_PYTHON_ERROR_MSG = """Unsupported Python version + Winpdb does not run with this version of Python. You need +-Python 2.6 or 2.7 with WxPython 3 from sourceforge to run Winpdb. ++Python 2.6 or above with at least WxPython 3 to run Winpdb. + +-To debug a program written for PyPy, launch ++To debug a program written for PyPy or Python 3.x , launch + Winpdb with Python 2 and select the interpreter to use in + the launch dialog. + +@@ -296,12 +302,9 @@ of Python.""" + + STR_WXPYTHON_ERROR_TITLE = 'Winpdb Error' + STR_WXPYTHON_ERROR_MSG = """wxPython was not found. +-wxPython 3 is required to run the winpdb GUI. +-Download it from sourceforge: https://sourceforge.net/projects/wxpython/files/wxPython/ +- +-Note that wxPython 4 only support Python 3 and above. There is a dedicated version +-of winpdb-reborn for Python 3 and wxPython 4. +- ++wxPython 4.0 or higher is required to run the Winpdb GUI. ++wxPython is the graphical user interface toolkit used by Winpdb. ++You can find more information on wxPython at http://www.wxpython.org/ + To use the debugger without a GUI, run rpdb2.""" + + STR_X_ERROR_MSG = """It was not possible to start Winpdb. +@@ -336,38 +339,30 @@ def myErrorMsgDialog(title, msg): + RUNNING_UNDER_PY2 = (sys.version_info[0] == 2) + RUNNING_UNDER_PY3 = (sys.version_info[0] == 3) + +-if platform.python_implementation() != 'CPython' or RUNNING_UNDER_PY3: ++if RUNNING_UNDER_PY2 == RUNNING_UNDER_PY3: ++ # Houston, we have a problem! ++ raise ValueError('XXX') ++ ++if platform.python_implementation() != 'CPython': + # Only CPython 2.x and 3.x supported + myErrorMsgDialog( STR_BAD_PYTHON_ERROR_TITLE, STR_BAD_PYTHON_ERROR_MSG ) + sys.exit(1) + + +-if RUNNING_UNDER_PY2: +- if 'wx' not in sys.modules and 'wxPython' not in sys.modules: +- # multi-install of Wx, correct version must be selected with wxversion +- try: +- import wxversion +- except ImportError: +- rpdb2._print(STR_WXPYTHON_ERROR_MSG, sys.__stderr__) +- myErrorMsgDialog( STR_WXPYTHON_ERROR_TITLE, STR_WXPYTHON_ERROR_MSG ) +- sys.exit(1) +- +- global WXVER +- if RUNNING_UNDER_PY2: +- WXVER = WXVER_PYTHON2 +- else: +- WXVER = WXVER_PYTHON3 +- wxversion.ensureMinimal(WXVER) +-else: +- myErrorMsgDialog( STR_BAD_PYTHON_ERROR_TITLE, STR_BAD_PYTHON_ERROR_MSG ) ++try: ++ import wx ++except ImportError: ++ rpdb2._print(STR_WXPYTHON_ERROR_MSG, sys.__stderr__) ++ myErrorMsgDialog( STR_WXPYTHON_ERROR_TITLE, STR_WXPYTHON_ERROR_MSG ) + sys.exit(1) + +-import wx +- +-assert wx.VERSION_STRING >= WXVER ++assert wx.VERSION_STRING >= MIN_WXVER + + import wx.lib.wxpTag +-import wx.gizmos as wx_dataview_or_gizmos ++if RUNNING_UNDER_PY3: ++ import wx.dataview as wx_dataview_or_gizmos ++else: ++ import wx.gizmos as wx_dataview_or_gizmos + + import wx.html + +@@ -378,8 +373,12 @@ import wx.stc as stc + + import webbrowser + import traceback +-from cStringIO import StringIO +-import Queue ++if RUNNING_UNDER_PY2: ++ from cStringIO import StringIO ++ from Queue import Queue ++else: ++ from io import StringIO ++ from queue import Queue + + import threading + import tempfile +@@ -543,10 +542,6 @@ TLC_HEADER_NAME = "Name" + TLC_HEADER_REPR = "Repr" + TLC_HEADER_TYPE = "Type" + +-VERSION = (1, 5, 0, 0, 'Tychod') +-WINPDB_TITLE = "Winpdb Reborn 1.5.0" +-WINPDB_VERSION = "WINPDB_REBORN_1_5_0" +- + WINPDB_SIZE = "winpdb_size" + WINPDB_MAXIMIZE = "winpdb_maximize" + SPLITTER_1_POS = "splitter_1_pos" +@@ -568,7 +563,14 @@ WINPDB_SETTINGS_DEFAULT = { + } + + AC_CHAR = "\t" +-AC_EXIT = "Alt-X" ++AC_PWD = "Ctrl-P" ++AC_LAUNCH = "Ctrl-L" ++AC_ATTACH = "Ctrl-A" ++AC_DETACH = "Ctrl-D" ++AC_STOP = "Ctrl-S" ++AC_RESTART = "Ctrl-R" ++AC_OPEN = "Ctrl-O" ++AC_EXIT = "Ctrl-Q" + AC_ANALYZE = "F3" + AC_BREAK = "F4" + AC_GO = "F5" +@@ -583,13 +585,13 @@ ML_SEPARATOR = "" + ML_ROOT = "" + + ML_FILE = "&File" +-ML_PWD = "&Password" +-ML_LAUNCH = "&Launch" +-ML_ATTACH = "&Attach" +-ML_DETACH = "&Detach" +-ML_STOP = "&Stop" +-ML_RESTART = "&Restart" +-ML_OPEN = "&Open Source" ++ML_PWD = "&Password" + AC_CHAR + AC_PWD ++ML_LAUNCH = "&Launch" + AC_CHAR + AC_LAUNCH ++ML_ATTACH = "&Attach" + AC_CHAR + AC_ATTACH ++ML_DETACH = "&Detach" + AC_CHAR + AC_DETACH ++ML_STOP = "&Stop" + AC_CHAR + AC_STOP ++ML_RESTART = "&Restart" + AC_CHAR + AC_RESTART ++ML_OPEN = "&Open Source" + AC_CHAR + AC_OPEN + ML_EXIT = "E&xit" + AC_CHAR + AC_EXIT + + ML_BREAKPOINTS = "&Breakpoints" +@@ -758,7 +760,7 @@ ABOUT_HTML_SUFFIX = """ + + WEBSITE_URL = "https://github.com/bluebird75/winpdb" + SUPPORT_URL = "https://github.com/bluebird75/winpdb/issues" +-DOCS_URL = "http://www.winpdb.org/?page_id=5" ++DOCS_URL = "http://www.winpdb.org/?page_id=5" + EXT_DOCS_URL = "http://www.winpdb.org/?page_id=17" + UPDATES_URL = "https://github.com/bluebird75/winpdb" + +@@ -833,13 +835,13 @@ def open_new(url): + webbrowser.open_new(url) + + ++from io import BytesIO + + def image_from_base64(str_b64): + b = rpdb2.as_bytes(str_b64) +- s = base64.decodestring(b) +- stream = StringIO(s) +- image = wx.ImageFromStream(stream) +- ++ s = base64.decodebytes(b) ++ stream = BytesIO(s) ++ image = wx.Image(stream) + return image + + +@@ -915,8 +917,8 @@ class CMenuBar: + self.m_cascades = {} + + def init_menubar(self, resource): +- if 'wxMac' in wx.PlatformInfo: +- wx.MenuBar.SetAutoWindowMenu(False) ++ # if 'wxMac' in wx.PlatformInfo: ++ # wx.MenuBar.SetAutoWindowMenu(False) + + self.m_menubar = wx.MenuBar() + +@@ -936,7 +938,7 @@ class CMenuBar: + if parent_label == ML_ROOT: + parent.Append(child, e) + else: +- parent.AppendMenu(wx.NewId(), e, child) ++ parent.AppendMenu(wx.ID_ANY, e, child) + self.m_encapsulating_menu_items[e] = parent + + self.m_cascades[e] = child +@@ -976,7 +978,7 @@ class CMenuBar: + + def add_menu_item(self, menu_label, item_label, command): + if not g_fUnicode: +- item_label = rpdb2.as_string(item_label, wx.GetDefaultPyEncoding()) ++ item_label = rpdb2.as_string(item_label) + + parent = self.m_cascades[menu_label] + item = parent.Append(-1, item_label) +@@ -987,7 +989,7 @@ class CMenuBar: + + while parent.GetMenuItemCount() > 0: + i = parent.FindItemByPosition(0) +- parent.DeleteItem(i) ++ parent.DestroyItem(i) + + + +@@ -1009,30 +1011,32 @@ class CToolBar: + continue + + command = e[COMMAND] +- id = wx.NewId() ++ id = wx.Window.NewControlId() + + if TEXT in e: + button = wx.Button(self.m_toolbar, id, e[TEXT], style = wx.NO_BORDER) +- button.SetToolTipString(item_label) ++ button.SetToolTip(item_label) + self.m_toolbar.AddControl(button) + self.m_items[item_label] = {ID: id} +- wx.EVT_BUTTON(self.m_toolbar, id, command) ++ # wx.EVT_BUTTON(self.m_toolbar, id, command) ++ self.Bind( wx.EVT_BUTTON, command, id = id) + continue + + if DATA in e: + image = image_from_base64(e[DATA]) +- bitmap = wx.BitmapFromImage(image) ++ bitmap = wx.Bitmap(image) + + if DATA2 in e: + image2 = image_from_base64(e[DATA2]) +- bitmap2 = wx.BitmapFromImage(image2) +- self.m_toolbar.AddSimpleTool(id, bitmap, item_label, isToggle = True) ++ bitmap2 = wx.Bitmap(image2) ++ self.m_toolbar.AddTool(id, '', bitmap, wx.NullBitmap, wx.ITEM_CHECK, item_label, '' ) ++ + self.m_items[item_label] = {ID: id, DATA: bitmap, DATA2: bitmap2} + self.Bind(wx.EVT_TOOL, command, id = id) + self.Bind(wx.EVT_TOOL, self.OnToggleTool, id = id) + + else: +- self.m_toolbar.AddSimpleTool(id, bitmap, item_label) ++ self.m_toolbar.AddTool(id, '', bitmap, wx.NullBitmap, wx.ITEM_NORMAL, item_label ) + self.m_items[item_label] = {ID: id} + self.Bind(wx.EVT_TOOL, command, id = id) + +@@ -1123,7 +1127,7 @@ class CStatusBar: + self.m_formats = [e.get(FORMAT, "") for e in resource] + self.m_keys = [e.get(KEYS, []) for e in resource] + +- self.m_statusbar = self.CreateStatusBar(1, wx.ST_SIZEGRIP) ++ self.m_statusbar = self.CreateStatusBar(1, wx.STB_SIZEGRIP) + self.m_statusbar.SetFieldsCount(len(self.m_widths)) + self.m_statusbar.SetStatusWidths(self.m_widths) + +@@ -1150,7 +1154,7 @@ class CStatusBar: + return + + image = image_from_base64(data) +- bitmap = wx.BitmapFromImage(image) ++ bitmap = wx.Bitmap(image) + p = wx.Panel(self.m_statusbar) + sb = wx.StaticBitmap(p, -1, bitmap) + +@@ -1161,7 +1165,7 @@ class CStatusBar: + self.m_bitmaps[i][0].Hide() + else: + image = image_from_base64(data) +- bitmap = wx.BitmapFromImage(image) ++ bitmap = wx.Bitmap(image) + + self.m_bitmaps[i][1].SetBitmap(bitmap) + self.m_bitmaps[i][0].Show() +@@ -1175,8 +1179,8 @@ class CStatusBar: + p.SetPosition((rect.x + 2, rect.y + 2)) + s = sb.GetSize() + sb.SetSize((s[0], rect.height - 4)) +- sb.SetToolTipString(tooltip) +- p.SetToolTipString(tooltip) ++ sb.SetToolTip(tooltip) ++ p.SetToolTip(tooltip) + p.SetClientSize(sb.GetSize()) + + self.sizeChanged = False +@@ -1266,7 +1270,7 @@ class CJobs: + + + def set_cursor(self, id): +- cursor = wx.StockCursor(id) ++ cursor = wx.Cursor(id) + self.SetCursor(cursor) + + +@@ -1379,19 +1383,16 @@ class CWinpdbWindow(wx.Frame, CMainWindo + self.SetLayoutDirection(1) + + image = image_from_base64(BASE64_ICON_16) +- bitmap = wx.BitmapFromImage(image) +- icon16 = wx.EmptyIcon() +- icon16.CopyFromBitmap(bitmap) ++ bitmap = wx.Bitmap(image) ++ icon16 = wx.Icon(bitmap) + + image = image_from_base64(BASE64_ICON_32) +- bitmap = wx.BitmapFromImage(image) +- icon32 = wx.EmptyIcon() +- icon32.CopyFromBitmap(bitmap) ++ bitmap = wx.Bitmap(image) ++ icon32 = wx.Icon(bitmap) + + image = image_from_base64(BASE64_ICON_64) +- bitmap = wx.BitmapFromImage(image) +- icon64 = wx.EmptyIcon() +- icon64.CopyFromBitmap(bitmap) ++ bitmap = wx.Bitmap(image) ++ icon64 = wx.Icon(bitmap) + + ibundle = wx.IconBundle() + ibundle.AddIcon(icon16) +@@ -1522,7 +1523,7 @@ class CWinpdbWindow(wx.Frame, CMainWindo + + self.m_code_viewer = CCodeViewer(self.m_splitterh3, style = wx.NO_BORDER | wx.TAB_TRAVERSAL, session_manager = self.m_session_manager, source_manager = self.m_source_manager, notify_filename = self.do_notify_filename) + +- self.m_console = CConsole(self.m_splitterh3, style = wx.NO_BORDER | wx.TAB_TRAVERSAL, session_manager = self.m_session_manager, exit_command = self.do_exit) ++ self.m_console = CConsole(self.m_splitterh3, style = wx.NO_BORDER | wx.TAB_TRAVERSAL, session_manager = self.m_session_manager, exit_command = self.do_exit, name = 'console') + + self.m_splitterh2.SplitHorizontally(self.m_namespace_viewer, self.m_threads_viewer) + self.m_splitterh1.SplitHorizontally(self.m_splitterh2, self.m_stack_viewer) +@@ -1680,7 +1681,7 @@ class CWinpdbWindow(wx.Frame, CMainWindo + # + + def OnFrameSelected(self, event): +- self.m_async_sm.set_frame_index(event.m_itemIndex) ++ self.m_async_sm.set_frame_index(event.Index) + + + def update_frame(self, event): +@@ -1697,11 +1698,17 @@ class CWinpdbWindow(wx.Frame, CMainWindo + # + + def update_stack(self, event): ++ '''Arguments: ++ - event: a CEventStack, containing a list of thread debugging states ++ ''' + self.m_stack = event.m_stack + wx.CallAfter(self.do_update_stack, event.m_stack) + + + def do_update_stack(self, _stack): ++ '''Arguments: ++ _stack: list of thread debugging states ++ ''' + self.m_stack = _stack + + self.m_stack_viewer.update_stack_list(self.m_stack) +@@ -1812,7 +1819,7 @@ class CWinpdbWindow(wx.Frame, CMainWindo + def notify_conflicting_modules(self, event): + s = ', '.join(event.m_modules_list) + if not g_fUnicode: +- s = rpdb2.as_string(s, wx.GetDefaultPyEncoding()) ++ s = rpdb2.as_string(s) + + dlg = wx.MessageDialog(self, rpdb2.STR_CONFLICTING_MODULES % s, MSG_WARNING_TITLE, wx.OK | wx.ICON_WARNING) + dlg.ShowModal() +@@ -1883,7 +1890,7 @@ class CWinpdbWindow(wx.Frame, CMainWindo + + + def set_cursor(self, id): +- cursor = wx.StockCursor(id) ++ cursor = wx.Cursor(id) + self.SetCursor(cursor) + self.m_code_viewer.set_cursor(id) + self.m_threads_viewer.set_cursor(id) +@@ -2269,7 +2276,7 @@ class CWinpdbApp(wx.App): + + def OnExit(self): + self.m_settings.save_settings() +- ++ return super().OnExit() + + + class CCaption(wx.Panel): +@@ -2278,8 +2285,8 @@ class CCaption(wx.Panel): + + wx.Panel.__init__(self, *args, **kwargs) + +- self.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) +- self.SetForegroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_CAPTIONTEXT)) ++ self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) ++ self.SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_CAPTIONTEXT)) + + sizerv = wx.BoxSizer(wx.VERTICAL) + +@@ -2287,7 +2294,7 @@ class CCaption(wx.Panel): + sizerv.Add(self.m_static_text, 0, wx.EXPAND | wx.ALL, 2) + + font = self.m_static_text.GetFont() +- new_font = wx.Font(pointSize = font.GetPointSize(), family = font.GetFamily(), style = font.GetStyle(), weight = wx.BOLD, face = font.GetFaceName()) ++ new_font = wx.Font(font.GetPointSize(), font.GetFamily(), font.GetStyle(), wx.BOLD, font.GetUnderlined(), font.GetFaceName()) + self.m_static_text.SetFont(new_font) + + self.SetSizer(sizerv) +@@ -2305,7 +2312,7 @@ class CCaptionManager: + def OnGainFocus(self, event): + self.m_n_focus += 1 + +- self.m_caption.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_ACTIVECAPTION)) ++ self.m_caption.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_ACTIVECAPTION)) + self.m_caption.Refresh() + event.Skip() + +@@ -2317,11 +2324,9 @@ class CCaptionManager: + # + # Event may get sent after the object has been deleted. + # +- try: +- self.m_caption.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) ++ if self.m_caption: ++ self.m_caption.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)) + self.m_caption.Refresh() +- except wx.PyDeadObjectError: +- pass + + event.Skip() + +@@ -2445,6 +2450,20 @@ class CStyledViewer(stc.StyledTextCtrl): + self.GetParent().GetEventHandler().ProcessEvent(ne) + event.Skip() + return ++ elif key_code == 74: # J ++ (_, col_no, line_no) = self.PositionToXY(self.GetInsertionPoint()) ++ console = wx.FindWindowByName('console') ++ value = rpdb2.as_unicode('jump %s' % (line_no + 1)) ++ console.m_queue.put(value + '\n') ++ elif key_code == 86: # V ++ value = self.GetSelectedText() ++ if value: ++ value = 'eval ' + value ++ console = wx.FindWindowByName('console') ++ console.m_console_out.AppendText(CONSOLE_PROMPT + value + '\n') ++ # console.set_history(value) ++ value = rpdb2.as_unicode(value) ++ console.m_queue.put(value + '\n') + + event.Skip() + +@@ -2513,9 +2532,9 @@ class CSourceManager: + _time = 0 + _filename = r[rpdb2.DICT_KEY_FILENAME] + source_lines = r[rpdb2.DICT_KEY_LINES] +- source = string.join(source_lines, '') ++ source = ''.join(source_lines) + if not g_fUnicode: +- source = rpdb2.as_string(source, wx.GetDefaultPyEncoding()) ++ source = rpdb2.as_string(source) + + elif t == rpdb2.NotPythonSource and fComplain: + dlg = wx.MessageDialog(None, MSG_ERROR_FILE_NOT_PYTHON % (filename, ), MSG_WARNING_TITLE, wx.OK | wx.ICON_WARNING) +@@ -2539,7 +2558,7 @@ class CSourceManager: + _filename = filename + source = STR_FILE_LOAD_ERROR2 % (filename, ) + if not g_fUnicode: +- source = rpdb2.as_string(source, wx.GetDefaultPyEncoding()) ++ source = rpdb2.as_string(source) + + else: + rpdb2.print_debug('get_source_file() returned the following error: %s' % repr(t)) +@@ -2548,7 +2567,7 @@ class CSourceManager: + _filename = filename + source = STR_FILE_LOAD_ERROR2 % (filename, ) + if not g_fUnicode: +- source = rpdb2.as_string(source, wx.GetDefaultPyEncoding()) ++ source = rpdb2.as_string(source) + + try: + self.m_lock.acquire() +@@ -2796,7 +2815,7 @@ class CCodeViewer(wx.Panel, CJobs, CCapt + + displayed_filename = _filename + if not g_fUnicode: +- displayed_filename = rpdb2.as_string(displayed_filename, wx.GetDefaultPyEncoding()) ++ displayed_filename = rpdb2.as_string(displayed_filename) + + label = CAPTION_SOURCE + ' ' + rpdb2.clip_filename(displayed_filename) + self.m_caption.m_static_text.SetLabel(label) +@@ -2839,7 +2858,7 @@ class CCodeViewer(wx.Panel, CJobs, CCapt + + displayed_filename = filename + if not g_fUnicode: +- displayed_filename = rpdb2.as_string(displayed_filename, wx.GetDefaultPyEncoding()) ++ displayed_filename = rpdb2.as_string(displayed_filename) + + label = CAPTION_SOURCE + ' ' + rpdb2.clip_filename(displayed_filename) + self.m_caption.m_static_text.SetLabel(label) +@@ -2932,7 +2951,7 @@ class CConsole(wx.Panel, CCaptionManager + + self.m_console = rpdb2.CConsole(self.m_session_manager, stdin = self, stdout = self, fSplit = True) + +- self.m_queue = Queue.Queue() ++ self.m_queue = Queue() + + _sizerv = wx.BoxSizer(wx.VERTICAL) + sizerv = wx.BoxSizer(wx.VERTICAL) +@@ -2968,17 +2987,18 @@ class CConsole(wx.Panel, CCaptionManager + def OnConsoleOutKeyPressed(self, event): + key_code = event.GetKeyCode() + +- if key_code != wx.WXK_TAB: +- return +- +- forward = not event.ShiftDown() +- ne = wx.NavigationKeyEvent() +- ne.SetDirection(forward) +- ne.SetCurrentFocus(self.m_console_out) +- ne.SetEventObject(self.m_console_out) +- self.GetEventHandler().ProcessEvent(ne) ++ if key_code == wx.WXK_TAB: ++ forward = not event.ShiftDown() ++ ne = wx.NavigationKeyEvent() ++ ne.SetDirection(forward) ++ ne.SetCurrentFocus(self.m_console_out) ++ ne.SetEventObject(self.m_console_out) ++ self.GetEventHandler().ProcessEvent(ne) + +- event.Skip() ++ event.Skip() ++ ++ elif (key_code == 67) and event.ControlDown(): # Ctrl+C ++ value = self.m_console_out.Copy() + + + def set_focus(self): +@@ -2999,7 +3019,7 @@ class CConsole(wx.Panel, CCaptionManager + face = "Courier" + point_size = font.GetPointSize() + +- new_font = wx.Font(pointSize = point_size, family = font.GetFamily(), style = font.GetStyle(), weight = font.GetWeight(), face = face) ++ new_font = wx.Font(point_size, font.GetFamily(), font.GetStyle(), font.GetWeight(), font.GetUnderlined(), face) + ctrl.SetFont(new_font) + + +@@ -3016,7 +3036,7 @@ class CConsole(wx.Panel, CCaptionManager + + def write(self, _str): + if not g_fUnicode: +- _str = rpdb2.as_string(_str, wx.GetDefaultPyEncoding()) ++ _str = rpdb2.as_string(_str) + else: + _str = rpdb2.as_unicode(_str, self.encoding) + +@@ -3031,7 +3051,7 @@ class CConsole(wx.Panel, CCaptionManager + if len(s) == 0: + break + +- wx.CallAfter(self.m_console_out.write, _str[1:]) ++ wx.CallAfter(self.m_console_out.AppendText, _str[1:]) + + + def flush(self): +@@ -3092,7 +3112,7 @@ class CConsole(wx.Panel, CCaptionManager + return + + if len(completions) > COMPLETIONS_WARNING_THRESHOLD and not fForce: +- self.m_console_out.write(COMPLETIONS_WARNING % len(completions)) ++ self.m_console_out.AppendText(COMPLETIONS_WARNING % len(completions)) + self.m_fcompletions_warning = True + return + +@@ -3122,7 +3142,7 @@ class CConsole(wx.Panel, CCaptionManager + lines = textwrap.wrap(out, 60) + text = '\n'.join(lines) + '\n' + +- self.m_console_out.write(CONSOLE_COMPLETIONS % text) ++ self.m_console_out.AppendText(CONSOLE_COMPLETIONS % text) + + + def OnSendText(self, event): +@@ -3131,14 +3151,14 @@ class CConsole(wx.Panel, CCaptionManager + value = self.m_console_in.GetValue() + self.set_history(value) + +- self.m_console_out.write(CONSOLE_PROMPT + value + '\n') ++ self.m_console_out.AppendText(CONSOLE_PROMPT + value + '\n') + self.m_console_in.Clear() + + if value in ['exit', 'EOF']: + self.m_exit_command() + return + +- value = rpdb2.as_unicode(value, wx.GetDefaultPyEncoding()) ++ value = rpdb2.as_unicode(value) + + self.m_queue.put(value + '\n') + +@@ -3263,7 +3283,7 @@ class CThreadsViewer(wx.Panel, CCaptionM + + + def set_cursor(self, id): +- cursor = wx.StockCursor(id) ++ cursor = wx.Cursor(id) + self.SetCursor(cursor) + self.m_threads.SetCursor(cursor) + +@@ -3293,10 +3313,10 @@ class CThreadsViewer(wx.Panel, CCaptionM + return -1 + + if not g_fUnicode: +- thread_name = rpdb2.as_string(thread_name, wx.GetDefaultPyEncoding()) ++ thread_name = rpdb2.as_string(thread_name) + +- self.m_threads.SetStringItem(index, 1, thread_name) +- self.m_threads.SetStringItem(index, 2, [rpdb2.STATE_RUNNING, rpdb2.STR_STATE_BROKEN][fBroken]) ++ self.m_threads.SetItem(index, 1, thread_name) ++ self.m_threads.SetItem(index, 2, [rpdb2.STATE_RUNNING, rpdb2.STR_STATE_BROKEN][fBroken]) + + return index + +@@ -3313,12 +3333,12 @@ class CThreadsViewer(wx.Panel, CCaptionM + tid = s[rpdb2.DICT_KEY_TID] + name = s[rpdb2.DICT_KEY_NAME] + if not g_fUnicode: +- name = rpdb2.as_string(name, wx.GetDefaultPyEncoding()) ++ name = rpdb2.as_string(name) + + fBroken = s[rpdb2.DICT_KEY_BROKEN] +- index = self.m_threads.InsertStringItem(sys.maxint, repr(tid)) +- self.m_threads.SetStringItem(index, 1, name) +- self.m_threads.SetStringItem(index, 2, [rpdb2.STATE_RUNNING, rpdb2.STR_STATE_BROKEN][fBroken]) ++ index = self.m_threads.InsertItem( i, repr(tid)) ++ self.m_threads.SetItem(index, 1, name) ++ self.m_threads.SetItem(index, 2, [rpdb2.STATE_RUNNING, rpdb2.STR_STATE_BROKEN][fBroken]) + self.m_threads.SetItemData(index, tid) + if tid == current_thread: + j = i +@@ -3333,7 +3353,7 @@ class CThreadsViewer(wx.Panel, CCaptionM + def OnThreadSelected(self, event): + if self.m_suppress_recursion == 0: + self.m_suppress_recursion += 1 +- index = event.m_itemIndex ++ index = event.Index + tid = self.m_threads.GetItemData(index) + self.m_select_command(tid) + else: +@@ -3341,7 +3361,35 @@ class CThreadsViewer(wx.Panel, CCaptionM + + event.Skip() + ++gItemsWithChildren = {} ++ ++# Support function for the porting to WxPython 4 ++def ItemHasChildren(tree, item): ++ '''Return True if the _item_ of TreeListCtrl has children.''' ++ if item in gItemsWithChildren: ++ return gItemsWithChildren[item] ++ ++ firstChild = tree.GetFirstChild(item) ++ if firstChild and firstChild.IsOk(): ++ print('ItemHasChildren( %s) -> True' % (ItemToStr(tree, item))) ++ return True ++ ++ print('ItemHasChildren( %s) -> False' % (ItemToStr(tree, item))) ++ return False + ++def SetItemHasChildren(tree, item, state): ++ '''Stub function, not available in WxPython 4. ++ It used to display an expand symbol depending on _state_ so that the ++ children list can be lazily expanded.''' ++ print('SetItemHasChildren( %s, %s)' % (ItemToStr(tree, item), state )) ++ gItemsWithChildren[item] = state ++ pass ++ ++def ItemToStr(tree, item): ++ s = 'Item<"%s","%s",%s>' % (tree.GetItemText(item,1), tree.GetItemText(item,2), tree.GetItemData(item)) ++ return s ++ ++import pprint + + class CNamespacePanel(wx.Panel, CJobs): + def __init__(self, *args, **kwargs): +@@ -3363,14 +3411,14 @@ class CNamespacePanel(wx.Panel, CJobs): + + sizerv = wx.BoxSizer(wx.VERTICAL) + +- self.m_tree = wx_dataview_or_gizmos.TreeListCtrl(self, -1, style = wx.TR_HIDE_ROOT | wx.TR_DEFAULT_STYLE | wx.TR_FULL_ROW_HIGHLIGHT | wx.NO_BORDER) ++ self.m_tree = wx_dataview_or_gizmos.TreeListCtrl(self, -1 ) # note: default style is perfect for us + +- self.m_tree.AddColumn(TLC_HEADER_NAME) +- self.m_tree.AddColumn(TLC_HEADER_TYPE) +- self.m_tree.AddColumn(TLC_HEADER_REPR) ++ self.m_tree.AppendColumn(TLC_HEADER_NAME) ++ self.m_tree.AppendColumn(TLC_HEADER_TYPE) ++ self.m_tree.AppendColumn(TLC_HEADER_REPR) + self.m_tree.SetColumnWidth(2, 800) +- self.m_tree.SetMainColumn(0) +- self.m_tree.SetLineSpacing(0) ++ self.m_tree.SetSortColumn(0) ++ # self.m_tree.SetLineSpacing(0) + + self.m_tree.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.OnItemExpanding) + self.m_tree.Bind(wx.EVT_TREE_ITEM_COLLAPSING, self.OnItemCollapsing) +@@ -3401,13 +3449,14 @@ class CNamespacePanel(wx.Panel, CJobs): + + + def bind_caption(self, caption_manager): +- w = self.m_tree.GetMainWindow() ++ # w = self.m_tree.GetMainWindow() ++ w = self.m_tree.GetView() + caption_manager.bind_caption(w) + + + def OnItemActivated(self, event): + item = event.GetItem() +- (expr, is_valid) = self.m_tree.GetPyData(item) ++ (expr, is_valid) = self.m_tree.GetItemData(item) + if expr in [STR_NAMESPACE_LOADING, STR_NAMESPACE_DEADLOCK, rpdb2.STR_MAX_NAMESPACE_WARNING_TITLE]: + return + +@@ -3434,6 +3483,7 @@ class CNamespacePanel(wx.Panel, CJobs): + + + def callback_execute(self, r, exc_info): ++ print('callback_execute(%s, %s)' % (r, exc_info) ) + (t, v, tb) = exc_info + + if t != None: +@@ -3470,30 +3520,51 @@ class CNamespacePanel(wx.Panel, CJobs): + + + def GetChildrenCount(self, item): +- n = self.m_tree.GetChildrenCount(item) +- if n != 1: +- return n ++ # n = self.m_tree.GetChildrenCount(item) ++ # n = self.m_tree.GetItemCount(item) ++ # if n != 1: ++ # print('GetChildrenCount(item=%s) -> %d' % (ItemToStr(self.m_tree, item), n) ) ++ # return n ++ ++ children = self.get_children(item) ++ if len(children) == 0 or len(children) > 1: ++ return len(children) + +- child = self.get_children(item)[0] +- (expr, is_valid) = self.m_tree.GetPyData(child) ++ child = children[0] ++ (expr, is_valid) = self.m_tree.GetItemData(child) + + if expr in [STR_NAMESPACE_LOADING, STR_NAMESPACE_DEADLOCK]: ++ print('GetChildrenCount(item=%s) -> %d' % (ItemToStr(self.m_tree, item), 0) ) + return 0 + ++ print('GetChildrenCount(item=%s) -> %d' % (ItemToStr(self.m_tree, item), 1)) + return 1 + + + def expand_item(self, item, _map, froot = False, fskip_expansion_check = False): +- if not self.m_tree.ItemHasChildren(item): ++ '''Arguments: ++ :param item: python expression ++ :param _map: list of dictionnary of expression content, see CSessionManager.get_namespace() for details ++ :param froot: boolen, True if it is the root item ++ :param fskip_expansion_check: ++ :return: ++ ''' ++ print('expand_item(item=%s, _map=%s, froot=%s, fskip_expansion=%s)' % ++ (ItemToStr(self.m_tree, item), pprint.pformat(_map, 4), froot, fskip_expansion_check)) ++ if not ItemHasChildren(self.m_tree, item): ++ print('expand_item() -> no action') + return + ++ # skip expansion if item is already expanded + if not froot and not fskip_expansion_check and self.m_tree.IsExpanded(item): ++ print('expand_item() -> no action') + return + + if self.GetChildrenCount(item) > 0: ++ print('expand_item() -> no action') + return + +- (expr, is_valid) = self.m_tree.GetPyData(item) ++ (expr, is_valid) = self.m_tree.GetItemData(item) + + l = [e for e in _map if e.get(rpdb2.DICT_KEY_EXPR, None) == expr] + if l == []: +@@ -3504,10 +3575,12 @@ class CNamespacePanel(wx.Panel, CJobs): + return + + if rpdb2.DICT_KEY_ERROR in _r: ++ print('expand_item() -> no action due to error') + return + + if _r[rpdb2.DICT_KEY_N_SUBNODES] == 0: +- self.m_tree.SetItemHasChildren(item, False) ++ print('expand_item() -> no subnodes, setting HasChildren to false') ++ SetItemHasChildren(self.m_tree, item, False) + return + + # +@@ -3516,6 +3589,7 @@ class CNamespacePanel(wx.Panel, CJobs): + # In case of a list, no sorting is needed. + # + ++ print('expand_item() -> filling subnodes, setting HasChildren to true & expand item') + snl = _r[rpdb2.DICT_KEY_SUBNODES] + + for r in snl: +@@ -3524,42 +3598,44 @@ class CNamespacePanel(wx.Panel, CJobs): + _type = r[rpdb2.DICT_KEY_TYPE] + _repr = r[rpdb2.DICT_KEY_REPR] + else: +- _name = rpdb2.as_string(r[rpdb2.DICT_KEY_NAME], wx.GetDefaultPyEncoding()) +- _type = rpdb2.as_string(r[rpdb2.DICT_KEY_TYPE], wx.GetDefaultPyEncoding()) +- _repr = rpdb2.as_string(r[rpdb2.DICT_KEY_REPR], wx.GetDefaultPyEncoding()) ++ _name = rpdb2.as_string(r[rpdb2.DICT_KEY_NAME]) ++ _type = rpdb2.as_string(r[rpdb2.DICT_KEY_TYPE]) ++ _repr = rpdb2.as_string(r[rpdb2.DICT_KEY_REPR]) + + identation = '' + #identation = ['', ' '][os.name == rpdb2.POSIX and r[rpdb2.DICT_KEY_N_SUBNODES] == 0] + + child = self.m_tree.AppendItem(item, identation + _name) +- self.m_tree.SetItemText(child, ' ' + _repr, 2) +- self.m_tree.SetItemText(child, ' ' + _type, 1) +- self.m_tree.SetItemPyData(child, (r[rpdb2.DICT_KEY_EXPR], r[rpdb2.DICT_KEY_IS_VALID])) +- self.m_tree.SetItemHasChildren(child, (r[rpdb2.DICT_KEY_N_SUBNODES] > 0)) ++ self.m_tree.SetItemText(child, 2, ' ' + _repr) ++ self.m_tree.SetItemText(child, 1, ' ' + _type) ++ self.m_tree.SetItemData(child, (r[rpdb2.DICT_KEY_EXPR], r[rpdb2.DICT_KEY_IS_VALID])) ++ SetItemHasChildren(self.m_tree, child, (r[rpdb2.DICT_KEY_N_SUBNODES] > 0)) + + self.m_tree.Expand(item) + + + def OnItemExpanding(self, event): + item = event.GetItem() ++ print('OnItemExpanding(item=%s)' % ItemToStr(item)) + +- if not self.m_tree.ItemHasChildren(item): ++ if not ItemHasChildren(self.m_tree, item): + event.Skip() + return + + if self.GetChildrenCount(item) > 0: + event.Skip() +- self.m_tree.Refresh(); ++ self.m_tree.Refresh() + return + ++ print('OnItemExpanding() - repopulathing children') + self.m_tree.DeleteChildren(item) + + child = self.m_tree.AppendItem(item, STR_NAMESPACE_LOADING) +- self.m_tree.SetItemText(child, ' ' + STR_NAMESPACE_LOADING, 2) +- self.m_tree.SetItemText(child, ' ' + STR_NAMESPACE_LOADING, 1) +- self.m_tree.SetItemPyData(child, (STR_NAMESPACE_LOADING, False)) ++ self.m_tree.SetItemText(child, 2, ' ' + STR_NAMESPACE_LOADING) ++ self.m_tree.SetItemText(child, 1, ' ' + STR_NAMESPACE_LOADING) ++ self.m_tree.SetItemData(child, (STR_NAMESPACE_LOADING, False)) + +- (expr, is_valid) = self.m_tree.GetPyData(item) ++ (expr, is_valid) = self.m_tree.GetItemData(item) + + f = lambda r, exc_info: self.callback_ns(r, exc_info, expr) + self.m_async_sm.with_callback(f).get_namespace([(expr, True)], self.m_filter_level) +@@ -3586,9 +3662,9 @@ class CNamespacePanel(wx.Panel, CJobs): + + if t != None or r is None or len(r) == 0: + child = self.m_tree.AppendItem(item, STR_NAMESPACE_DEADLOCK) +- self.m_tree.SetItemText(child, ' ' + STR_NAMESPACE_DEADLOCK, 2) +- self.m_tree.SetItemText(child, ' ' + STR_NAMESPACE_DEADLOCK, 1) +- self.m_tree.SetItemPyData(child, (STR_NAMESPACE_DEADLOCK, False)) ++ self.m_tree.SetItemText(child, 2, ' ' + STR_NAMESPACE_DEADLOCK) ++ self.m_tree.SetItemText(child, 1, ' ' + STR_NAMESPACE_DEADLOCK) ++ self.m_tree.SetItemData(child, (STR_NAMESPACE_DEADLOCK, False)) + self.m_tree.Expand(item) + + if freselect_child: +@@ -3608,7 +3684,7 @@ class CNamespacePanel(wx.Panel, CJobs): + def find_item(self, expr): + item = self.m_tree.GetRootItem() + while item: +- (expr2, is_valid) = self.m_tree.GetPyData(item) ++ (expr2, is_valid) = self.m_tree.GetItemData(item) + if expr2 == expr: + return item + +@@ -3618,18 +3694,20 @@ class CNamespacePanel(wx.Panel, CJobs): + + + def get_children(self, item): +- (child, cookie) = self.m_tree.GetFirstChild(item) ++ print('get_children(%s)' % (ItemToStr(self.m_tree, item))) ++ (child, cookie) = self.m_tree.GetFirstChild(item), 'cookie' + cl = [] + + while child and child.IsOk(): + cl.append(child) +- (child, cookie) = self.m_tree.GetNextChild(item, cookie) ++ child = self.m_tree.GetNextSibling(item) + + return cl + + + def get_expression_list(self): +- if self.m_tree.GetCount() == 0: ++ print('get_expession_list()') ++ if self.m_tree.GetFirstItem().IsOk() == False: + return None + + item = self.m_tree.GetRootItem() +@@ -3639,7 +3717,7 @@ class CNamespacePanel(wx.Panel, CJobs): + + while len(s) > 0: + item = s.pop(0) +- (expr, is_valid) = self.m_tree.GetPyData(item) ++ (expr, is_valid) = self.m_tree.GetItemData(item) + fExpand = self.m_tree.IsExpanded(item) and self.GetChildrenCount(item) > 0 + if not fExpand: + continue +@@ -3648,10 +3726,19 @@ class CNamespacePanel(wx.Panel, CJobs): + items = self.get_children(item) + s = items + s + ++ print('get_expession_list() -> el=%s, s=%s' % (el, s)) + return el + + + def update_namespace(self, key, el): ++ '''Arguments: ++ - key: unique value identifying a namespace ++ - el: namespace content ++ ++ Returns: ++ - (previous key, previous element) ++ ''' ++ print('update_namespace(key=%s, el=%s)' % (key, el)) + old_key = self.m_key + old_el = self.get_expression_list() + +@@ -3660,7 +3747,7 @@ class CNamespacePanel(wx.Panel, CJobs): + + self.m_key = key + +- if el is None: ++ if not el: + el = [(self.get_root_expr(), True)] + + self.post(el, self.m_filter_level) +@@ -3699,21 +3786,28 @@ class CNamespacePanel(wx.Panel, CJobs): + + + def do_update_namespace(self, rl): ++ '''Arguments: ++ rl: list of dictionnaries, each element of the list describes a python expression ++ ++ See CSessionManager.get_namespace() for more details''' ++ print('do_update_namespace(rl=%s)' % pprint.pformat(rl, 4) ) + self.m_tree.DeleteAllItems() + +- root = self.m_tree.AddRoot('root') +- self.m_tree.SetItemPyData(root, (self.get_root_expr(), False)) +- self.m_tree.SetItemHasChildren(root, True) ++ # root = self.m_tree.AddRoot('root') ++ root = self.m_tree.GetRootItem() ++ self.m_tree.SetItemData(root, (self.get_root_expr(), False)) ++ SetItemHasChildren(self.m_tree, root, True) + + s = [root] + + while len(s) > 0: + item = s.pop(0) ++ print('do_update_namespace() - populating item %s' % ItemToStr(self.m_tree, item)) + self.expand_item(item, rl, item is root) + + items = self.get_children(item) + s = items + s +- ++ print('s="%s"' % s) + self.m_tree.Refresh() + + +@@ -3805,6 +3899,9 @@ class CNamespaceViewer(wx.Panel, CCaptio + + + def get_local_key(self, _stack): ++ '''Arguments: ++ _stack: a dictionnary describing the current thread. See rpdb2.py:get_stack() for detailed information. ++ ''' + frame_index = self.m_session_manager.get_frame_index() + c = _stack.get(rpdb2.DICT_KEY_CODE_LIST, []) + key = c[-(1 + frame_index)] +@@ -3812,6 +3909,9 @@ class CNamespaceViewer(wx.Panel, CCaptio + + + def get_global_key(self, _stack): ++ '''Arguments: ++ _stack: a dictionnary describing the current thread. See rpdb2.py:get_stack() for detailed information. ++ ''' + frame_index = self.m_session_manager.get_frame_index() + s = _stack.get(rpdb2.DICT_KEY_STACK, []) + key = s[-(1 + frame_index)][0] +@@ -3819,6 +3919,9 @@ class CNamespaceViewer(wx.Panel, CCaptio + + + def update_namespace(self, _stack): ++ '''Arguments: ++ _stack: a dictionnary describing the current thread. See rpdb2.py:get_stack() for detailed information. ++ ''' + try: + key = self.get_local_key(_stack) + el = self.m_key_map.get(key, None) +@@ -3873,7 +3976,7 @@ class CStackViewer(wx.Panel, CCaptionMan + + + def set_cursor(self, id): +- cursor = wx.StockCursor(id) ++ cursor = wx.Cursor(id) + self.SetCursor(cursor) + self.m_stack.SetCursor(cursor) + +@@ -3908,14 +4011,14 @@ class CStackViewer(wx.Panel, CCaptionMan + function = e[2] + + if not g_fUnicode: +- filename = rpdb2.as_string(filename, wx.GetDefaultPyEncoding()) +- function = rpdb2.as_string(function, wx.GetDefaultPyEncoding()) ++ filename = rpdb2.as_string(filename) ++ function = rpdb2.as_string(function) + +- index = self.m_stack.InsertStringItem(sys.maxint, repr(i)) +- self.m_stack.SetStringItem(index, 1, os.path.basename(filename)) +- self.m_stack.SetStringItem(index, 2, repr(lineno)) +- self.m_stack.SetStringItem(index, 3, function) +- self.m_stack.SetStringItem(index, 4, os.path.dirname(filename)) ++ index = self.m_stack.InsertItem( i, repr(i)) ++ self.m_stack.SetItem(index, 1, os.path.basename(filename)) ++ self.m_stack.SetItem(index, 2, repr(lineno)) ++ self.m_stack.SetItem(index, 3, function) ++ self.m_stack.SetItem(index, 4, os.path.dirname(filename)) + self.m_stack.SetItemData(index, i) + + i += 1 +@@ -4116,7 +4219,7 @@ class CAttachDialog(wx.Dialog, CJobs): + + + def set_cursor(self, id): +- cursor = wx.StockCursor(id) ++ cursor = wx.Cursor(id) + self.SetCursor(cursor) + self.m_listbox_scripts.SetCursor(cursor) + +@@ -4135,7 +4238,7 @@ class CAttachDialog(wx.Dialog, CJobs): + if host == '': + host = 'localhost' + +- host = rpdb2.as_unicode(host, wx.GetDefaultPyEncoding()) ++ host = rpdb2.as_unicode(host) + + f = lambda r, exc_info: self.callback_sethost(r, exc_info, host) + self.m_async_sm.with_callback(f).set_host(host) +@@ -4197,13 +4300,13 @@ class CAttachDialog(wx.Dialog, CJobs): + self.m_listbox_scripts.DeleteAllItems() + + for i, s in enumerate(self.m_server_list): +- index = self.m_listbox_scripts.InsertStringItem(sys.maxint, repr(s.m_pid)) ++ index = self.m_listbox_scripts.InsertItem( i, repr(s.m_pid)) + + filename = s.m_filename + if not g_fUnicode: +- filename = rpdb2.as_string(filename, wx.GetDefaultPyEncoding()) ++ filename = rpdb2.as_string(filename) + +- self.m_listbox_scripts.SetStringItem(index, 1, filename) ++ self.m_listbox_scripts.SetItem(index, 1, filename) + self.m_listbox_scripts.SetItemData(index, i) + + self.m_listbox_scripts.set_columns_width() +@@ -4216,7 +4319,7 @@ class CAttachDialog(wx.Dialog, CJobs): + + + def OnItemSelected(self, event): +- self.m_index = event.m_itemIndex ++ self.m_index = event.Index + self.m_ok.Enable() + + event.Skip() +@@ -4230,7 +4333,7 @@ class CAttachDialog(wx.Dialog, CJobs): + + + def OnItemActivated(self, event): +- self.m_index = event.m_itemIndex ++ self.m_index = event.Index + + self.EndModal(wx.ID_OK) + +@@ -4252,7 +4355,7 @@ class CExpressionDialog(wx.Dialog): + sizerh.Add(label, 0, wx.ALIGN_CENTRE | wx.ALL, 5) + + if not g_fUnicode: +- default_value = rpdb2.as_string(default_value, wx.GetDefaultPyEncoding()) ++ default_value = rpdb2.as_string(default_value) + + self.m_entry_expr = wx.TextCtrl(self, value = default_value, size = (200, -1)) + self.m_entry_expr.SetFocus() +@@ -4286,7 +4389,7 @@ class CExpressionDialog(wx.Dialog): + + def get_expression(self): + expr = self.m_entry_expr.GetValue() +- expr = rpdb2.as_unicode(expr, wx.GetDefaultPyEncoding()) ++ expr = rpdb2.as_unicode(expr) + + return expr + +@@ -4313,7 +4416,7 @@ class CEncodingDialog(wx.Dialog): + sizerh.Add(label, 0, wx.ALIGN_CENTRE | wx.ALL, 5) + encoding = [current_encoding, ''][current_encoding is None] + if not g_fUnicode: +- encoding = rpdb2.as_string(encoding, wx.GetDefaultPyEncoding()) ++ encoding = rpdb2.as_string(encoding) + + self.m_entry_encoding = wx.TextCtrl(self, value = encoding, size = (200, -1)) + self.m_entry_encoding.SetFocus() +@@ -4353,7 +4456,7 @@ class CEncodingDialog(wx.Dialog): + + def get_encoding(self): + encoding = self.m_entry_encoding.GetValue() +- encoding = rpdb2.as_unicode(encoding, wx.GetDefaultPyEncoding()) ++ encoding = rpdb2.as_unicode(encoding) + + return encoding, self.m_cb.GetValue() + +@@ -4446,7 +4549,7 @@ class CPwdDialog(wx.Dialog): + pwd = [current_password, ''][current_password is None] + + if not g_fUnicode: +- pwd = rpdb2.as_string(pwd, wx.GetDefaultPyEncoding()) ++ pwd = rpdb2.as_string(pwd) + + self.m_entry_pwd = wx.TextCtrl(self, value = pwd, size = (200, -1)) + self.m_entry_pwd.SetFocus() +@@ -4482,7 +4585,7 @@ class CPwdDialog(wx.Dialog): + + def get_password(self): + pwd = self.m_entry_pwd.GetValue() +- pwd = rpdb2.as_unicode(pwd, wx.GetDefaultPyEncoding()) ++ pwd = rpdb2.as_unicode(pwd) + + return pwd + +@@ -4562,7 +4665,7 @@ class COpenDialog(wx.Dialog): + (_path, filename, args) = rpdb2.split_command_line_path_filename_args(command_line) + _abs_path = os.path.abspath(_path) + +- dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = WILDCARD_WINPDB, style = wx.OPEN | wx.CHANGE_DIR) ++ dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = WILDCARD_WINPDB, style = wx.FD_OPEN | wx.FD_CHANGE_DIR) + r = dlg.ShowModal() + if r == wx.ID_OK: + path = dlg.GetPaths()[0] +@@ -4579,7 +4682,7 @@ class COpenDialog(wx.Dialog): + + def get_file_name(self): + filename = self.m_entry.GetValue() +- filename = rpdb2.as_unicode(filename, wx.GetDefaultPyEncoding()) ++ filename = rpdb2.as_unicode(filename) + + return filename + +@@ -4603,7 +4706,7 @@ class CLaunchDialog(wx.Dialog): + sizerh.Add(label, 0, wx.ALIGN_CENTRE | wx.ALL, 5) + + if not g_fUnicode: +- command_line = rpdb2.as_string(command_line, wx.GetDefaultPyEncoding()) ++ command_line = rpdb2.as_string(command_line) + + self.m_entry_commandline = wx.TextCtrl(self, value = command_line, size = (200, -1)) + self.m_entry_commandline.SetFocus() +@@ -4676,7 +4779,7 @@ class CLaunchDialog(wx.Dialog): + + cwd = rpdb2.getcwdu() + +- dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = WILDCARD_WINPDB, style = wx.OPEN | wx.CHANGE_DIR) ++ dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = WILDCARD_WINPDB, style = wx.FD_OPEN | wx.FD_CHANGE_DIR) + r = dlg.ShowModal() + + os.chdir(cwd) +@@ -4705,7 +4808,7 @@ class CLaunchDialog(wx.Dialog): + else: + wildcard = WILDCARD_EXECUTABLES + +- dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = wildcard, style = wx.OPEN | wx.CHANGE_DIR) ++ dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = wildcard, style = wx.FD_OPEN | wx.FD_CHANGE_DIR) + r = dlg.ShowModal() + + os.chdir(cwd) +@@ -4726,7 +4829,7 @@ class CLaunchDialog(wx.Dialog): + + def do_validate(self): + command_line = self.m_entry_commandline.GetValue() +- command_line = rpdb2.as_unicode(command_line, wx.GetDefaultPyEncoding()) ++ command_line = rpdb2.as_unicode(command_line) + + (_path, filename, args) = rpdb2.split_command_line_path_filename_args(command_line) + +@@ -4769,7 +4872,7 @@ class CLaunchDialog(wx.Dialog): + + def get_command_line(self): + command_line = self.m_entry_commandline.GetValue() +- command_line = rpdb2.as_unicode(command_line, wx.GetDefaultPyEncoding()) ++ command_line = rpdb2.as_unicode(command_line) + interpreter = self.m_entry_interpreter.GetValue() + return (command_line, self.m_cb.GetValue(), interpreter) + +@@ -4789,7 +4892,7 @@ def StartClient(command_line, fAttach, f + raise + + if not 'unicode' in wx.PlatformInfo: +- dlg = wx.Mes8ageDialog(None, STR_WXPYTHON_ANSI_WARNING_MSG, STR_WXPYTHON_ANSI_WARNING_TITLE, wx.OK | wx.ICON_WARNING) ++ dlg = wx.MessageDialog(None, STR_WXPYTHON_ANSI_WARNING_MSG, STR_WXPYTHON_ANSI_WARNING_TITLE, wx.OK | wx.ICON_WARNING) + dlg.ShowModal() + dlg.Destroy() + +@@ -4800,17 +4903,14 @@ def StartClient(command_line, fAttach, f + + + def main(): +- if rpdb2.get_version() != "RPDB_1_5_0": +- rpdb2._print(STR_ERROR_INTERFACE_COMPATIBILITY % ("0PDB_1_5_0", rpdb2.get_version())) ++ if rpdb2.get_version() != RPDB2_EXPECTED_VERSION: ++ rpdb2._print(STR_ERROR_INTERFACE_COMPATIBILITY % ( RPDB2_EXPECTED_VERSION, rpdb2.get_version())) + return + + return rpdb2.main(StartClient, WINPDB_TITLE) + + + +-def get_version(): +- return WINPDB_VERSION +- + def run_winpdb(): + ret = main() + diff --git a/winpdb.spec b/winpdb.spec index 3340b96..fba560f 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,19 +1,18 @@ Name: winpdb -Version: 1.4.8 -Release: 21%{?dist} +Version: 2.0.0 +Release: 0.1.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ -URL: http://www.winpdb.org/ -Source0: http://winpdb.googlecode.com/files/winpdb-%{version}.tar.gz +URL: https://pypi.org/project/winpdb-reborn +Source0: https://github.com/bluebird75/winpdb/archive/WINPDB_1_5_0.tar.gz Source1: %{name}.desktop Source2: %{name}.png -Patch0: winpdb-1.4.8-gnome-fix.patch -Patch1: https://sources.debian.net/data/main/w/winpdb/1.4.8-2.1/debian/patches/wxpython3.0.patch -# https://code.google.com/p/winpdb/issues/detail?id=19 -Patch2: winpdb-1.4.8-issue19-fix.patch +# Brings us to current git as of 20190815 +Patch0: winpdb-2.0.0dev5.patch BuildArch: noarch -BuildRequires: python2-devel, wxPython-devel >= 2.6, desktop-file-utils -Requires: python2-crypto, python2-wxpython >= 2.6 +BuildRequires: python3-devel, wxPython-devel >= 2.6, desktop-file-utils +Requires: python3-crypto, python3-wxpython4 +Provides: winpdb-reborn = %{version}-%{release} %description Winpdb is an advanced python debugger, with support for smart breakpoints, @@ -21,21 +20,16 @@ multiple threads, namespace modification, embedded debugging, encrypted communication and speed of up to 20 times that of pdb. %prep -%setup -q -%patch0 -p1 -b .gnomefix -%patch1 -p1 -b .wxpy3 -%patch2 -p1 -b .issue19 -sed -i 's/\r//g' README.txt -chmod -x README.txt - -sed -i 's|/usr/bin/env python|/usr/bin/python2|g' rpdb2.py -sed -i 's|/usr/bin/env python|/usr/bin/python2|g' winpdb.py +%setup -q -n %{name}-WINPDB_1_5_0 +%patch0 -p1 -b .dev5 +sed -i 's|/usr/bin/env python|/usr/bin/python3|g' rpdb2.py +sed -i 's|/usr/bin/env python|/usr/bin/python3|g' winpdb.py %build -%{__python2} setup.py build +%{__python3} setup.py build %install -%{__python2} setup.py install --skip-build --root=$RPM_BUILD_ROOT +%{__python3} setup.py install --skip-build --root=$RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%{_datadir}/pixmaps install -m0644 -p %{SOURCE2} $RPM_BUILD_ROOT%{_datadir}/pixmaps @@ -45,16 +39,19 @@ desktop-file-install \ --dir $RPM_BUILD_ROOT%{_datadir}/applications \ %{SOURCE1} -chmod +x $RPM_BUILD_ROOT%{python2_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python2_sitelib}/winpdb.py +chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sitelib}/winpdb.py %files -%doc README.txt +%doc README.rst %{_bindir}/* -%{python2_sitelib}/* +%{python3_sitelib}/* %{_datadir}/applications/*.desktop %{_datadir}/pixmaps/%{name}.png %changelog +* Thu Aug 15 2019 Tom Callaway - 2.0.0-0.1.dev5 +- use winpdb-reborn sources, move to python3 + * Sat Jul 27 2019 Fedora Release Engineering - 1.4.8-21 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild diff --git a/wxpython3.0.patch b/wxpython3.0.patch deleted file mode 100644 index a60e525..0000000 --- a/wxpython3.0.patch +++ /dev/null @@ -1,47 +0,0 @@ -Description: Fixes for wxPython 3.0 - Retains compatibility with 2.8. -Author: Olly Betts -Bug-Debian: https://bugs.debian.org/759093 -Forwarded: no -Last-Update: 2014-09-20 - -Index: winpdb-1.4.8/winpdb.py -=================================================================== ---- winpdb-1.4.8.orig/winpdb.py -+++ winpdb-1.4.8/winpdb.py -@@ -278,7 +278,7 @@ import sys - - - --WXVER = "2.6" -+WXVER = "2.8" - - STR_WXPYTHON_ERROR_TITLE = 'Winpdb Error' - STR_WXPYTHON_ERROR_MSG = """wxPython was not found. -@@ -3870,7 +3870,7 @@ class CHTMLDialog(wx.Dialog): - self.m_html.SetPage(self.get_html_text(text)) - - ir = self.m_html.GetInternalRepresentation() -- self.m_html.SetSize((ir.GetWidth() + 25, min(500, ir.GetHeight() + 25))) -+ self.m_html.SetMinSize((ir.GetWidth() + 25, min(500, ir.GetHeight() + 25))) - - btnsizer = wx.StdDialogButtonSizer() - sizerv.Add(btnsizer, 0, wx.ALIGN_CENTRE | wx.ALL, 5) -@@ -4465,7 +4465,7 @@ class COpenDialog(wx.Dialog): - (_path, filename, args) = rpdb2.split_command_line_path_filename_args(command_line) - _abs_path = os.path.abspath(_path) - -- dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = WINPDB_WILDCARD, style = wx.OPEN | wx.CHANGE_DIR) -+ dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = WINPDB_WILDCARD, style = wx.FD_OPEN | wx.FD_CHANGE_DIR) - r = dlg.ShowModal() - if r == wx.ID_OK: - path = dlg.GetPaths()[0] -@@ -4563,7 +4563,7 @@ class CLaunchDialog(wx.Dialog): - - cwd = rpdb2.getcwdu() - -- dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = WINPDB_WILDCARD, style = wx.OPEN | wx.CHANGE_DIR) -+ dlg = wx.FileDialog(self, defaultDir = _abs_path, defaultFile = filename, wildcard = WINPDB_WILDCARD, style = wx.FD_OPEN | wx.FD_CHANGE_DIR) - r = dlg.ShowModal() - - os.chdir(cwd) From e226f0b9b2fba0c35e1cbde0b4b196ea72f1a076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Mon, 19 Aug 2019 11:09:33 +0200 Subject: [PATCH 08/37] Rebuilt for Python 3.8 --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index fba560f..c7e42b9 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.1.dev5%{?dist} +Release: 0.2.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -49,6 +49,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Mon Aug 19 2019 Miro Hrončok - 2.0.0-0.2.dev5 +- Rebuilt for Python 3.8 + * Thu Aug 15 2019 Tom Callaway - 2.0.0-0.1.dev5 - use winpdb-reborn sources, move to python3 From 3f85cfd2ef21ddf1a7d558fcf76f364caaafc937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Thu, 3 Oct 2019 14:41:35 +0200 Subject: [PATCH 09/37] Rebuilt for Python 3.8.0rc1 (#1748018) --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index c7e42b9..bac0c36 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.2.dev5%{?dist} +Release: 0.3.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -49,6 +49,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Thu Oct 03 2019 Miro Hrončok - 2.0.0-0.3.dev5 +- Rebuilt for Python 3.8.0rc1 (#1748018) + * Mon Aug 19 2019 Miro Hrončok - 2.0.0-0.2.dev5 - Rebuilt for Python 3.8 From 180f6234d1a40d6b72057587a8df75d0ca257afd Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 31 Jan 2020 03:47:13 +0000 Subject: [PATCH 10/37] - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index bac0c36..4e1bd59 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.3.dev5%{?dist} +Release: 0.4.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -49,6 +49,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Jan 31 2020 Fedora Release Engineering - 2.0.0-0.4.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + * Thu Oct 03 2019 Miro Hrončok - 2.0.0-0.3.dev5 - Rebuilt for Python 3.8.0rc1 (#1748018) From 9be38b5b1d043e0a51581bbfbc392f8bb9b6352d Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Fri, 31 Jan 2020 06:15:18 -0500 Subject: [PATCH 11/37] add fixes from upstream && remove unnecessary (and dead) dependency on wxPython-devel --- winpdb-colorterm-fix.patch | 12 +++++++++++ ...ll-params-of-DES.new-are-set-to-byte.patch | 21 +++++++++++++++++++ winpdb.spec | 14 +++++++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 winpdb-colorterm-fix.patch create mode 100644 winpdb-ensure-all-params-of-DES.new-are-set-to-byte.patch diff --git a/winpdb-colorterm-fix.patch b/winpdb-colorterm-fix.patch new file mode 100644 index 0000000..fbf1e2c --- /dev/null +++ b/winpdb-colorterm-fix.patch @@ -0,0 +1,12 @@ +diff -up winpdb-WINPDB_1_5_0/rpdb2.py.colorterm-fix winpdb-WINPDB_1_5_0/rpdb2.py +--- winpdb-WINPDB_1_5_0/rpdb2.py.colorterm-fix 2020-01-31 06:03:44.332995973 -0500 ++++ winpdb-WINPDB_1_5_0/rpdb2.py 2020-01-31 06:04:09.522505827 -0500 +@@ -3526,7 +3526,7 @@ def CalcTerminalCommand(): + + if COLORTERM in os.environ: + term = os.environ[COLORTERM] +- if IsFileInPath(term): ++ if term != 'yes' and IsFileInPath(term): + return term + + if IsPrefixInEnviron(KDE_PREFIX): diff --git a/winpdb-ensure-all-params-of-DES.new-are-set-to-byte.patch b/winpdb-ensure-all-params-of-DES.new-are-set-to-byte.patch new file mode 100644 index 0000000..1dd29df --- /dev/null +++ b/winpdb-ensure-all-params-of-DES.new-are-set-to-byte.patch @@ -0,0 +1,21 @@ +diff -up winpdb-WINPDB_1_5_0/rpdb2.py.bytes-fix winpdb-WINPDB_1_5_0/rpdb2.py +--- winpdb-WINPDB_1_5_0/rpdb2.py.bytes-fix 2020-01-31 06:05:32.600889226 -0500 ++++ winpdb-WINPDB_1_5_0/rpdb2.py 2020-01-31 06:06:38.376609312 -0500 +@@ -4858,7 +4858,7 @@ class CCrypto: + s_padded = s + as_bytes('\x00') * (DES.block_size - (len(s) % DES.block_size)) + + key_padded = (self.m_key + as_bytes('0') * (DES.key_size - (len(self.m_key) % DES.key_size)))[:DES.key_size] +- iv = '0' * DES.block_size ++ iv = as_bytes('0') * DES.block_size + + d = DES.new(key_padded, DES.MODE_CBC, iv) + r = d.encrypt(s_padded) +@@ -4869,7 +4869,7 @@ class CCrypto: + def __decrypt(self, s): + try: + key_padded = (self.m_key + as_bytes('0') * (DES.key_size - (len(self.m_key) % DES.key_size)))[:DES.key_size] +- iv = '0' * DES.block_size ++ iv = as_bytes('0') * DES.block_size + + d = DES.new(key_padded, DES.MODE_CBC, iv) + _s = d.decrypt(s).strip(as_bytes('\x00')) diff --git a/winpdb.spec b/winpdb.spec index 4e1bd59..1cadb44 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.4.dev5%{?dist} +Release: 0.5.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -9,8 +9,12 @@ Source1: %{name}.desktop Source2: %{name}.png # Brings us to current git as of 20190815 Patch0: winpdb-2.0.0dev5.patch +# https://github.com/bluebird75/winpdb/commit/3b720a6d98fbd8e9f282fa7e20677f55515da0c1 +Patch1: winpdb-colorterm-fix.patch +# https://github.com/bluebird75/winpdb/commit/047c35869e23d35188c9490cbbc87d574c77c939 +Patch2: winpdb-ensure-all-params-of-DES.new-are-set-to-byte.patch BuildArch: noarch -BuildRequires: python3-devel, wxPython-devel >= 2.6, desktop-file-utils +BuildRequires: python3-devel, desktop-file-utils Requires: python3-crypto, python3-wxpython4 Provides: winpdb-reborn = %{version}-%{release} @@ -22,6 +26,8 @@ communication and speed of up to 20 times that of pdb. %prep %setup -q -n %{name}-WINPDB_1_5_0 %patch0 -p1 -b .dev5 +%patch1 -p1 -b .colorterm-fix +%patch2 -p1 -b .bytes-fix sed -i 's|/usr/bin/env python|/usr/bin/python3|g' rpdb2.py sed -i 's|/usr/bin/env python|/usr/bin/python3|g' winpdb.py @@ -49,6 +55,10 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Jan 31 2020 Tom Callaway - 2.0.0-0.5.dev5 +- add fixes from upstream +- remove unnecessary (and dead) dependency on wxPython-devel + * Fri Jan 31 2020 Fedora Release Engineering - 2.0.0-0.4.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild From 5385b040825b6b642d69819d9c114830de6230fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Tue, 26 May 2020 03:55:11 +0200 Subject: [PATCH 12/37] Rebuilt for Python 3.9 --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 1cadb44..fb8ace9 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.5.dev5%{?dist} +Release: 0.6.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -55,6 +55,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Tue May 26 2020 Miro Hrončok - 2.0.0-0.6.dev5 +- Rebuilt for Python 3.9 + * Fri Jan 31 2020 Tom Callaway - 2.0.0-0.5.dev5 - add fixes from upstream - remove unnecessary (and dead) dependency on wxPython-devel From e9b7c87ee192df6f68630c95eebc3d01256d35ef Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 29 Jul 2020 14:12:01 +0000 Subject: [PATCH 13/37] - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index fb8ace9..44c9f79 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.6.dev5%{?dist} +Release: 0.7.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -55,6 +55,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Wed Jul 29 2020 Fedora Release Engineering - 2.0.0-0.7.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Tue May 26 2020 Miro Hrončok - 2.0.0-0.6.dev5 - Rebuilt for Python 3.9 From 7de96aef2f255af88a340acd0cac3692c2ebda3e Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 27 Jan 2021 23:33:02 +0000 Subject: [PATCH 14/37] - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 44c9f79..215097c 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.7.dev5%{?dist} +Release: 0.8.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -55,6 +55,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Wed Jan 27 2021 Fedora Release Engineering - 2.0.0-0.8.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + * Wed Jul 29 2020 Fedora Release Engineering - 2.0.0-0.7.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild From 38fccc8df87e31b01e9ccb374ecc6ed16fa452e7 Mon Sep 17 00:00:00 2001 From: Tomas Hrnciar Date: Mon, 19 Apr 2021 13:18:32 +0200 Subject: [PATCH 15/37] BuildRequire setuptools explicitly See https://fedoraproject.org/wiki/Changes/Reduce_dependencies_on_python3-setuptools --- winpdb.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/winpdb.spec b/winpdb.spec index 215097c..64ec42c 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -15,6 +15,7 @@ Patch1: winpdb-colorterm-fix.patch Patch2: winpdb-ensure-all-params-of-DES.new-are-set-to-byte.patch BuildArch: noarch BuildRequires: python3-devel, desktop-file-utils +BuildRequires: python3-setuptools Requires: python3-crypto, python3-wxpython4 Provides: winpdb-reborn = %{version}-%{release} From 7b4da3f96a2161d2a129d31103d6197093a6ab48 Mon Sep 17 00:00:00 2001 From: Python Maint Date: Fri, 4 Jun 2021 21:20:04 +0200 Subject: [PATCH 16/37] Rebuilt for Python 3.10 --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 64ec42c..1242e7b 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.8.dev5%{?dist} +Release: 0.9.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Jun 04 2021 Python Maint - 2.0.0-0.9.dev5 +- Rebuilt for Python 3.10 + * Wed Jan 27 2021 Fedora Release Engineering - 2.0.0-0.8.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild From 98cfe56bd67c5e3e2684ca87e3d7deb058af3044 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 23 Jul 2021 21:00:04 +0000 Subject: [PATCH 17/37] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 1242e7b..173f122 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.9.dev5%{?dist} +Release: 0.10.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Jul 23 2021 Fedora Release Engineering - 2.0.0-0.10.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Fri Jun 04 2021 Python Maint - 2.0.0-0.9.dev5 - Rebuilt for Python 3.10 From 86b2153d3c52867f535474658baae3c16c06a8d4 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 22 Jan 2022 04:31:52 +0000 Subject: [PATCH 18/37] - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 173f122..b40968f 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.10.dev5%{?dist} +Release: 0.11.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sat Jan 22 2022 Fedora Release Engineering - 2.0.0-0.11.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + * Fri Jul 23 2021 Fedora Release Engineering - 2.0.0-0.10.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild From b46902514885444ee0c4f1d04b7f95f9e9b492ee Mon Sep 17 00:00:00 2001 From: Python Maint Date: Mon, 13 Jun 2022 15:43:27 +0200 Subject: [PATCH 19/37] Rebuilt for Python 3.11 --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index b40968f..5e33fe2 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.11.dev5%{?dist} +Release: 0.12.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Mon Jun 13 2022 Python Maint - 2.0.0-0.12.dev5 +- Rebuilt for Python 3.11 + * Sat Jan 22 2022 Fedora Release Engineering - 2.0.0-0.11.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 66089a1da45cb3de44442b92a4c2943429444aa4 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 23 Jul 2022 12:29:06 +0000 Subject: [PATCH 20/37] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 5e33fe2..6316e1b 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.12.dev5%{?dist} +Release: 0.13.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sat Jul 23 2022 Fedora Release Engineering - 2.0.0-0.13.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Mon Jun 13 2022 Python Maint - 2.0.0-0.12.dev5 - Rebuilt for Python 3.11 From 05599ca479fc8afabc7e10268173c2d12373cf24 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 21 Jan 2023 06:51:43 +0000 Subject: [PATCH 21/37] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 6316e1b..abe467f 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.13.dev5%{?dist} +Release: 0.14.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sat Jan 21 2023 Fedora Release Engineering - 2.0.0-0.14.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + * Sat Jul 23 2022 Fedora Release Engineering - 2.0.0-0.13.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild From f930fc88d57c8629d0dcc93ee78957ddd5629805 Mon Sep 17 00:00:00 2001 From: Python Maint Date: Tue, 13 Jun 2023 21:00:20 +0200 Subject: [PATCH 22/37] Rebuilt for Python 3.12 --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index abe467f..46a0f96 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.14.dev5%{?dist} +Release: 0.15.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Tue Jun 13 2023 Python Maint - 2.0.0-0.15.dev5 +- Rebuilt for Python 3.12 + * Sat Jan 21 2023 Fedora Release Engineering - 2.0.0-0.14.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild From 0641650c19341f6bfde807d6dbcc28ff8063450e Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 22 Jul 2023 18:14:49 +0000 Subject: [PATCH 23/37] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 46a0f96..d1512dc 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.15.dev5%{?dist} +Release: 0.16.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sat Jul 22 2023 Fedora Release Engineering - 2.0.0-0.16.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Tue Jun 13 2023 Python Maint - 2.0.0-0.15.dev5 - Rebuilt for Python 3.12 From 2f671a89411e086c6f33932edb35f3ab1ef3b490 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 27 Jan 2024 08:52:18 +0000 Subject: [PATCH 24/37] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index d1512dc..815730f 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.16.dev5%{?dist} +Release: 0.17.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sat Jan 27 2024 Fedora Release Engineering - 2.0.0-0.17.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + * Sat Jul 22 2023 Fedora Release Engineering - 2.0.0-0.16.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From fbbf6d5d5f60a95253443497ce006e72a9db897c Mon Sep 17 00:00:00 2001 From: Software Management Team Date: Thu, 30 May 2024 12:46:49 +0200 Subject: [PATCH 25/37] Eliminate use of obsolete %patchN syntax (#2283636) --- winpdb.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/winpdb.spec b/winpdb.spec index 815730f..e297341 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -26,9 +26,9 @@ communication and speed of up to 20 times that of pdb. %prep %setup -q -n %{name}-WINPDB_1_5_0 -%patch0 -p1 -b .dev5 -%patch1 -p1 -b .colorterm-fix -%patch2 -p1 -b .bytes-fix +%patch -P0 -p1 -b .dev5 +%patch -P1 -p1 -b .colorterm-fix +%patch -P2 -p1 -b .bytes-fix sed -i 's|/usr/bin/env python|/usr/bin/python3|g' rpdb2.py sed -i 's|/usr/bin/env python|/usr/bin/python3|g' winpdb.py From 8f67111de989a3611d54b6e419ad001515e46f4a Mon Sep 17 00:00:00 2001 From: Python Maint Date: Fri, 7 Jun 2024 09:12:28 +0200 Subject: [PATCH 26/37] Rebuilt for Python 3.13 --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index e297341..92ea5c5 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.17.dev5%{?dist} +Release: 0.18.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Jun 07 2024 Python Maint - 2.0.0-0.18.dev5 +- Rebuilt for Python 3.13 + * Sat Jan 27 2024 Fedora Release Engineering - 2.0.0-0.17.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From 59cf6e81907921ef59939d65e027a5218552762e Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 20 Jul 2024 09:23:50 +0000 Subject: [PATCH 27/37] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 92ea5c5..7421309 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.18.dev5%{?dist} +Release: 0.19.dev5%{?dist} Summary: An advanced python debugger License: GPLv2+ URL: https://pypi.org/project/winpdb-reborn @@ -56,6 +56,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sat Jul 20 2024 Fedora Release Engineering - 2.0.0-0.19.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + * Fri Jun 07 2024 Python Maint - 2.0.0-0.18.dev5 - Rebuilt for Python 3.13 From e3a28c1e3d41c9105efec9da57eb03947c028e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= Date: Fri, 26 Jul 2024 03:40:48 +0200 Subject: [PATCH 28/37] convert GPLv2+ license to SPDX This is part of https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_4 --- winpdb.spec | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/winpdb.spec b/winpdb.spec index 7421309..8713575 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,8 +1,9 @@ Name: winpdb Version: 2.0.0 -Release: 0.19.dev5%{?dist} +Release: 0.20.dev5%{?dist} Summary: An advanced python debugger -License: GPLv2+ +# Automatically converted from old format: GPLv2+ - review is highly recommended. +License: GPL-2.0-or-later URL: https://pypi.org/project/winpdb-reborn Source0: https://github.com/bluebird75/winpdb/archive/WINPDB_1_5_0.tar.gz Source1: %{name}.desktop @@ -56,6 +57,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Jul 26 2024 Miroslav Suchý - 2.0.0-0.20.dev5 +- convert license to SPDX + * Sat Jul 20 2024 Fedora Release Engineering - 2.0.0-0.19.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From 67b46dbea7dbce2a8d612317a768c73230f82c6e Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sun, 19 Jan 2025 15:04:48 +0000 Subject: [PATCH 29/37] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 8713575..741caa8 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0 -Release: 0.20.dev5%{?dist} +Release: 0.21.dev5%{?dist} Summary: An advanced python debugger # Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later @@ -57,6 +57,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sun Jan 19 2025 Fedora Release Engineering - 2.0.0-0.21.dev5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + * Fri Jul 26 2024 Miroslav Suchý - 2.0.0-0.20.dev5 - convert license to SPDX From 9f31038f0df6165bdc5bad8174c92c2718aac864 Mon Sep 17 00:00:00 2001 From: Tom spot Callaway Date: Wed, 12 Mar 2025 14:37:01 -0400 Subject: [PATCH 30/37] update to 2.0.0.1 + latest commits, apply fix for removed imp.load_source() --- .gitignore | 1 + ...12d75cf89b0678d563237746be647d5f25e7.patch | 51 +++ ...a49275ee8461009dbe5a4aefef4b57dec729.patch | 49 +++ ...5232b95715c5e8efbd155dd38c262f5e79d0.patch | 22 ++ ...4532d93b728bef7b2c8e529a431bbe6ecc19.patch | 347 ++++++++++++++++++ ...430ac8da69d3a1cd4a848c9135f093b90123.patch | 22 ++ ...7311de97300c1ce9de9ee6931dc7141cfd93.patch | 24 ++ sources | 2 +- winpdb-2.0.0.1-no-imp.patch | 39 ++ winpdb.spec | 43 ++- 10 files changed, 583 insertions(+), 17 deletions(-) create mode 100644 215712d75cf89b0678d563237746be647d5f25e7.patch create mode 100644 2a3ca49275ee8461009dbe5a4aefef4b57dec729.patch create mode 100644 5c2f5232b95715c5e8efbd155dd38c262f5e79d0.patch create mode 100644 613e4532d93b728bef7b2c8e529a431bbe6ecc19.patch create mode 100644 d1a4430ac8da69d3a1cd4a848c9135f093b90123.patch create mode 100644 ed617311de97300c1ce9de9ee6931dc7141cfd93.patch create mode 100644 winpdb-2.0.0.1-no-imp.patch diff --git a/.gitignore b/.gitignore index 0499392..c0a2d75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ winpdb-1.4.6.tar.gz /winpdb-1.4.8.tar.gz /WINPDB_1_5_0.tar.gz +/winpdb-reborn-2.0.0.1.tar.gz diff --git a/215712d75cf89b0678d563237746be647d5f25e7.patch b/215712d75cf89b0678d563237746be647d5f25e7.patch new file mode 100644 index 0000000..0ea8d29 --- /dev/null +++ b/215712d75cf89b0678d563237746be647d5f25e7.patch @@ -0,0 +1,51 @@ +From 215712d75cf89b0678d563237746be647d5f25e7 Mon Sep 17 00:00:00 2001 +From: Philippe F +Date: Tue, 17 Nov 2020 15:16:44 +0100 +Subject: [PATCH] Fixes undefined variable + +--- + rpdb/session_manager.py | 9 +++++++++ + rpdb2.py | 10 ---------- + 2 files changed, 9 insertions(+), 10 deletions(-) + +diff --git a/rpdb/session_manager.py b/rpdb/session_manager.py +index 3d1701a..f9ef51c 100644 +--- a/rpdb/session_manager.py ++++ b/rpdb/session_manager.py +@@ -29,6 +29,15 @@ + + g_fFirewallTest = True + ++RPDBTERM = 'RPDBTERM' ++COLORTERM = 'COLORTERM' ++TERM = 'TERM' ++KDE_PREFIX = 'KDE' ++GNOME_PREFIX = 'GNOME' ++ ++KDE_DEFAULT_TERM_QUERY = "kreadconfig --file kdeglobals --group General --key TerminalApplication --default konsole" ++XTERM = 'xterm' ++RXVT = 'rxvt' + GNOME_DEFAULT_TERM = 'gnome-terminal' + GNOME_DEFAULT_TERM_BEFORE_3_8 = 'gnome-terminal --disable-factory' + GNOME_DEFAULT_TERM_BEFORE_3_8_CHECK_FILE = "/../share/gnome-terminal/profile-manager.ui" #this glade-related file present for only gnome terminal versions 2.24-3.6 +diff --git a/rpdb2.py b/rpdb2.py +index 015cfd9..d970fed 100644 +--- a/rpdb2.py ++++ b/rpdb2.py +@@ -365,16 +365,6 @@ def is_py3k(): + # According to PEP-8: "Use 4 spaces per indentation level." + # + +-RPDBTERM = 'RPDBTERM' +-COLORTERM = 'COLORTERM' +-TERM = 'TERM' +-KDE_PREFIX = 'KDE' +-GNOME_PREFIX = 'GNOME' +- +-KDE_DEFAULT_TERM_QUERY = "kreadconfig --file kdeglobals --group General --key TerminalApplication --default konsole" +-XTERM = 'xterm' +-RXVT = 'rxvt' +- + FORK_CHILD = 'child' + FORK_PARENT = 'parent' + FORK_MANUAL = 'manual' diff --git a/2a3ca49275ee8461009dbe5a4aefef4b57dec729.patch b/2a3ca49275ee8461009dbe5a4aefef4b57dec729.patch new file mode 100644 index 0000000..ebdea3d --- /dev/null +++ b/2a3ca49275ee8461009dbe5a4aefef4b57dec729.patch @@ -0,0 +1,49 @@ +From 2a3ca49275ee8461009dbe5a4aefef4b57dec729 Mon Sep 17 00:00:00 2001 +From: Johannes Wilde +Date: Fri, 21 Feb 2025 15:48:08 +0100 +Subject: [PATCH] Do not print if no file was provided. +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The current Python 3.13.2 documentation states [https://docs.python.org/3/library/sys.html#sys.__stderr__]: +"Note: Under some conditions stdin, stdout and stderr as well as the original values __stdin__, __stdout__ and __stderr__ can be None. It is usually the case for Windows GUI apps that aren’t connected to a console and Python apps started with pythonw." + +Using an integrated Python interpreter, I encountered sys.__stderr__ to be None - which prevented me from using rpdb as it crashed when printing debug information in print_debug(). + +In addition I like using a None file-handle to disable output to it. I find this to be pythonic. +--- + rpdb/utils.py | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +diff --git a/rpdb/utils.py b/rpdb/utils.py +index e20e344..127b187 100644 +--- a/rpdb/utils.py ++++ b/rpdb/utils.py +@@ -123,17 +123,18 @@ def winlower(path): + + + def _print(s, f = sys.stdout, feol = True): +- s = as_unicode(s) ++ if f is not None: ++ s = as_unicode(s) + +- encoding = detect_encoding(f) ++ encoding = detect_encoding(f) + +- s = as_bytes(s, encoding, fstrict = False) +- s = as_string(s, encoding) ++ s = as_bytes(s, encoding, fstrict = False) ++ s = as_string(s, encoding) + +- if feol: +- f.write(s + '\n') +- else: +- f.write(s) ++ if feol: ++ f.write(s + '\n') ++ else: ++ f.write(s) + + + def print_exception(t, v, tb, fForce = False): diff --git a/5c2f5232b95715c5e8efbd155dd38c262f5e79d0.patch b/5c2f5232b95715c5e8efbd155dd38c262f5e79d0.patch new file mode 100644 index 0000000..cd59029 --- /dev/null +++ b/5c2f5232b95715c5e8efbd155dd38c262f5e79d0.patch @@ -0,0 +1,22 @@ +From 5c2f5232b95715c5e8efbd155dd38c262f5e79d0 Mon Sep 17 00:00:00 2001 +From: Philippe F +Date: Tue, 17 Nov 2020 15:11:06 +0100 +Subject: [PATCH] Do not use deprecated function + +--- + winpdb.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/winpdb.py b/winpdb.py +index 1e27f88..18d0988 100644 +--- a/winpdb.py ++++ b/winpdb.py +@@ -4178,7 +4178,7 @@ def init2(self): + return + + pwd_dialog = CPwdDialog(self, pwd) +- pos = self.GetPositionTuple() ++ pos = self.GetPosition() + pwd_dialog.SetPosition((pos[0] + 50, pos[1] + 50)) + r = pwd_dialog.ShowModal() + if r != wx.ID_OK: diff --git a/613e4532d93b728bef7b2c8e529a431bbe6ecc19.patch b/613e4532d93b728bef7b2c8e529a431bbe6ecc19.patch new file mode 100644 index 0000000..4abc238 --- /dev/null +++ b/613e4532d93b728bef7b2c8e529a431bbe6ecc19.patch @@ -0,0 +1,347 @@ +From 613e4532d93b728bef7b2c8e529a431bbe6ecc19 Mon Sep 17 00:00:00 2001 +From: Philippe F +Date: Wed, 18 Nov 2020 09:45:24 +0100 +Subject: [PATCH] Fix small typos + +--- + rpdb/breakinfo.py | 1 + + rpdb/const.py | 2 -- + rpdb/crypto.py | 5 +++++ + rpdb/debugee.py | 2 +- + rpdb/events.py | 4 ++-- + rpdb/firewall_test.py | 6 ++--- + rpdb/rpc.py | 4 +++- + rpdb/session_manager.py | 50 ++++++++++++++++++++++++++++------------- + rpdb/utils.py | 2 +- + rpdb2.py | 25 --------------------- + 10 files changed, 50 insertions(+), 51 deletions(-) + +diff --git a/rpdb/breakinfo.py b/rpdb/breakinfo.py +index 7eddb90..58a0fa1 100644 +--- a/rpdb/breakinfo.py ++++ b/rpdb/breakinfo.py +@@ -24,6 +24,7 @@ def CalcScopeLine(self, lineno): + rvl = copy.copy(self.m_valid_lines) + rvl.reverse() + ++ l = '' + for l in rvl: + if lineno >= l: + break +diff --git a/rpdb/const.py b/rpdb/const.py +index 9c01d86..3407af8 100644 +--- a/rpdb/const.py ++++ b/rpdb/const.py +@@ -22,8 +22,6 @@ + """ + + +-import os +- + COPYRIGHT_NOTICE = """Copyright (C) 2013-2017 Philippe Fremy, 2005-2009 Nir Aides""" + CREDITS_NOTICE = """Work on version 1.4.8 was sponsored by Investortools, Inc.""" + LICENSE_NOTICE = """ +diff --git a/rpdb/crypto.py b/rpdb/crypto.py +index 65c36ec..8482ae5 100644 +--- a/rpdb/crypto.py ++++ b/rpdb/crypto.py +@@ -5,6 +5,11 @@ + import time + import zlib + ++try: ++ from Crypto.Cipher import DES ++except ImportError: ++ pass ++ + from rpdb.compat import _md5, base64_encodestring, base64_decodestring + from rpdb.exceptions import EncryptionExpected, EncryptionNotSupported, DecryptionFailure, AuthenticationFailure, \ + AuthenticationBadData, AuthenticationBadIndex +diff --git a/rpdb/debugee.py b/rpdb/debugee.py +index 1105257..683e810 100644 +--- a/rpdb/debugee.py ++++ b/rpdb/debugee.py +@@ -193,7 +193,7 @@ def __StartXMLRPCServer(self): + + while True: + try: +- server = CXMLRPCServer((host, port), logRequests = 0) ++ server = CXMLRPCServer((host, port), logRequests = False) + return (port, server) + + except socket.error: +diff --git a/rpdb/events.py b/rpdb/events.py +index dcef346..6adeb7d 100644 +--- a/rpdb/events.py ++++ b/rpdb/events.py +@@ -305,10 +305,10 @@ class CEventBreakpoint(CEvent): + REMOVE = as_unicode('remove') + SET = as_unicode('set') + +- def __init__(self, bp, action = SET, id_list = [], fAll = False): ++ def __init__(self, bp, action = SET, id_list = None, fAll = False): + self.m_bp = breakpoint_copy(bp) + self.m_action = action +- self.m_id_list = id_list ++ self.m_id_list = id_list or [] + self.m_fAll = fAll + + +diff --git a/rpdb/firewall_test.py b/rpdb/firewall_test.py +index 49ff48b..96c5476 100644 +--- a/rpdb/firewall_test.py ++++ b/rpdb/firewall_test.py +@@ -97,7 +97,7 @@ def __client(self): + s.connect((LOOPBACK, CFirewallTest.m_port)) + + s.send(as_bytes('Hello, world')) +- data = self.__recv(s, 1024) ++ _data = self.__recv(s, 1024) + self.m_result = True + + except socket.error: +@@ -140,9 +140,9 @@ def __server(self): + + CFirewallTest.m_port = port + ++ conn = None + try: + try: +- conn = None + s.listen(1) + conn, addr = s.accept() + +@@ -163,7 +163,7 @@ def __server(self): + s.close() + + +- def __recv(self, s, len): ++ def __recv(self, s, _len): + t0 = time.time() + + while True: +diff --git a/rpdb/rpc.py b/rpdb/rpc.py +index 2576e13..eed5406 100644 +--- a/rpdb/rpc.py ++++ b/rpdb/rpc.py +@@ -196,7 +196,7 @@ def __marshaled_dispatch(self, data, dispatch_method = None): + response = self._dispatch(method, params) + # wrap response in a singleton tuple + response = (response,) +- response = xmlrpclib.dumps(response, methodresponse=1) ++ response = xmlrpclib.dumps(response, methodresponse=True) + except xmlrpclib.Fault: + fault = sys.exc_info()[1] + response = xmlrpclib.dumps(fault) +@@ -279,11 +279,13 @@ def __request(self, name, params): + + except AuthenticationBadIndex: + e = sys.exc_info()[1] ++ print_debug("Caught AuthenticationBadIndex: %s" % str(e)) + self.m_crypto.set_index(e.m_max_index, e.m_anchor) + continue + + except xmlrpclib.Fault: + fault = sys.exc_info()[1] ++ print_debug("Caught xmlrpclib.Fault: %s" % fault.faultString) + if class_name(BadVersion) in fault.faultString: + s = fault.faultString.split("'") + version = ['', s[1]][len(s) > 0] +diff --git a/rpdb/session_manager.py b/rpdb/session_manager.py +index f9ef51c..cfba37f 100644 +--- a/rpdb/session_manager.py ++++ b/rpdb/session_manager.py +@@ -8,19 +8,17 @@ + import tempfile + import threading + import time +-import sys ++import stat + + from rpdb.breakpoint import CBreakPointsManagerProxy + from rpdb.const import * +-from rpdb.const import POSIX, RPDB_BPL_FOLDER, BREAKPOINTS_FILE_EXT, RPDB_BPL_FOLDER_NT, LOCALHOST, LOOPBACK + from rpdb.compat import base64_encodestring, _md5 + from rpdb.events import * + from rpdb.exceptions import * +-from rpdb.exceptions import CException, CConnectionException, NotAttached + from rpdb.globals import g_fDefaultStd, g_fScreen, g_fDebug, g_found_unicode_files + from rpdb.utils import as_unicode, _print, print_debug, is_unicode, as_bytes, ENCODING_AUTO, detect_locale, as_string, \ + get_python_executable, print_debug_exception, print_exception, generate_rid, split_command_line_path_filename_args, \ +- my_os_path_join, FindFile, g_safe_base64_to, getcwdu, calcURL, generate_random_char ++ my_os_path_join, FindFile, g_safe_base64_to, getcwdu, calcURL, generate_random_char, myisfile + from rpdb.state_manager import CStateManager + from rpdb.firewall_test import CFirewallTest + from rpdb.crypto import CCrypto +@@ -154,12 +152,12 @@ def set_printer(self, printer): + return self.__smi.set_printer(printer) + + +- def report_exception(self, type, value, tb): ++ def report_exception(self, etype, value, tb): + """ + Sends exception information to the printer. + """ + +- return self.__smi.report_exception(type, value, tb) ++ return self.__smi.report_exception(etype, value, tb) + + + def register_callback(self, callback, event_type_dict, fSingleUse): +@@ -920,11 +918,11 @@ def script_terminated_callback(self): + # Private Methods + # + +- def __unhandled_exception(self, event): ++ def __unhandled_exception(self, _event): + self.unhandled_exception_callback() + + +- def __termination_callback(self, event): ++ def __termination_callback(self, _event): + self.script_terminated_callback() + + +@@ -961,7 +959,7 @@ def __state_calback(self, event): + + e = s[-1] + +- function_name = e[2] ++ _function_name = e[2] + filename = os.path.basename(e[0]) + + if filename != DEBUGGER_FILENAME: +@@ -1099,10 +1097,9 @@ def __wait_for_debuggee(self, rid): + time.sleep(STARTUP_TIMEOUT / 2) + + for i in range(STARTUP_RETRIES): ++ print_debug('Scanning for debuggee...') ++ t0 = time.time() + try: +- print_debug('Scanning for debuggee...') +- +- t0 = time.time() + return self.m_server_list_object.calcList(self.m_rpdb2_pwd, self.m_rid, rid) + + except UnknownServer: +@@ -1226,7 +1223,7 @@ def _spawn_server(self, fchdir, ExpandedFilename, args, rid, interpreter): + try: + import terminalcommand + name = MAC +- except: ++ except ImportError: + name = os.name + + if name == 'nt' and g_fDebug: +@@ -1523,7 +1520,7 @@ def on_event_signal_exception(self, event): + self.m_printer(STR_SIGNAL_EXCEPTION % (event.m_description, event.m_signame, event.m_signum)) + + +- def on_event_embedded_sync(self, event): ++ def on_event_embedded_sync(self, _event): + # + # time.sleep() allows pending break requests to go through... + # +@@ -1531,7 +1528,7 @@ def on_event_embedded_sync(self, event): + self.getSession().getProxy().embedded_sync() + + +- def on_event_exit(self, event): ++ def on_event_exit(self, _event): + self.m_printer(STR_DEBUGGEE_TERMINATED) + threading.Thread(target = self.detach_job).start() + +@@ -2402,7 +2399,7 @@ def CalcTerminalCommand(): + return term + + if IsPrefixInEnviron(KDE_PREFIX): +- (s, term) = commands.getstatusoutput(KDE_DEFAULT_TERM_QUERY) ++ (s, term) = subprocess.getstatusoutput(KDE_DEFAULT_TERM_QUERY) + if (s == 0) and IsFileInPath(term): + return term + +@@ -2531,6 +2528,27 @@ def cleanup_bpl_folder(path): + pass + + ++def IsFileInPath(filename): ++ if filename == '': ++ return False ++ ++ try: ++ FindFile(filename) ++ return True ++ ++ except IOError: ++ return False ++ ++ ++def IsPrefixInEnviron(_str): ++ for e in os.environ.keys(): ++ if e.startswith(_str): ++ return True ++ ++ return False ++ ++ ++ + def ControlRate(t_last_call, max_rate): + """ + Limits rate at which this function is called by sleeping. +diff --git a/rpdb/utils.py b/rpdb/utils.py +index ca83607..e20e344 100644 +--- a/rpdb/utils.py ++++ b/rpdb/utils.py +@@ -286,8 +286,8 @@ def safe_wait(lock, timeout = None): + # + + while True: ++ t0 = time.time() + try: +- t0 = time.time() + return lock.wait(timeout) + + except: +diff --git a/rpdb2.py b/rpdb2.py +index d970fed..4bed551 100644 +--- a/rpdb2.py ++++ b/rpdb2.py +@@ -79,11 +79,6 @@ + print(STR_BAD_PYTHON_VERSION) + sys.exit(-1) + +-try: +- from Crypto.Cipher import DES +-except ImportError: +- pass +- + import xmlrpc.client as xmlrpclib + import _thread as thread + import numbers +@@ -602,26 +597,6 @@ def IsPythonSourceFile(path): + # this is too complicated in Python 3 + + +-def IsFileInPath(filename): +- if filename == '': +- return False +- +- try: +- FindFile(filename) +- return True +- +- except IOError: +- return False +- +- +- +-def IsPrefixInEnviron(_str): +- for e in os.environ.keys(): +- if e.startswith(_str): +- return True +- +- return False +- + + + def get_file_encoding(filename): diff --git a/d1a4430ac8da69d3a1cd4a848c9135f093b90123.patch b/d1a4430ac8da69d3a1cd4a848c9135f093b90123.patch new file mode 100644 index 0000000..88aacd6 --- /dev/null +++ b/d1a4430ac8da69d3a1cd4a848c9135f093b90123.patch @@ -0,0 +1,22 @@ +From d1a4430ac8da69d3a1cd4a848c9135f093b90123 Mon Sep 17 00:00:00 2001 +From: Philippe F +Date: Tue, 17 Nov 2020 15:10:51 +0100 +Subject: [PATCH] Fix typo preventing from launching winpdb debuggee + +--- + rpdb/session_manager.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rpdb/session_manager.py b/rpdb/session_manager.py +index ca44fef..3d1701a 100644 +--- a/rpdb/session_manager.py ++++ b/rpdb/session_manager.py +@@ -1246,7 +1246,7 @@ def _spawn_server(self, fchdir, ExpandedFilename, args, rid, interpreter): + + # for .pyc files, strip the c + fpath, ext = os.path.splitext(__file__) +- debugger = os.path.join( os.path.basename(fpath), '..', 'rpdb2') + ext ++ debugger = os.path.join( os.path.dirname(fpath), '..', 'rpdb2') + ext + if debugger[-1:] == 'c': + debugger = debugger[:-1] + diff --git a/ed617311de97300c1ce9de9ee6931dc7141cfd93.patch b/ed617311de97300c1ce9de9ee6931dc7141cfd93.patch new file mode 100644 index 0000000..db43b63 --- /dev/null +++ b/ed617311de97300c1ce9de9ee6931dc7141cfd93.patch @@ -0,0 +1,24 @@ +From ed617311de97300c1ce9de9ee6931dc7141cfd93 Mon Sep 17 00:00:00 2001 +From: Johannes Wilde +Date: Fri, 21 Feb 2025 15:56:16 +0100 +Subject: [PATCH] Do not directly access "private" members, but prefer the + public equivalent. + +[See also: https://stackoverflow.com/questions/74170883/python-sys-stdout-is-equal-to-none-by-default .] +--- + rpdb/utils.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rpdb/utils.py b/rpdb/utils.py +index 127b187..3a0bb86 100644 +--- a/rpdb/utils.py ++++ b/rpdb/utils.py +@@ -93,7 +93,7 @@ def print_debug(_str): + + str = '%s %s:%d %s %s(): %s' % (s, filename, lineno, threadinfo, name, _str) + +- _print(str, sys.__stderr__) ++ _print(str, sys.stderr) + + + def print_debug_exception(fForce = False): diff --git a/sources b/sources index b9ec0ef..68308c3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (WINPDB_1_5_0.tar.gz) = 9d4104e93c512dab3f1cd52b861b021b341cd0aaf5d65d1235cef546ce6e6dcedcb699a50f40f5c582d4dc1789dc66ae70c2c1cab9d4ff3afcd1d796e055b8db +SHA512 (winpdb-reborn-2.0.0.1.tar.gz) = 21e9c35e2c58d8f9a2bb762f3f4e916dbb4fee80cb8c52db6afa6a9eaec03f6dc85d62e1daace8c896b35f0e49cf7c34faefdc478466cb167b286b0301543ddb diff --git a/winpdb-2.0.0.1-no-imp.patch b/winpdb-2.0.0.1-no-imp.patch new file mode 100644 index 0000000..e542e26 --- /dev/null +++ b/winpdb-2.0.0.1-no-imp.patch @@ -0,0 +1,39 @@ +diff -up winpdb-reborn-2.0.0.1/rpdb2.py.no-imp winpdb-reborn-2.0.0.1/rpdb2.py +--- winpdb-reborn-2.0.0.1/rpdb2.py.no-imp 2025-03-12 14:27:38.797538630 -0400 ++++ winpdb-reborn-2.0.0.1/rpdb2.py 2025-03-12 14:29:17.837196358 -0400 +@@ -72,7 +72,8 @@ import time + import copy + import sys + import cmd +-import imp ++import importlib.util ++import importlib.machinery + import os + + if sys.version_info[:2] < (3,2): +@@ -84,6 +85,16 @@ import _thread as thread + import numbers + + ++def load_source(modname, filename): ++ loader = importlib.machinery.SourceFileLoader(modname, filename) ++ spec = importlib.util.spec_from_file_location(modname, filename, loader=loader) ++ module = importlib.util.module_from_spec(spec) ++ # The module is always executed and not cached in sys.modules. ++ # Uncomment the following line to cache the module. ++ # sys.modules[module.__name__] = module ++ loader.exec_module(module) ++ return module ++ + # + #-------------------------------- Design Notes ------------------------------- + # +@@ -6768,7 +6779,7 @@ def StartServer(args, fchdir, _rpdb2_pwd + # there was a problem loading the debugged script. + # + +- imp.load_source('__main__', _path) ++ load_source('__main__', _path) + + + diff --git a/winpdb.spec b/winpdb.spec index 741caa8..8505967 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,22 +1,22 @@ Name: winpdb -Version: 2.0.0 -Release: 0.21.dev5%{?dist} +Version: 2.0.0.1 +Release: 1%{?dist} Summary: An advanced python debugger -# Automatically converted from old format: GPLv2+ - review is highly recommended. License: GPL-2.0-or-later URL: https://pypi.org/project/winpdb-reborn -Source0: https://github.com/bluebird75/winpdb/archive/WINPDB_1_5_0.tar.gz +Source0: https://files.pythonhosted.org/packages/d9/8f/c8033e1a075d8205a2f950a40644d363f63b11698655f620b5f4d6e7ace0/winpdb-reborn-2.0.0.1.tar.gz Source1: %{name}.desktop Source2: %{name}.png -# Brings us to current git as of 20190815 -Patch0: winpdb-2.0.0dev5.patch -# https://github.com/bluebird75/winpdb/commit/3b720a6d98fbd8e9f282fa7e20677f55515da0c1 -Patch1: winpdb-colorterm-fix.patch -# https://github.com/bluebird75/winpdb/commit/047c35869e23d35188c9490cbbc87d574c77c939 -Patch2: winpdb-ensure-all-params-of-DES.new-are-set-to-byte.patch +Patch0: https://github.com/bluebird75/winpdb/commit/d1a4430ac8da69d3a1cd4a848c9135f093b90123.patch +Patch1: https://github.com/bluebird75/winpdb/commit/5c2f5232b95715c5e8efbd155dd38c262f5e79d0.patch +Patch2: https://github.com/bluebird75/winpdb/commit/215712d75cf89b0678d563237746be647d5f25e7.patch +Patch3: https://github.com/bluebird75/winpdb/commit/613e4532d93b728bef7b2c8e529a431bbe6ecc19.patch +Patch4: https://github.com/bluebird75/winpdb/commit/2a3ca49275ee8461009dbe5a4aefef4b57dec729.patch +Patch5: https://github.com/bluebird75/winpdb/commit/ed617311de97300c1ce9de9ee6931dc7141cfd93.patch +Patch6: winpdb-2.0.0.1-no-imp.patch BuildArch: noarch BuildRequires: python3-devel, desktop-file-utils -BuildRequires: python3-setuptools +BuildRequires: python3-setuptools, dos2unix Requires: python3-crypto, python3-wxpython4 Provides: winpdb-reborn = %{version}-%{release} @@ -26,10 +26,17 @@ multiple threads, namespace modification, embedded debugging, encrypted communication and speed of up to 20 times that of pdb. %prep -%setup -q -n %{name}-WINPDB_1_5_0 -%patch -P0 -p1 -b .dev5 -%patch -P1 -p1 -b .colorterm-fix -%patch -P2 -p1 -b .bytes-fix +%setup -q -n %{name}-reborn-%{version} +for i in *.py rpdb/*.py; do + dos2unix $i +done +%patch -P0 -p1 -b .typofix +%patch -P1 -p1 -b .deprecated-function +%patch -P2 -p1 -b .undefined +%patch -P3 -p1 -b .small-typo +%patch -P4 -p1 -b .no-print-if-no-file +%patch -P5 -p1 -b .use-public-stderr +%patch -P6 -p1 -b .no-imp sed -i 's|/usr/bin/env python|/usr/bin/python3|g' rpdb2.py sed -i 's|/usr/bin/env python|/usr/bin/python3|g' winpdb.py @@ -50,13 +57,17 @@ desktop-file-install \ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sitelib}/winpdb.py %files -%doc README.rst +%doc README.md %{_bindir}/* %{python3_sitelib}/* %{_datadir}/applications/*.desktop %{_datadir}/pixmaps/%{name}.png %changelog +* Wed Mar 12 2025 Tom Callaway - 2.0.0.1-1 +- update to 2.0.0.1 + latest commits +- apply fix for removed imp.load_source() + * Sun Jan 19 2025 Fedora Release Engineering - 2.0.0-0.21.dev5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From 950d1db51b7c4252d1d792e8af9568a978d19a94 Mon Sep 17 00:00:00 2001 From: Python Maint Date: Mon, 2 Jun 2025 20:54:01 +0200 Subject: [PATCH 31/37] Rebuilt for Python 3.14 --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 8505967..7b3a340 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: An advanced python debugger License: GPL-2.0-or-later URL: https://pypi.org/project/winpdb-reborn @@ -64,6 +64,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Mon Jun 02 2025 Python Maint - 2.0.0.1-2 +- Rebuilt for Python 3.14 + * Wed Mar 12 2025 Tom Callaway - 2.0.0.1-1 - update to 2.0.0.1 + latest commits - apply fix for removed imp.load_source() From 2718cc9f8922cefc2a5220b9a2ae935015b8b841 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 25 Jul 2025 20:27:07 +0000 Subject: [PATCH 32/37] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 7b3a340..0ba1764 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0.1 -Release: 2%{?dist} +Release: 3%{?dist} Summary: An advanced python debugger License: GPL-2.0-or-later URL: https://pypi.org/project/winpdb-reborn @@ -64,6 +64,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Jul 25 2025 Fedora Release Engineering - 2.0.0.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + * Mon Jun 02 2025 Python Maint - 2.0.0.1-2 - Rebuilt for Python 3.14 From ba516a52b340d22e0bcc62dff30801eec62be5ca Mon Sep 17 00:00:00 2001 From: Python Maint Date: Fri, 15 Aug 2025 15:23:03 +0200 Subject: [PATCH 33/37] Rebuilt for Python 3.14.0rc2 bytecode --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 0ba1764..0c49ee2 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0.1 -Release: 3%{?dist} +Release: 4%{?dist} Summary: An advanced python debugger License: GPL-2.0-or-later URL: https://pypi.org/project/winpdb-reborn @@ -64,6 +64,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Aug 15 2025 Python Maint - 2.0.0.1-4 +- Rebuilt for Python 3.14.0rc2 bytecode + * Fri Jul 25 2025 Fedora Release Engineering - 2.0.0.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild From 044647d3474cb57eafc3f659c38b63cd38abfd3a Mon Sep 17 00:00:00 2001 From: Python Maint Date: Fri, 19 Sep 2025 15:03:26 +0200 Subject: [PATCH 34/37] Rebuilt for Python 3.14.0rc3 bytecode --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 0c49ee2..55ccadc 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0.1 -Release: 4%{?dist} +Release: 5%{?dist} Summary: An advanced python debugger License: GPL-2.0-or-later URL: https://pypi.org/project/winpdb-reborn @@ -64,6 +64,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Sep 19 2025 Python Maint - 2.0.0.1-5 +- Rebuilt for Python 3.14.0rc3 bytecode + * Fri Aug 15 2025 Python Maint - 2.0.0.1-4 - Rebuilt for Python 3.14.0rc2 bytecode From 233fc8ea0ac02c0cf803a38f759c51e9a71d1a86 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Sat, 17 Jan 2026 20:16:16 +0000 Subject: [PATCH 35/37] Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 55ccadc..c5d0769 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0.1 -Release: 5%{?dist} +Release: 6%{?dist} Summary: An advanced python debugger License: GPL-2.0-or-later URL: https://pypi.org/project/winpdb-reborn @@ -64,6 +64,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Sat Jan 17 2026 Fedora Release Engineering - 2.0.0.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + * Fri Sep 19 2025 Python Maint - 2.0.0.1-5 - Rebuilt for Python 3.14.0rc3 bytecode From b84e50ac0189c484395d203b6baa39ed5e0011ba Mon Sep 17 00:00:00 2001 From: Python Maint Date: Wed, 3 Jun 2026 17:50:11 +0200 Subject: [PATCH 36/37] Rebuilt for Python 3.15 --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index c5d0769..47bcfcd 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0.1 -Release: 6%{?dist} +Release: 7%{?dist} Summary: An advanced python debugger License: GPL-2.0-or-later URL: https://pypi.org/project/winpdb-reborn @@ -64,6 +64,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Wed Jun 03 2026 Python Maint - 2.0.0.1-7 +- Rebuilt for Python 3.15 + * Sat Jan 17 2026 Fedora Release Engineering - 2.0.0.1-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild From ee0d75be59a44c12f5750e17bca1b359385f3842 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 17 Jul 2026 08:50:06 +0000 Subject: [PATCH 37/37] Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild --- winpdb.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/winpdb.spec b/winpdb.spec index 47bcfcd..2eb1da8 100644 --- a/winpdb.spec +++ b/winpdb.spec @@ -1,6 +1,6 @@ Name: winpdb Version: 2.0.0.1 -Release: 7%{?dist} +Release: 8%{?dist} Summary: An advanced python debugger License: GPL-2.0-or-later URL: https://pypi.org/project/winpdb-reborn @@ -64,6 +64,9 @@ chmod +x $RPM_BUILD_ROOT%{python3_sitelib}/rpdb2.py $RPM_BUILD_ROOT%{python3_sit %{_datadir}/pixmaps/%{name}.png %changelog +* Fri Jul 17 2026 Fedora Release Engineering - 2.0.0.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + * Wed Jun 03 2026 Python Maint - 2.0.0.1-7 - Rebuilt for Python 3.15