7 Module implementing the version control systems interface to Subversion. |
7 Module implementing the version control systems interface to Subversion. |
8 """ |
8 """ |
9 |
9 |
10 import os |
10 import os |
11 import shutil |
11 import shutil |
12 import types |
|
13 import urllib.request, urllib.parse, urllib.error |
12 import urllib.request, urllib.parse, urllib.error |
14 import time |
13 import time |
15 |
14 |
16 from PyQt4.QtCore import * |
15 from PyQt4.QtCore import * |
17 from PyQt4.QtGui import * |
16 from PyQt4.QtGui import * |
46 from .SvnUrlSelectionDialog import SvnUrlSelectionDialog |
45 from .SvnUrlSelectionDialog import SvnUrlSelectionDialog |
47 from .SvnRepoBrowserDialog import SvnRepoBrowserDialog |
46 from .SvnRepoBrowserDialog import SvnRepoBrowserDialog |
48 from .SvnStatusMonitorThread import SvnStatusMonitorThread |
47 from .SvnStatusMonitorThread import SvnStatusMonitorThread |
49 |
48 |
50 from .ProjectBrowserHelper import SvnProjectBrowserHelper |
49 from .ProjectBrowserHelper import SvnProjectBrowserHelper |
51 from .ProjectHelper import SvnProjectHelper |
|
52 |
50 |
53 from Plugins.VcsPlugins.vcsSubversion.SvnDialog import SvnDialog as SvnProcessDialog |
51 from Plugins.VcsPlugins.vcsSubversion.SvnDialog import SvnDialog as SvnProcessDialog |
54 |
52 |
55 import Utilities |
53 import Utilities |
56 |
54 |
380 url, projectDir), |
378 url, projectDir), |
381 client) |
379 client) |
382 QApplication.processEvents() |
380 QApplication.processEvents() |
383 locker = QMutexLocker(self.vcsExecutionMutex) |
381 locker = QMutexLocker(self.vcsExecutionMutex) |
384 try: |
382 try: |
385 rev = client.checkout(url, projectDir, recurse) |
383 client.checkout(url, projectDir, recurse) |
386 status = True |
384 status = True |
387 except pysvn.ClientError as e: |
385 except pysvn.ClientError as e: |
388 status = False |
386 status = False |
389 if not noDialog: |
387 if not noDialog: |
390 dlg.showError(e.args[0]) |
388 dlg.showError(e.args[0]) |
441 url, projectDir), |
439 url, projectDir), |
442 client) |
440 client) |
443 QApplication.processEvents() |
441 QApplication.processEvents() |
444 locker = QMutexLocker(self.vcsExecutionMutex) |
442 locker = QMutexLocker(self.vcsExecutionMutex) |
445 try: |
443 try: |
446 rev = client.export(url, projectDir, force = True, recurse = recurse) |
444 client.export(url, projectDir, force = True, recurse = recurse) |
447 status = True |
445 status = True |
448 except pysvn.ClientError as e: |
446 except pysvn.ClientError as e: |
449 status = False |
447 status = False |
450 dlg.showError(e.args[0]) |
448 dlg.showError(e.args[0]) |
451 locker.unlock() |
449 locker.unlock() |
581 "update%s %s" % ((not recurse) and " --non-recursive" or "", |
579 "update%s %s" % ((not recurse) and " --non-recursive" or "", |
582 " ".join(fnames)), |
580 " ".join(fnames)), |
583 client) |
581 client) |
584 QApplication.processEvents() |
582 QApplication.processEvents() |
585 try: |
583 try: |
586 revlist = client.update(fnames, recurse) |
584 client.update(fnames, recurse) |
587 except pysvn.ClientError as e: |
585 except pysvn.ClientError as e: |
588 dlg.showError(e.args[0]) |
586 dlg.showError(e.args[0]) |
589 locker.unlock() |
587 locker.unlock() |
590 if not noDialog: |
588 if not noDialog: |
591 dlg.finish() |
589 dlg.finish() |
1261 if name in names: |
1259 if name in names: |
1262 names[name] = self.canBeCommitted |
1260 names[name] = self.canBeCommitted |
1263 self.statusCache[name] = self.canBeCommitted |
1261 self.statusCache[name] = self.canBeCommitted |
1264 else: |
1262 else: |
1265 self.statusCache[name] = self.canBeAdded |
1263 self.statusCache[name] = self.canBeAdded |
1266 except pysvn.ClientError as e: |
1264 except pysvn.ClientError: |
1267 locker.unlock() # ignore pysvn errors |
1265 locker.unlock() # ignore pysvn errors |
1268 |
1266 |
1269 return names |
1267 return names |
1270 |
1268 |
1271 def clearStatusCache(self): |
1269 def clearStatusCache(self): |
1294 "cleanup %s" % name, |
1292 "cleanup %s" % name, |
1295 client) |
1293 client) |
1296 QApplication.processEvents() |
1294 QApplication.processEvents() |
1297 locker = QMutexLocker(self.vcsExecutionMutex) |
1295 locker = QMutexLocker(self.vcsExecutionMutex) |
1298 try: |
1296 try: |
1299 rev = client.cleanup(name) |
1297 client.cleanup(name) |
1300 except pysvn.ClientError as e: |
1298 except pysvn.ClientError as e: |
1301 dlg.showError(e.args[0]) |
1299 dlg.showError(e.args[0]) |
1302 locker.unlock() |
1300 locker.unlock() |
1303 dlg.finish() |
1301 dlg.finish() |
1304 dlg.exec_() |
1302 dlg.exec_() |
1406 """ |
1404 """ |
1407 client = pysvn.Client() |
1405 client = pysvn.Client() |
1408 locker = QMutexLocker(self.vcsExecutionMutex) |
1406 locker = QMutexLocker(self.vcsExecutionMutex) |
1409 try: |
1407 try: |
1410 entry = client.info(path) |
1408 entry = client.info(path) |
1411 return entry.url |
1409 url = entry.url |
1412 except pysvn.ClientError: |
1410 except pysvn.ClientError: |
1413 return None |
1411 url = None |
|
1412 locker.unlock() |
|
1413 return url |
1414 |
1414 |
1415 def svnResolve(self, name): |
1415 def svnResolve(self, name): |
1416 """ |
1416 """ |
1417 Public method used to resolve conflicts of a file/directory. |
1417 Public method used to resolve conflicts of a file/directory. |
1418 |
1418 |