--- a/eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py Sat Oct 10 15:17:29 2020 +0200 +++ b/eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py Sat Oct 10 16:03:53 2020 +0200 @@ -13,7 +13,7 @@ import pysvn -from PyQt5.QtCore import QMutexLocker, QFileInfo, QDateTime, Qt, pyqtSlot +from PyQt5.QtCore import QFileInfo, QDateTime, Qt, pyqtSlot from PyQt5.QtGui import QTextCursor from PyQt5.QtWidgets import QWidget, QDialogButtonBox @@ -21,6 +21,8 @@ from E5Gui import E5MessageBox, E5FileDialog from E5Gui.E5OverrideCursor import E5OverrideCursor +from E5Utilities.E5MutexLocker import E5MutexLocker + from .SvnDialogMixin import SvnDialogMixin from .Ui_SvnDiffDialog import Ui_SvnDiffDialog from .SvnDiffHighlighter import SvnDiffHighlighter @@ -200,66 +202,70 @@ fnames = [fname] with E5OverrideCursor(): - locker = QMutexLocker(self.vcs.vcsExecutionMutex) cwd = os.getcwd() os.chdir(dname) try: dname = e5App().getObject('Project').getRelativePath(dname) if dname: dname += "/" - for name in fnames: - self.__showError( - self.tr("Processing file '{0}'...\n").format(name)) - if urls is not None: - url1 = "{0}/{1}{2}".format(urls[0], dname, name) - url2 = "{0}/{1}{2}".format(urls[1], dname, name) - if summary: - diff_summary = self.client.diff_summarize( - url1, revision1=rev1, - url_or_path2=url2, revision2=rev2, - recurse=recurse) - diff_list = [] - for diff_sum in diff_summary: - path = diff_sum['path'] - diff_list.append("{0} {1}".format( - self.__getDiffSummaryKind( - diff_sum['summarize_kind']), - path)) - diffText = os.linesep.join(diff_list) + with E5MutexLocker(self.vcs.vcsExecutionMutex): + for name in fnames: + self.__showError( + self.tr("Processing file '{0}'...\n").format(name)) + if urls is not None: + url1 = "{0}/{1}{2}".format(urls[0], dname, name) + url2 = "{0}/{1}{2}".format(urls[1], dname, name) + if summary: + diff_summary = self.client.diff_summarize( + url1, revision1=rev1, + url_or_path2=url2, revision2=rev2, + recurse=recurse) + diff_list = [] + for diff_sum in diff_summary: + path = diff_sum['path'] + diff_list.append("{0} {1}".format( + self.__getDiffSummaryKind( + diff_sum['summarize_kind']), + path)) + diffText = os.linesep.join(diff_list) + else: + diffText = self.client.diff( + tmpdir, + url1, revision1=rev1, + url_or_path2=url2, revision2=rev2, + recurse=recurse) else: - diffText = self.client.diff( - tmpdir, - url1, revision1=rev1, - url_or_path2=url2, revision2=rev2, - recurse=recurse) - else: - if pegRev is not None: - diffText = self.client.diff_peg( - tmpdir, name, - peg_revision=self.__getVersionArg(pegRev), - revision_start=rev1, revision_end=rev2, - recurse=recurse) - else: - diffText = self.client.diff( - tmpdir, name, - revision1=rev1, revision2=rev2, recurse=recurse) - counter = 0 - for line in diffText.splitlines(): - if line.startswith("--- ") or line.startswith("+++ "): - self.__processFileLine(line) - - self.__appendText("{0}{1}".format(line, os.linesep)) - counter += 1 - if counter == 30: - # check for cancel every 30 lines - counter = 0 - if self._clientCancelCallback(): - break - if self._clientCancelCallback(): - break + if pegRev is not None: + diffText = self.client.diff_peg( + tmpdir, name, + peg_revision=self.__getVersionArg(pegRev), + revision_start=rev1, revision_end=rev2, + recurse=recurse) + else: + diffText = self.client.diff( + tmpdir, name, + revision1=rev1, revision2=rev2, + recurse=recurse) + counter = 0 + for line in diffText.splitlines(): + if ( + line.startswith("--- ") or + line.startswith("+++ ") + ): + self.__processFileLine(line) + + self.__appendText( + "{0}{1}".format(line, os.linesep)) + counter += 1 + if counter == 30: + # check for cancel every 30 lines + counter = 0 + if self._clientCancelCallback(): + break + if self._clientCancelCallback(): + break except pysvn.ClientError as e: self.__showError(e.args[0]) - locker.unlock() os.chdir(cwd) self.__finish()