Sat, 26 Apr 2025 12:34:32 +0200
MicroPython
- Added a configuration option to disable the support for the no longer produced Pimoroni Pico Wireless Pack.
# -*- coding: utf-8 -*- # Copyright (c) 2003 - 2025 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing a dialog to show repository related information for a file/directory. """ import os import pysvn from PyQt6.QtCore import Qt from PyQt6.QtWidgets import QApplication, QDialog from eric7.EricUtilities.EricMutexLocker import EricMutexLocker from eric7.VCS.Ui_RepositoryInfoDialog import Ui_VcsRepositoryInfoDialog from .SvnDialogMixin import SvnDialogMixin from .SvnUtilities import formatTime class SvnInfoDialog(QDialog, SvnDialogMixin, Ui_VcsRepositoryInfoDialog): """ Class implementing a dialog to show repository related information for a file/directory. """ def __init__(self, vcs, parent=None): """ Constructor @param vcs reference to the vcs object @type Subversion @param parent parent widget @type QWidget """ super().__init__(parent) self.setupUi(self) SvnDialogMixin.__init__(self) self.setWindowFlags(Qt.WindowType.Window) self.vcs = vcs self.client = self.vcs.getClient() self.client.callback_cancel = self._clientCancelCallback self.client.callback_get_login = self._clientLoginCallback self.client.callback_ssl_server_trust_prompt = ( self._clientSslServerTrustPromptCallback ) self.show() QApplication.processEvents() def start(self, projectPath, fn): """ Public slot to start the svn info command. @param projectPath path name of the project @type str @param fn file or directory name relative to the project @type str """ cwd = os.getcwd() os.chdir(projectPath) try: with EricMutexLocker(self.vcs.vcsExecutionMutex): entries = self.client.info2(fn, recurse=False) infoStr = "<table>" for path, info in entries: infoStr += self.tr( "<tr><td><b>Path (relative to project):</b></td>" "<td>{0}</td></tr>" ).format(path) if info["URL"]: infoStr += self.tr( "<tr><td><b>Url:</b></td><td>{0}</td></tr>" ).format(info["URL"]) if info["rev"]: infoStr += self.tr( "<tr><td><b>Revision:</b></td><td>{0}</td></tr>" ).format(info["rev"].number) if info["repos_root_URL"]: infoStr += self.tr( "<tr><td><b>Repository root URL:</b></td><td>{0}</td></tr>" ).format(info["repos_root_URL"]) if info["repos_UUID"]: infoStr += self.tr( "<tr><td><b>Repository UUID:</b></td><td>{0}</td></tr>" ).format(info["repos_UUID"]) if info["last_changed_author"]: infoStr += self.tr( "<tr><td><b>Last changed author:</b></td><td>{0}</td></tr>" ).format(info["last_changed_author"]) if info["last_changed_date"]: infoStr += self.tr( "<tr><td><b>Last Changed Date:</b></td><td>{0}</td></tr>" ).format(formatTime(info["last_changed_date"])) if ( info["last_changed_rev"] and info["last_changed_rev"].kind == pysvn.opt_revision_kind.number ): infoStr += self.tr( "<tr><td><b>Last changed revision:</b></td><td>{0}</td></tr>" ).format(info["last_changed_rev"].number) if info["kind"]: if info["kind"] == pysvn.node_kind.file: nodeKind = self.tr("file") elif info["kind"] == pysvn.node_kind.dir: nodeKind = self.tr("directory") elif info["kind"] == pysvn.node_kind.none: nodeKind = self.tr("none") else: nodeKind = self.tr("unknown") infoStr += self.tr( "<tr><td><b>Node kind:</b></td><td>{0}</td></tr>" ).format(nodeKind) if info["lock"]: lockInfo = info["lock"] infoStr += self.tr( "<tr><td><b>Lock Owner:</b></td><td>{0}</td></tr>" ).format(lockInfo["owner"]) infoStr += self.tr( "<tr><td><b>Lock Creation Date:</b></td><td>{0}</td></tr>" ).format(formatTime(lockInfo["creation_date"])) if lockInfo["expiration_date"] is not None: infoStr += self.tr( "<tr><td><b>Lock Expiration Date:</b></td>" "<td>{0}</td></tr>" ).format(formatTime(lockInfo["expiration_date"])) infoStr += self.tr( "<tr><td><b>Lock Token:</b></td><td>{0}</td></tr>" ).format(lockInfo["token"]) infoStr += self.tr( "<tr><td><b>Lock Comment:</b></td><td>{0}</td></tr>" ).format(lockInfo["comment"]) if info["wc_info"]: wcInfo = info["wc_info"] if wcInfo["schedule"]: if wcInfo["schedule"] == pysvn.wc_schedule.normal: schedule = self.tr("normal") elif wcInfo["schedule"] == pysvn.wc_schedule.add: schedule = self.tr("add") elif wcInfo["schedule"] == pysvn.wc_schedule.delete: schedule = self.tr("delete") elif wcInfo["schedule"] == pysvn.wc_schedule.replace: schedule = self.tr("replace") infoStr += self.tr( "<tr><td><b>Schedule:</b></td><td>{0}</td></tr>" ).format(schedule) if wcInfo["copyfrom_url"]: infoStr += self.tr( "<tr><td><b>Copied From URL:</b></td><td>{0}</td></tr>" ).format(wcInfo["copyfrom_url"]) infoStr += self.tr( "<tr><td><b>Copied From Rev:</b></td><td>{0}</td></tr>" ).format(wcInfo["copyfrom_rev"].number) if wcInfo["text_time"]: infoStr += self.tr( "<tr><td><b>Text Last Updated:</b></td><td>{0}</td></tr>" ).format(formatTime(wcInfo["text_time"])) if wcInfo["prop_time"]: infoStr += self.tr( "<tr><td><b>Properties Last Updated:</b></td>" "<td>{0}</td></tr>" ).format(formatTime(wcInfo["prop_time"])) if wcInfo["checksum"]: infoStr += self.tr( "<tr><td><b>Checksum:</b></td><td>{0}</td></tr>" ).format(wcInfo["checksum"]) infoStr += "</table>" self.infoBrowser.setHtml(infoStr) except pysvn.ClientError as e: self.__showError(e.args[0]) os.chdir(cwd) def __showError(self, msg): """ Private slot to show an error message. @param msg error message to show @type str """ infoStr = "<p>{0}</p>".format(msg) self.infoBrowser.setHtml(infoStr)