Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gns3-gui for openSUSE:Factory checked in at 2023-06-22 23:26:15 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gns3-gui (Old) and /work/SRC/openSUSE:Factory/.gns3-gui.new.15902 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gns3-gui" Thu Jun 22 23:26:15 2023 rev:18 rq:1094588 version:2.2.40.1 Changes: -------- --- /work/SRC/openSUSE:Factory/gns3-gui/gns3-gui.changes 2023-03-19 00:30:51.452170716 +0100 +++ /work/SRC/openSUSE:Factory/.gns3-gui.new.15902/gns3-gui.changes 2023-06-22 23:26:41.606035075 +0200 @@ -1,0 +2,26 @@ +Mon Jun 19 15:26:19 UTC 2023 - Ben Greiner <c...@bnavigator.de> + + +- Update to 2.2.40.1 + * Change log messages for Websocket errors + * Do not proceed if an appliance symbol cannot be downloaded. Ref + #3466 + * Delete a node or link from topology summary view using Delete + key. Ref #3445 + * Fix "Start the capture visualization program" checkbox works + only one (first) time for a given link. Fixes #3442 + * Let the selected link style applied when editing a link. Fixes + #3460 + * Fix hovered color shown in style editing dialog. Fixes #3460 +- Release 2.2.39 + * Fix nodes are not snapped to the grid at the moment of creation + * Upgrade distro and aiohttp dependencies +- Remove version unpinnings: Not required for Tumbleweed, older + distributions have failed to provide the lowered requirements + already months ago +- Remove old python-sip (v4) from BuildRequires: not needed +- Remove unused old distro install methods, replace by PEP517 + pyproject macros +- Remove gns3-gui_fix_desktop_file.patch replace by macro + +------------------------------------------------------------------- Old: ---- gns3-gui-2.2.38.tar.gz gns3-gui_fix_desktop_file.patch New: ---- gns3-gui-2.2.40.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gns3-gui.spec ++++++ --- /var/tmp/diff_new_pack.LmDBKG/_old 2023-06-22 23:26:42.162037910 +0200 +++ /var/tmp/diff_new_pack.LmDBKG/_new 2023-06-22 23:26:42.174037972 +0200 @@ -17,42 +17,37 @@ Name: gns3-gui -Version: 2.2.38 +Version: 2.2.40.1 Release: 0 Summary: GNS3 graphical interface for the GNS3 server License: GPL-3.0-or-later Group: Productivity/Networking/Other URL: http://github.com/GNS3/%{name} Source: https://github.com/GNS3/gns3-gui/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -Patch0: %{name}_fix_desktop_file.patch BuildRequires: fdupes BuildRequires: hicolor-icon-theme BuildRequires: python-rpm-macros +BuildRequires: python3-pip BuildRequires: python3-setuptools +BuildRequires: python3-wheel BuildRequires: update-desktop-files -%if 0%{?suse_version} > 1500 -Requires: python3-jsonschema >= 3.2.0 -%else -Requires: python3-jsonschema < 3 -Requires: python3-jsonschema >= 2.4.0 -%endif Requires: python3-distro >= 1.6.0 -Requires: python3-psutil >= 2.2.1 +Requires: python3-jsonschema >= 4.17.3 +Requires: python3-psutil >= 5.9.4 Requires: python3-qt5 -Requires: python3-sentry-sdk >= 1.5.4 +Requires: python3-sentry-sdk >= 1.17.0 Recommends: gns3-server Recommends: libcap-progs Recommends: sudo Recommends: telnet BuildArch: noarch # SECTION test requirements -BuildRequires: python3-distro >= 1.7.0 -BuildRequires: python3-jsonschema >= 2.4.0 -BuildRequires: python3-psutil >= 2.2.1 +BuildRequires: python3-distro >= 1.8.0 +BuildRequires: python3-jsonschema >= 4.17.3 +BuildRequires: python3-psutil >= 5.9.4 BuildRequires: python3-pytest BuildRequires: python3-qt5 -BuildRequires: python3-sentry-sdk >= 1.5.4 -BuildRequires: python3-sip +BuildRequires: python3-sentry-sdk >= 1.17.0 BuildRequires: xvfb-run # /SECTION @@ -75,30 +70,21 @@ # Relax strict requirements sed -i -r 's/==/>=/g' requirements.txt -sed -i -r 's/sentry-sdk.*//g' requirements.txt +sed -i -r '/jsonschema/ s/,<.*$//' requirements.txt +sed -i -r '/sentry-sdk/ s/,<.*$//' requirements.txt sed -i -r '/setuptools/d' requirements.txt -# Lower psutil>=5.8.0 -sed -i -r 's/psutil>=5.9.4/psutil>=5.8.0/' requirements.txt -sed -i -r 's/distro>=1.7.*/distro>=1.6.0/' requirements.txt -sed -i -r 's/jsonschema>=4.17.3/jsonschema>=3.2.0/' requirements.txt +# It's required but missing +echo qt5 >> requirements.txt # Disable update alerts sed -i 's/"check_for_update": True,/"check_for_update": False,/' gns3/settings.py # Disable anonymous data collection sed -i 's/"send_stats": True,/"send_stats": False,/' gns3/settings.py %build -%if 0%{?suse_version} > 1315 -%python3_build -%else -python3 setup.py build -%endif +%python3_pyproject_wheel %install -%if 0%{?suse_version} > 1315 -%python3_install -%else -python3 setup.py install --root=%{buildroot} --prefix=%{_prefix} -%endif +%python3_pyproject_install rm %{buildroot}/%{python3_sitelib}/gns3/static/.keep # @@ -107,24 +93,20 @@ find %{buildroot}/%{python3_sitelib}/gns3 -name "*.svg" -exec chmod -x {} \; # install -D -m0644 %{name}.appdata.xml %{buildroot}/%{_datadir}/appdata/gns3.appdata.xml -%fdupes %{buildroot} +%suse_update_desktop_file gns3 System Emulator +%fdupes %{buildroot}%{python3_sitelib} +%fdupes %{buildroot}%{_datadir}/icons +%check rm tests/test_main_window.py xvfb-run python3 -m pytest -rs -%post -%{_bindir}/update-mime-database %{_datadir}/mime > /dev/null 2>&1 || : -%{_bindir}/update-desktop-database - -%postun -%{_bindir}/update-mime-database %{_datadir}/mime > /dev/null 2>&1 || : -%{_bindir}/update-desktop-database - %files %license LICENSE %doc AUTHORS README.md %{_bindir}/gns3 -%{python3_sitelib}/gns3* +%{python3_sitelib}/gns3 +%{python3_sitelib}/gns3_gui-%{version}.dist-info %{_datadir}/icons/hicolor/* %{_datadir}/applications/gns3.desktop %{_datadir}/mime/packages/gns3-gui.xml ++++++ gns3-gui-2.2.38.tar.gz -> gns3-gui-2.2.40.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/CHANGELOG new/gns3-gui-2.2.40.1/CHANGELOG --- old/gns3-gui-2.2.38/CHANGELOG 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/CHANGELOG 2023-06-10 12:36:40.000000000 +0200 @@ -1,5 +1,23 @@ # Change Log +## 2.2.40.1 10/06/2023 + +* No changes + +## 2.2.40 06/06/2023 + +* Change log messages for Websocket errors +* Do not proceed if an appliance symbol cannot be downloaded. Ref #3466 +* Delete a node or link from topology summary view using Delete key. Ref #3445 +* Fix "Start the capture visualization program" checkbox works only one (first) time for a given link. Fixes #3442 +* Let the selected link style applied when editing a link. Fixes #3460 +* Fix hovered color shown in style editing dialog. Fixes #3460 + +## 2.2.39 08/05/2023 + +* Fix nodes are not snapped to the grid at the moment of creation +* Upgrade distro and aiohttp dependencies + ## 2.2.38 28/02/2023 * Add long description content type in setup.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/controller.py new/gns3-gui-2.2.40.1/gns3/controller.py --- old/gns3-gui-2.2.38/gns3/controller.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/controller.py 2023-06-10 12:36:40.000000000 +0200 @@ -449,7 +449,7 @@ @qslot def _websocket_error(self, error): if self._notification_stream: - log.error("Websocket notification stream error: {}".format(self._notification_stream.errorString())) + log.error("Websocket controller notification stream error: {}".format(self._notification_stream.errorString())) self._notification_stream = None self._startListenNotifications() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/crash_report.py new/gns3-gui-2.2.40.1/gns3/crash_report.py --- old/gns3-gui-2.2.38/gns3/crash_report.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/crash_report.py 2023-06-10 12:36:40.000000000 +0200 @@ -51,7 +51,7 @@ Report crash to a third party service """ - DSN = "https://e1c08ac6a2f44c1f96055affc49b2...@o19455.ingest.sentry.io/38506" + DSN = "https://486bdeb4a1a94f129b676eb677f59...@o19455.ingest.sentry.io/38506" _instance = None def __init__(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/dialogs/style_editor_dialog_link.py new/gns3-gui-2.2.40.1/gns3/dialogs/style_editor_dialog_link.py --- old/gns3-gui-2.2.38/gns3/dialogs/style_editor_dialog_link.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/dialogs/style_editor_dialog_link.py 2023-06-10 12:36:40.000000000 +0200 @@ -58,7 +58,9 @@ self.uiRotationLabel.hide() self.uiRotationSpinBox.hide() + link.setHovered(False) # make sure we use the right style pen = link.pen() + link.setHovered(True) self._border_color = pen.color() self.uiBorderColorPushButton.setStyleSheet("background-color: rgba({}, {}, {}, {});".format(self._border_color.red(), @@ -102,6 +104,7 @@ # Store values self._link.setLinkStyle(new_link_style) + self._link.setHovered(False) # allow to see the new style def done(self, result): """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/items/drawing_item.py new/gns3-gui-2.2.40.1/gns3/items/drawing_item.py --- old/gns3-gui-2.2.38/gns3/items/drawing_item.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/items/drawing_item.py 2023-06-10 12:36:40.000000000 +0200 @@ -213,7 +213,7 @@ def itemChange(self, change, value): - if change == QtWidgets.QGraphicsItem.ItemPositionChange and self.isActive() and self._main_window.uiSnapToGridAction.isChecked(): + if change == QtWidgets.QGraphicsItem.ItemPositionChange and self._main_window.uiSnapToGridAction.isChecked(): grid_size = self._graphics_view.drawingGridSize() mid_x = self.boundingRect().width() / 2 value.setX((grid_size * round((value.x() + mid_x) / grid_size)) - mid_x) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/items/link_item.py new/gns3-gui-2.2.40.1/gns3/items/link_item.py --- old/gns3-gui-2.2.38/gns3/items/link_item.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/items/link_item.py 2023-06-10 12:36:40.000000000 +0200 @@ -320,13 +320,13 @@ if not sip_is_deleted(self): # create the contextual menu + self.setHovered(True) self.setAcceptHoverEvents(False) menu = QtWidgets.QMenu() self.populateLinkContextualMenu(menu) menu.exec_(QtGui.QCursor.pos()) self.setAcceptHoverEvents(True) - self._hovered = False - self.adjust() + self.setHovered(False) def keyPressEvent(self, event): """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/items/node_item.py new/gns3-gui-2.2.40.1/gns3/items/node_item.py --- old/gns3-gui-2.2.38/gns3/items/node_item.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/items/node_item.py 2023-06-10 12:36:40.000000000 +0200 @@ -108,6 +108,9 @@ if node.initialized(): self.createdSlot(node.id()) + if self._main_window.uiSnapToGridAction.isChecked(): + self.setPos(QtCore.QPointF(self._node.x() + 0.1, self._node.y())) + def updateNode(self): """ Sync change to the node @@ -466,7 +469,7 @@ :param value: value of the change """ - if change == QtWidgets.QGraphicsItem.ItemPositionChange and self.isActive() and self._main_window.uiSnapToGridAction.isChecked(): + if change == QtWidgets.QGraphicsItem.ItemPositionChange and self._main_window.uiSnapToGridAction.isChecked(): grid_size = self._main_window.uiGraphicsView.nodeGridSize() mid_x = self.boundingRect().width() / 2 value.setX((grid_size * round((value.x() + mid_x) / grid_size)) - mid_x) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/packet_capture.py new/gns3-gui-2.2.40.1/gns3/packet_capture.py --- old/gns3-gui-2.2.38/gns3/packet_capture.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/packet_capture.py 2023-06-10 12:36:40.000000000 +0200 @@ -112,15 +112,20 @@ """ Starts the packet capture reader. """ + self._startPacketCommand(link, self.settings()["packet_capture_reader_command"]) def stopPacketCaptureReader(self, link): """ Stop the packet capture reader """ - if link in self._tail_process and self._tail_process[link].poll() is None: + + if link in self._tail_process: log.debug("Stopping packet capture reader for link {}".format(link.link_id())) - self._tail_process[link].kill() + try: + self._tail_process[link].kill() + except (PermissionError, OSError): + pass del self._tail_process[link] def startPacketCaptureAnalyzer(self, link): @@ -183,14 +188,14 @@ QtWidgets.QMessageBox.critical(self.parent(), "Packet capture", "Can't create packet capture file {}: {}".format(capture_file_path, str(e))) return - if link in self._tail_process and self._tail_process[link].poll() is None: + if link in self._tail_process: try: self._tail_process[link].kill() except (PermissionError, OSError): # Sometimes we have condition on windows where the process is in the process to quit pass del self._tail_process[link] - if link in self._capture_reader_process and self._capture_reader_process[link].poll() is None: + if link in self._capture_reader_process: try: self._capture_reader_process[link].kill() except (PermissionError, OSError): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/project.py new/gns3-gui-2.2.40.1/gns3/project.py --- old/gns3-gui-2.2.38/gns3/project.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/project.py 2023-06-10 12:36:40.000000000 +0200 @@ -654,7 +654,7 @@ @qslot def _websocket_error(self, error): if self._notification_stream: - log.error(self._notification_stream.errorString()) + log.error("Websocket project notification stream error: {}".format(self._notification_stream.errorString())) self._notification_stream = None self._startListenNotifications() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/registry/appliance_to_template.py new/gns3-gui-2.2.40.1/gns3/registry/appliance_to_template.py --- old/gns3-gui-2.2.38/gns3/registry/appliance_to_template.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/registry/appliance_to_template.py 2023-06-10 12:36:40.000000000 +0200 @@ -197,7 +197,8 @@ url = "https://raw.githubusercontent.com/GNS3/gns3-registry/master/symbols/{}".format(symbol_id) try: - self._downloadApplianceSymbol(url, path) + if not self._downloadApplianceSymbol(url, path): + return None controller.clearStaticCache() if controller.isRemote(): controller.uploadSymbol(symbol_id, path) @@ -230,5 +231,7 @@ log.debug("Error while saving appliance symbol to '{}': {}".format(path, e)) raise log.debug("Appliance symbol downloaded and saved to '{}'".format(path)) + return True else: - log.warning("Error when downloading appliance symbol from '{}': {}".format(url, reply.errorString())) + log.error("Error when downloading appliance symbol from '{}': {}".format(url, reply.errorString())) + return False diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/topology_summary_view.py new/gns3-gui-2.2.40.1/gns3/topology_summary_view.py --- old/gns3-gui-2.2.38/gns3/topology_summary_view.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/topology_summary_view.py 2023-06-10 12:36:40.000000000 +0200 @@ -415,3 +415,22 @@ for link in self._topology.links(): if link.suspended(): link.toggleSuspend() + + def keyPressEvent(self, event): + """ + Handles key press events + """ + + from .main_window import MainWindow + view = MainWindow.instance().uiGraphicsView + # only deleting a link or node is supported for now + if event.key() == QtCore.Qt.Key_Delete: + current_item = self.currentItem() + if isinstance(current_item, TopologyNodeItem): + current_item.node().delete() + else: + link = current_item.data(0, QtCore.Qt.UserRole) + for item in view.scene().items(): + if isinstance(item, LinkItem) and item.link() == link: + item.delete() + super().keyPressEvent(event) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/gns3/version.py new/gns3-gui-2.2.40.1/gns3/version.py --- old/gns3-gui-2.2.38/gns3/version.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/gns3/version.py 2023-06-10 12:36:40.000000000 +0200 @@ -23,8 +23,8 @@ # or negative for a release candidate or beta (after the base version # number has been incremented) -__version__ = "2.2.38" -__version_info__ = (2, 2, 38, 0) +__version__ = "2.2.40.1" +__version_info__ = (2, 2, 40, 0) if "dev" in __version__: try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/requirements.txt new/gns3-gui-2.2.40.1/requirements.txt --- old/gns3-gui-2.2.38/requirements.txt 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/requirements.txt 2023-06-10 12:36:40.000000000 +0200 @@ -1,7 +1,7 @@ jsonschema>=4.17.3,<4.18; python_version >= '3.7' jsonschema==3.2.0; python_version < '3.7' # v3.2.0 is the last version to support Python 3.6 -sentry-sdk==1.12.1,<1.13 +sentry-sdk==1.17.0,<1.18 psutil==5.9.4 -distro>=1.7.0 +distro>=1.8.0 setuptools>=60.8.1; python_version >= '3.7' setuptools==59.6.0; python_version < '3.7' # v59.6.0 is the last version to support Python 3.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gns3-gui-2.2.38/tests/items/test_line_item.py new/gns3-gui-2.2.40.1/tests/items/test_line_item.py --- old/gns3-gui-2.2.38/tests/items/test_line_item.py 2023-02-28 06:35:17.000000000 +0100 +++ new/gns3-gui-2.2.40.1/tests/items/test_line_item.py 2023-06-10 12:36:40.000000000 +0200 @@ -61,6 +61,7 @@ def test_fromSvg(project, controller): line = LineItem(project=project) + line._main_window.uiSnapToGridAction.isChecked = lambda: False line.setPos(50, 84) line.fromSvg('<svg height="150" width="250"><line x1="0" y1="0" x2="250" y2="150" stroke-width="5" stroke="#0000ff" stroke-dasharray="5, 25, 25" /></svg>') assert line.line().x1() == 0 @@ -75,6 +76,7 @@ def test_fromSvg_top_direction(project, controller): line = LineItem(project=project) + line._main_window.uiSnapToGridAction.isChecked = lambda: False line.setPos(50, 84) line.fromSvg('<svg height="150" width="250"><line x1="0" y1="150" x2="250" y2="0" stroke-width="5" stroke="#0000ff" stroke-dasharray="5, 25, 25" /></svg>') assert line.line().x1() == 0