Plugins/VcsPlugins/vcsPySvn/SvnInfoDialog.py

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

eric ide

mercurial