eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py

changeset 7774
9eed155411f0
parent 7771
787a6b3f8c9f
child 7779
757334671130
equal deleted inserted replaced
7773:fe42bd17d4fe 7774:9eed155411f0
11 11
12 import os 12 import os
13 13
14 import pysvn 14 import pysvn
15 15
16 from PyQt5.QtCore import QMutexLocker, QFileInfo, QDateTime, Qt, pyqtSlot 16 from PyQt5.QtCore import QFileInfo, QDateTime, Qt, pyqtSlot
17 from PyQt5.QtGui import QTextCursor 17 from PyQt5.QtGui import QTextCursor
18 from PyQt5.QtWidgets import QWidget, QDialogButtonBox 18 from PyQt5.QtWidgets import QWidget, QDialogButtonBox
19 19
20 from E5Gui.E5Application import e5App 20 from E5Gui.E5Application import e5App
21 from E5Gui import E5MessageBox, E5FileDialog 21 from E5Gui import E5MessageBox, E5FileDialog
22 from E5Gui.E5OverrideCursor import E5OverrideCursor 22 from E5Gui.E5OverrideCursor import E5OverrideCursor
23
24 from E5Utilities.E5MutexLocker import E5MutexLocker
23 25
24 from .SvnDialogMixin import SvnDialogMixin 26 from .SvnDialogMixin import SvnDialogMixin
25 from .Ui_SvnDiffDialog import Ui_SvnDiffDialog 27 from .Ui_SvnDiffDialog import Ui_SvnDiffDialog
26 from .SvnDiffHighlighter import SvnDiffHighlighter 28 from .SvnDiffHighlighter import SvnDiffHighlighter
27 29
198 else: 200 else:
199 dname, fname = self.vcs.splitPath(fn) 201 dname, fname = self.vcs.splitPath(fn)
200 fnames = [fname] 202 fnames = [fname]
201 203
202 with E5OverrideCursor(): 204 with E5OverrideCursor():
203 locker = QMutexLocker(self.vcs.vcsExecutionMutex)
204 cwd = os.getcwd() 205 cwd = os.getcwd()
205 os.chdir(dname) 206 os.chdir(dname)
206 try: 207 try:
207 dname = e5App().getObject('Project').getRelativePath(dname) 208 dname = e5App().getObject('Project').getRelativePath(dname)
208 if dname: 209 if dname:
209 dname += "/" 210 dname += "/"
210 for name in fnames: 211 with E5MutexLocker(self.vcs.vcsExecutionMutex):
211 self.__showError( 212 for name in fnames:
212 self.tr("Processing file '{0}'...\n").format(name)) 213 self.__showError(
213 if urls is not None: 214 self.tr("Processing file '{0}'...\n").format(name))
214 url1 = "{0}/{1}{2}".format(urls[0], dname, name) 215 if urls is not None:
215 url2 = "{0}/{1}{2}".format(urls[1], dname, name) 216 url1 = "{0}/{1}{2}".format(urls[0], dname, name)
216 if summary: 217 url2 = "{0}/{1}{2}".format(urls[1], dname, name)
217 diff_summary = self.client.diff_summarize( 218 if summary:
218 url1, revision1=rev1, 219 diff_summary = self.client.diff_summarize(
219 url_or_path2=url2, revision2=rev2, 220 url1, revision1=rev1,
220 recurse=recurse) 221 url_or_path2=url2, revision2=rev2,
221 diff_list = [] 222 recurse=recurse)
222 for diff_sum in diff_summary: 223 diff_list = []
223 path = diff_sum['path'] 224 for diff_sum in diff_summary:
224 diff_list.append("{0} {1}".format( 225 path = diff_sum['path']
225 self.__getDiffSummaryKind( 226 diff_list.append("{0} {1}".format(
226 diff_sum['summarize_kind']), 227 self.__getDiffSummaryKind(
227 path)) 228 diff_sum['summarize_kind']),
228 diffText = os.linesep.join(diff_list) 229 path))
230 diffText = os.linesep.join(diff_list)
231 else:
232 diffText = self.client.diff(
233 tmpdir,
234 url1, revision1=rev1,
235 url_or_path2=url2, revision2=rev2,
236 recurse=recurse)
229 else: 237 else:
230 diffText = self.client.diff( 238 if pegRev is not None:
231 tmpdir, 239 diffText = self.client.diff_peg(
232 url1, revision1=rev1, 240 tmpdir, name,
233 url_or_path2=url2, revision2=rev2, 241 peg_revision=self.__getVersionArg(pegRev),
234 recurse=recurse) 242 revision_start=rev1, revision_end=rev2,
235 else: 243 recurse=recurse)
236 if pegRev is not None: 244 else:
237 diffText = self.client.diff_peg( 245 diffText = self.client.diff(
238 tmpdir, name, 246 tmpdir, name,
239 peg_revision=self.__getVersionArg(pegRev), 247 revision1=rev1, revision2=rev2,
240 revision_start=rev1, revision_end=rev2, 248 recurse=recurse)
241 recurse=recurse) 249 counter = 0
242 else: 250 for line in diffText.splitlines():
243 diffText = self.client.diff( 251 if (
244 tmpdir, name, 252 line.startswith("--- ") or
245 revision1=rev1, revision2=rev2, recurse=recurse) 253 line.startswith("+++ ")
246 counter = 0 254 ):
247 for line in diffText.splitlines(): 255 self.__processFileLine(line)
248 if line.startswith("--- ") or line.startswith("+++ "): 256
249 self.__processFileLine(line) 257 self.__appendText(
250 258 "{0}{1}".format(line, os.linesep))
251 self.__appendText("{0}{1}".format(line, os.linesep)) 259 counter += 1
252 counter += 1 260 if counter == 30:
253 if counter == 30: 261 # check for cancel every 30 lines
254 # check for cancel every 30 lines 262 counter = 0
255 counter = 0 263 if self._clientCancelCallback():
256 if self._clientCancelCallback(): 264 break
257 break 265 if self._clientCancelCallback():
258 if self._clientCancelCallback(): 266 break
259 break
260 except pysvn.ClientError as e: 267 except pysvn.ClientError as e:
261 self.__showError(e.args[0]) 268 self.__showError(e.args[0])
262 locker.unlock()
263 os.chdir(cwd) 269 os.chdir(cwd)
264 self.__finish() 270 self.__finish()
265 271
266 if self.paras == 0: 272 if self.paras == 0:
267 self.contents.setPlainText(self.tr('There is no difference.')) 273 self.contents.setPlainText(self.tr('There is no difference.'))

eric ide

mercurial