eric6/Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py

changeset 6942
2602857055c5
parent 6645
ad476851d7e0
child 7192
a22eee00b052
equal deleted inserted replaced
6941:f99d60d6b59b 6942:2602857055c5
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2003 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a dialog to show repository related information for a
8 file/directory.
9 """
10
11 from __future__ import unicode_literals
12
13 import os
14 import sys
15
16 import pysvn
17
18 from PyQt5.QtCore import Qt, QMutexLocker
19 from PyQt5.QtWidgets import QDialog, QApplication
20
21 from .SvnUtilities import formatTime
22 from .SvnDialogMixin import SvnDialogMixin
23 from VCS.Ui_RepositoryInfoDialog import Ui_VcsRepositoryInfoDialog
24
25
26 class SvnInfoDialog(QDialog, SvnDialogMixin, Ui_VcsRepositoryInfoDialog):
27 """
28 Class implementing a dialog to show repository related information
29 for a file/directory.
30 """
31 def __init__(self, vcs, parent=None):
32 """
33 Constructor
34
35 @param vcs reference to the vcs object
36 @param parent parent widget (QWidget)
37 """
38 super(SvnInfoDialog, self).__init__(parent)
39 self.setupUi(self)
40 SvnDialogMixin.__init__(self)
41 self.setWindowFlags(Qt.Window)
42
43 self.vcs = vcs
44
45 self.client = self.vcs.getClient()
46 self.client.callback_cancel = \
47 self._clientCancelCallback
48 self.client.callback_get_login = \
49 self._clientLoginCallback
50 self.client.callback_ssl_server_trust_prompt = \
51 self._clientSslServerTrustPromptCallback
52
53 self.show()
54 QApplication.processEvents()
55
56 def start(self, projectPath, fn):
57 """
58 Public slot to start the svn info command.
59
60 @param projectPath path name of the project (string)
61 @param fn file or directory name relative to the project (string)
62 """
63 locker = QMutexLocker(self.vcs.vcsExecutionMutex)
64 cwd = os.getcwd()
65 os.chdir(projectPath)
66 try:
67 entries = self.client.info2(fn, recurse=False)
68 infoStr = "<table>"
69 for path, info in entries:
70 if sys.version_info[0] == 2:
71 path = path.decode('utf-8')
72 infoStr += self.tr(
73 "<tr><td><b>Path (relative to project):</b></td>"
74 "<td>{0}</td></tr>").format(path)
75 if info['URL']:
76 infoStr += self.tr(
77 "<tr><td><b>Url:</b></td><td>{0}</td></tr>")\
78 .format(info['URL'])
79 if info['rev']:
80 infoStr += self.tr(
81 "<tr><td><b>Revision:</b></td><td>{0}</td></tr>")\
82 .format(info['rev'].number)
83 if info['repos_root_URL']:
84 infoStr += self.tr(
85 "<tr><td><b>Repository root URL:</b></td>"
86 "<td>{0}</td></tr>").format(info['repos_root_URL'])
87 if info['repos_UUID']:
88 infoStr += self.tr(
89 "<tr><td><b>Repository UUID:</b></td>"
90 "<td>{0}</td></tr>").format(info['repos_UUID'])
91 if info['last_changed_author']:
92 infoStr += self.tr(
93 "<tr><td><b>Last changed author:</b></td>"
94 "<td>{0}</td></tr>")\
95 .format(info['last_changed_author'])
96 if info['last_changed_date']:
97 infoStr += self.tr(
98 "<tr><td><b>Last Changed Date:</b></td>"
99 "<td>{0}</td></tr>")\
100 .format(formatTime(info['last_changed_date']))
101 if info['last_changed_rev'] and \
102 info['last_changed_rev'].kind == \
103 pysvn.opt_revision_kind.number:
104 infoStr += self.tr(
105 "<tr><td><b>Last changed revision:</b></td>"
106 "<td>{0}</td></tr>")\
107 .format(info['last_changed_rev'].number)
108 if info['kind']:
109 if info['kind'] == pysvn.node_kind.file:
110 nodeKind = self.tr("file")
111 elif info['kind'] == pysvn.node_kind.dir:
112 nodeKind = self.tr("directory")
113 elif info['kind'] == pysvn.node_kind.none:
114 nodeKind = self.tr("none")
115 else:
116 nodeKind = self.tr("unknown")
117 infoStr += self.tr(
118 "<tr><td><b>Node kind:</b></td><td>{0}</td></tr>")\
119 .format(nodeKind)
120 if info['lock']:
121 lockInfo = info['lock']
122 infoStr += self.tr(
123 "<tr><td><b>Lock Owner:</b></td><td>{0}</td></tr>")\
124 .format(lockInfo['owner'])
125 infoStr += self.tr(
126 "<tr><td><b>Lock Creation Date:</b></td>"
127 "<td>{0}</td></tr>")\
128 .format(formatTime(lockInfo['creation_date']))
129 if lockInfo['expiration_date'] is not None:
130 infoStr += self.tr(
131 "<tr><td><b>Lock Expiration Date:</b></td>"
132 "<td>{0}</td></tr>")\
133 .format(formatTime(lockInfo['expiration_date']))
134 infoStr += self.tr(
135 "<tr><td><b>Lock Token:</b></td><td>{0}</td></tr>")\
136 .format(lockInfo['token'])
137 infoStr += self.tr(
138 "<tr><td><b>Lock Comment:</b></td><td>{0}</td></tr>")\
139 .format(lockInfo['comment'])
140 if info['wc_info']:
141 wcInfo = info['wc_info']
142 if wcInfo['schedule']:
143 if wcInfo['schedule'] == pysvn.wc_schedule.normal:
144 schedule = self.tr("normal")
145 elif wcInfo['schedule'] == pysvn.wc_schedule.add:
146 schedule = self.tr("add")
147 elif wcInfo['schedule'] == pysvn.wc_schedule.delete:
148 schedule = self.tr("delete")
149 elif wcInfo['schedule'] == pysvn.wc_schedule.replace:
150 schedule = self.tr("replace")
151 infoStr += self.tr(
152 "<tr><td><b>Schedule:</b></td><td>{0}</td></tr>")\
153 .format(schedule)
154 if wcInfo['copyfrom_url']:
155 infoStr += self.tr(
156 "<tr><td><b>Copied From URL:</b></td>"
157 "<td>{0}</td></tr>")\
158 .format(wcInfo['copyfrom_url'])
159 infoStr += self.tr(
160 "<tr><td><b>Copied From Rev:</b></td>"
161 "<td>{0}</td></tr>")\
162 .format(wcInfo['copyfrom_rev'].number)
163 if wcInfo['text_time']:
164 infoStr += self.tr(
165 "<tr><td><b>Text Last Updated:</b></td>"
166 "<td>{0}</td></tr>")\
167 .format(formatTime(wcInfo['text_time']))
168 if wcInfo['prop_time']:
169 infoStr += self.tr(
170 "<tr><td><b>Properties Last Updated:</b></td>"
171 "<td>{0}</td></tr>")\
172 .format(formatTime(wcInfo['prop_time']))
173 if wcInfo['checksum']:
174 infoStr += self.tr(
175 "<tr><td><b>Checksum:</b></td><td>{0}</td></tr>")\
176 .format(wcInfo['checksum'])
177 infoStr += "</table>"
178 self.infoBrowser.setHtml(infoStr)
179 except pysvn.ClientError as e:
180 self.__showError(e.args[0])
181 locker.unlock()
182 os.chdir(cwd)
183
184 def __showError(self, msg):
185 """
186 Private slot to show an error message.
187
188 @param msg error message to show (string)
189 """
190 infoStr = "<p>{0}</p>".format(msg)
191 self.infoBrowser.setHtml(infoStr)

eric ide

mercurial