Merge with default branch. Py2 comp.

Mon, 12 Aug 2013 22:21:53 +0200

author
T.Rzepka <Tobias.Rzepka@gmail.com>
date
Mon, 12 Aug 2013 22:21:53 +0200
branch
Py2 comp.
changeset 2847
1843ef6e2656
parent 2846
b852fe4d153a (current diff)
parent 2845
7e55c6268c35 (diff)
child 2911
ce77f0b1ee67

Merge with default branch.

.issues/.properties file | annotate | diff | comparison | revisions
APIs/Python3/eric5.api file | annotate | diff | comparison | revisions
APIs/Python3/eric5.bas file | annotate | diff | comparison | revisions
DataViews/PyCoverageDialog.py file | annotate | diff | comparison | revisions
Debugger/DebugViewer.py file | annotate | diff | comparison | revisions
Documentation/Help/source.qch file | annotate | diff | comparison | revisions
Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
E5Gui/E5Completers.py file | annotate | diff | comparison | revisions
E5Gui/E5SideBar.py file | annotate | diff | comparison | revisions
Helpviewer/HelpTabBar.py file | annotate | diff | comparison | revisions
Helpviewer/HelpTabWidget.py file | annotate | diff | comparison | revisions
Helpviewer/HelpWindow.py file | annotate | diff | comparison | revisions
Helpviewer/PageScreenDialog.py file | annotate | diff | comparison | revisions
Helpviewer/Sync/DirectorySyncHandler.py file | annotate | diff | comparison | revisions
IconEditor/IconEditorWindow.py file | annotate | diff | comparison | revisions
PluginManager/PluginInstallDialog.py file | annotate | diff | comparison | revisions
PluginManager/PluginRepositoryDialog.py file | annotate | diff | comparison | revisions
PluginManager/PluginUninstallDialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Pep8/Pep8Dialog.py file | annotate | diff | comparison | revisions
Plugins/CheckerPlugins/Pep8/pep8.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialUserDataDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgClient.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgLogDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgSummaryDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/HgUtilities.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsMercurial/hg.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsPySvn/subversion.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py file | annotate | diff | comparison | revisions
Plugins/VcsPlugins/vcsSubversion/subversion.py file | annotate | diff | comparison | revisions
Plugins/ViewManagerPlugins/Tabview/Tabview.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardCharactersDialog.py file | annotate | diff | comparison | revisions
Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationDialog.py file | annotate | diff | comparison | revisions
Project/Project.py file | annotate | diff | comparison | revisions
Project/ProjectTranslationsBrowser.py file | annotate | diff | comparison | revisions
SqlBrowser/SqlConnectionWidget.py file | annotate | diff | comparison | revisions
Templates/TemplateMultipleVariablesDialog.py file | annotate | diff | comparison | revisions
ThirdParty/Jasy/jasy/__init__.py file | annotate | diff | comparison | revisions
ThirdParty/Jasy/jasy/core/Console.py file | annotate | diff | comparison | revisions
ThirdParty/Jasy/jasy/js/api/Comment.py file | annotate | diff | comparison | revisions
ThirdParty/Jasy/jasy/js/parse/Node.py file | annotate | diff | comparison | revisions
ThirdParty/Jasy/jasy/js/parse/Parser.py file | annotate | diff | comparison | revisions
ThirdParty/Jasy/jasy/js/parse/VanillaBuilder.py file | annotate | diff | comparison | revisions
ThirdParty/Jasy/jasy/js/tokenize/Lang.py file | annotate | diff | comparison | revisions
ThirdParty/Jasy/jasy/js/tokenize/Tokenizer.py file | annotate | diff | comparison | revisions
ThirdParty/Jasy/jasy/js/util/__init__.py file | annotate | diff | comparison | revisions
Tools/TRPreviewer.py file | annotate | diff | comparison | revisions
Tools/UIPreviewer.py file | annotate | diff | comparison | revisions
UI/BrowserModel.py file | annotate | diff | comparison | revisions
UI/CompareDialog.py file | annotate | diff | comparison | revisions
UI/UserInterface.py file | annotate | diff | comparison | revisions
Utilities/ClassBrowsers/__init__.py file | annotate | diff | comparison | revisions
Utilities/ClassBrowsers/jsclbr.py file | annotate | diff | comparison | revisions
eric5.e4p file | annotate | diff | comparison | revisions
eric5.py file | annotate | diff | comparison | revisions
i18n/eric5_cs.ts file | annotate | diff | comparison | revisions
i18n/eric5_de.ts file | annotate | diff | comparison | revisions
i18n/eric5_en.ts file | annotate | diff | comparison | revisions
i18n/eric5_es.ts file | annotate | diff | comparison | revisions
i18n/eric5_fr.ts file | annotate | diff | comparison | revisions
i18n/eric5_it.ts file | annotate | diff | comparison | revisions
i18n/eric5_ru.ts file | annotate | diff | comparison | revisions
i18n/eric5_tr.ts file | annotate | diff | comparison | revisions
i18n/eric5_zh_CN.GB2312.ts file | annotate | diff | comparison | revisions
--- a/.hgignore	Mon Aug 12 19:41:53 2013 +0200
+++ b/.hgignore	Mon Aug 12 22:21:53 2013 +0200
@@ -13,3 +13,4 @@
 glob:tmp
 glob:__pycache__
 glob:**.DS_Store
+glob:**.coverage
--- a/.issues/.properties	Mon Aug 12 19:41:53 2013 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-[Category]
-
-[State]
-new = 
-assigned = 
-investigating = 
-scheduled = 
-testing = 
-closed = 
-
-[Resolution]
-fixed = 
-rejected = 
-duplicate = 
-cannot reproduce = 
-
-[Assigned-To]
-
--- a/APIs/Python3/eric5.api	Mon Aug 12 19:41:53 2013 +0200
+++ b/APIs/Python3/eric5.api	Mon Aug 12 22:21:53 2013 +0200
@@ -2951,7 +2951,7 @@
 eric5.Helpviewer.OpenSearch.OpenSearchWriter.OpenSearchWriter.write?4(device, engine)
 eric5.Helpviewer.OpenSearch.OpenSearchWriter.OpenSearchWriter?1()
 eric5.Helpviewer.PageScreenDialog.PageScreenDialog.on_buttonBox_clicked?4(button)
-eric5.Helpviewer.PageScreenDialog.PageScreenDialog?1(view, parent=None)
+eric5.Helpviewer.PageScreenDialog.PageScreenDialog?1(view, visibleOnly=False, parent=None)
 eric5.Helpviewer.Passwords.LoginForm.LoginForm.isValid?4()
 eric5.Helpviewer.Passwords.LoginForm.LoginForm?1()
 eric5.Helpviewer.Passwords.PasswordManager.PasswordManager.FORMS?7
@@ -3353,9 +3353,10 @@
 eric5.IconEditor.IconEditorWindow.IconEditorWindow.editorClosed?7
 eric5.IconEditor.IconEditorWindow.IconEditorWindow.event?4(evt)
 eric5.IconEditor.IconEditorWindow.IconEditorWindow.gestureEvent?4(evt)
+eric5.IconEditor.IconEditorWindow.IconEditorWindow.setRecentPaths?4(openPath, savePath)
 eric5.IconEditor.IconEditorWindow.IconEditorWindow.wheelEvent?4(evt)
 eric5.IconEditor.IconEditorWindow.IconEditorWindow.windows?7
-eric5.IconEditor.IconEditorWindow.IconEditorWindow?1(fileName="", parent=None, fromEric=False, initShortcutsOnly=False)
+eric5.IconEditor.IconEditorWindow.IconEditorWindow?1(fileName="", parent=None, fromEric=False, initShortcutsOnly=False, project=None)
 eric5.IconEditor.IconSizeDialog.IconSizeDialog.getData?4()
 eric5.IconEditor.IconSizeDialog.IconSizeDialog?1(width, height, parent=None)
 eric5.IconEditor.cursors.cursors_rc.qCleanupResources?4()
@@ -4275,6 +4276,8 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage.on_configButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage.save?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.MercurialPage?1(plugin)
+eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.MercurialUserDataDialog.getData?4()
+eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.MercurialUserDataDialog?1(parent=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog.getData?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog.on_recentComboBox_activated?4(txt)
 eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.HgFetchDialog?1(parent=None)
@@ -4328,6 +4331,11 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog.HgAnnotateDialog.on_sendButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog.HgAnnotateDialog.start?4(fn)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog.HgAnnotateDialog?1(vcs, parent=None)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.HgArchiveDialog.getData?4()
+eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.HgArchiveDialog.on_archiveButton_clicked?4()
+eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.HgArchiveDialog.on_archiveEdit_textChanged?4(archive)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.HgArchiveDialog.on_typeComboBox_activated?4(index)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.HgArchiveDialog?1(vcs, parent=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog.HgBackoutDialog.getParameters?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog.HgBackoutDialog.on_bookmarkButton_toggled?4(checked)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog.HgBackoutDialog.on_bookmarkCombo_editTextChanged?4(txt)
@@ -4380,7 +4388,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.HgCommitDialog.HgCommitDialog.on_recentComboBox_activated?4(txt)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgCommitDialog.HgCommitDialog.rejected?7
 eric5.Plugins.VcsPlugins.vcsMercurial.HgCommitDialog.HgCommitDialog.showEvent?4(evt)
-eric5.Plugins.VcsPlugins.vcsMercurial.HgCommitDialog.HgCommitDialog?1(vcs, parent=None)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgCommitDialog.HgCommitDialog?1(vcs, mq, parent=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgCopyDialog.HgCopyDialog.getData?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgCopyDialog.HgCopyDialog.on_dirButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgCopyDialog.HgCopyDialog.on_targetEdit_textChanged?4(txt)
@@ -4462,14 +4470,14 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_stopCheckBox_clicked?4(checked)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.on_toDate_dateChanged?4(date)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog.start?4(fn)
-eric5.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog?1(vcs, mode="log", bundle=None, parent=None)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.HgLogBrowserDialog?1(vcs, mode="log", bundle=None, isFile=False, parent=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.HgLogDialog.closeEvent?4(e)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.HgLogDialog.keyPressEvent?4(evt)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.HgLogDialog.on_input_returnPressed?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.HgLogDialog.on_passwordCheckBox_toggled?4(isOn)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.HgLogDialog.on_sendButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.HgLogDialog.start?4(fn, noEntries=0, revisions=None)
-eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.HgLogDialog?1(vcs, mode="log", bundle=None, parent=None)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.HgLogDialog?1(vcs, mode="log", bundle=None, isFile=False, parent=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog.getParameters?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog.on_bookmarkButton_toggled?4(checked)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgMergeDialog.HgMergeDialog.on_bookmarkCombo_editTextChanged?4(txt)
@@ -4549,15 +4557,21 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_refreshButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_restoreButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_revertButton_clicked?4()
+eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_sbsDiffButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_sendButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_statusFilterCombo_activated?4(txt)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_statusList_itemChanged?4(item, column)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.on_statusList_itemSelectionChanged?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog.start?4(fn)
-eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog?1(vcs, parent=None)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.HgStatusDialog?1(vcs, mq=False, parent=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.HgStatusMonitorThread._performMonitor?5()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.HgStatusMonitorThread._shutdown?5()
 eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.HgStatusMonitorThread?1(interval, project, vcs, parent=None)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog.closeEvent?4(e)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog.on_buttonBox_clicked?4(button)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog.on_refreshButton_clicked?4()
+eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog.start?4(path, mq=False)
+eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.HgSummaryDialog?1(vcs, parent=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog.closeEvent?4(e)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog.keyPressEvent?4(evt)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.HgTagBranchListDialog.on_buttonBox_clicked?4(button)
@@ -4574,6 +4588,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.HgTagDialog.HgTagDialog.on_tagCombo_editTextChanged?4(text)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgTagDialog.HgTagDialog?1(taglist, parent=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.HgUtilities.getConfigPath?4()
+eric5.Plugins.VcsPlugins.vcsMercurial.HgUtilities.prepareProcess?4(proc, encoding="", language="")
 eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.HgProjectBrowserHelper._addVCSMenu?5(mainMenu)
 eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.HgProjectBrowserHelper._addVCSMenuBack?5(mainMenu)
 eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.HgProjectBrowserHelper._addVCSMenuDir?5(mainMenu)
@@ -4686,6 +4701,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsList?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsListAll?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueGuardsSetActive?4(name)
+eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueInit?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueListPatches?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueListQueues?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueNewPatch?4(name)
@@ -4694,6 +4710,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueRenamePatch?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueShowHeader?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueShowPatch?4(name)
+eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.hgQueueStatus?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues.shutdown?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.Queues?1(vcs)
 eric5.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.HgRebaseDialog.HgRebaseDialog.getData?4()
@@ -4749,6 +4766,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hasSubrepositories?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgAddSubrepository?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgAnnotate?4(name)
+eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgArchive?4()
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBackout?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBisect?4(name, subcommand)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgBranch?4(name)
@@ -4770,7 +4788,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgIncoming?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgInfo?4(ppath, mode="heads")
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgListTagBranch?4(path, tags=True)
-eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgLogBrowser?4(path)
+eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgLogBrowser?4(path, isFile=False)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgNormalizeURL?4(url)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgOutgoing?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgPhase?4(name, data=None)
@@ -4782,10 +4800,12 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgResolve?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRevert?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgRollback?4(name)
+eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgSbsDiff?4(name, extended=False, revisions=None)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgServe?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowBranch?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowConfig?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgShowPaths?4(name)
+eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgSummary?4(mq=False)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgUnbundle?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.hgVerify?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.isExtensionActive?4(extensionName)
@@ -4796,7 +4816,7 @@
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsCheckout?4(vcsDataDict, projectDir, noDialog=False)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsCleanup?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsCommandLine?4(name)
-eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsCommit?4(name, message, noDialog=False, closeBranch=False)
+eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsCommit?4(name, message, noDialog=False, closeBranch=False, mq=False)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsConvertProject?4(vcsDataDict, project)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsDiff?4(name)
 eric5.Plugins.VcsPlugins.vcsMercurial.hg.Hg.vcsExists?4()
@@ -4904,10 +4924,10 @@
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.SvnLogBrowserDialog.on_stopCheckBox_clicked?4(checked)
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.SvnLogBrowserDialog.on_toDate_dateChanged?4(date)
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.SvnLogBrowserDialog.start?4(fn)
-eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.SvnLogBrowserDialog?1(vcs, parent=None)
+eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.SvnLogBrowserDialog?1(vcs, isFile=False, parent=None)
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.SvnLogDialog.on_buttonBox_clicked?4(button)
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.SvnLogDialog.start?4(fn, noEntries=0)
-eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.SvnLogDialog?1(vcs, parent=None)
+eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.SvnLogDialog?1(vcs, isFile=False, parent=None)
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialog.SvnLoginDialog.getData?4()
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnLoginDialog.SvnLoginDialog?1(realm, username, may_save, parent=None)
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnMergeDialog.SvnMergeDialog.getParameters?4()
@@ -4953,6 +4973,7 @@
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.SvnStatusDialog.on_refreshButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.SvnStatusDialog.on_restoreButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.SvnStatusDialog.on_revertButton_clicked?4()
+eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.SvnStatusDialog.on_sbsDiffButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.SvnStatusDialog.on_statusFilterCombo_activated?4(txt)
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.SvnStatusDialog.on_statusList_itemChanged?4(item, column)
 eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.SvnStatusDialog.on_statusList_itemSelectionChanged?4()
@@ -4995,12 +5016,13 @@
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnListProps?4(name, recursive=False)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnListTagBranch?4(path, tags=True)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnLock?4(name, stealIt=False, parent=None)
-eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnLogBrowser?4(path)
+eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnLogBrowser?4(path, isFile=False)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnNormalizeURL?4(url)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnRelocate?4(projectPath)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnRemoveFromChangelist?4(names)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnRepoBrowser?4(projectPath=None)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnResolve?4(name)
+eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnSbsDiff?4(name, extended=False, revisions=None)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnSetProp?4(name, recursive=False)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnShowChangelists?4(path)
 eric5.Plugins.VcsPlugins.vcsPySvn.subversion.Subversion.svnUnlock?4(name, breakIt=False, parent=None)
@@ -5130,14 +5152,14 @@
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.SvnLogBrowserDialog.on_stopCheckBox_clicked?4(checked)
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.SvnLogBrowserDialog.on_toDate_dateChanged?4(date)
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.SvnLogBrowserDialog.start?4(fn)
-eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.SvnLogBrowserDialog?1(vcs, parent=None)
+eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.SvnLogBrowserDialog?1(vcs, isFile=False, parent=None)
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.SvnLogDialog.closeEvent?4(e)
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.SvnLogDialog.keyPressEvent?4(evt)
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.SvnLogDialog.on_input_returnPressed?4()
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.SvnLogDialog.on_passwordCheckBox_toggled?4(isOn)
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.SvnLogDialog.on_sendButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.SvnLogDialog.start?4(fn, noEntries=0)
-eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.SvnLogDialog?1(vcs, parent=None)
+eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.SvnLogDialog?1(vcs, isFile=False, parent=None)
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialog.SvnMergeDialog.getParameters?4()
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialog.SvnMergeDialog.on_tag1Combo_editTextChanged?4(text)
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnMergeDialog.SvnMergeDialog.on_tag2Combo_editTextChanged?4(text)
@@ -5189,6 +5211,7 @@
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.SvnStatusDialog.on_refreshButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.SvnStatusDialog.on_restoreButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.SvnStatusDialog.on_revertButton_clicked?4()
+eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.SvnStatusDialog.on_sbsDiffButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.SvnStatusDialog.on_sendButton_clicked?4()
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.SvnStatusDialog.on_statusFilterCombo_activated?4(txt)
 eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.SvnStatusDialog.on_statusList_itemChanged?4(item, column)
@@ -5232,12 +5255,13 @@
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnListProps?4(name, recursive=False)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnListTagBranch?4(path, tags=True)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnLock?4(name, stealIt=False, parent=None)
-eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnLogBrowser?4(path)
+eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnLogBrowser?4(path, isFile=False)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnNormalizeURL?4(url)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnRelocate?4(projectPath)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnRemoveFromChangelist?4(names)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnRepoBrowser?4(projectPath=None)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnResolve?4(name)
+eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnSbsDiff?4(name, extended=False, revisions=None)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnSetProp?4(name, recursive=False)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnShowChangelists?4(path)
 eric5.Plugins.VcsPlugins.vcsSubversion.subversion.Subversion.svnUnlock?4(name, breakIt=False, parent=None)
@@ -7534,6 +7558,7 @@
 eric5.UI.BrowserModel.BrowserFileItem.isDFile?4()
 eric5.UI.BrowserModel.BrowserFileItem.isDesignerFile?4()
 eric5.UI.BrowserModel.BrowserFileItem.isIdlFile?4()
+eric5.UI.BrowserModel.BrowserFileItem.isJavaScriptFile?4()
 eric5.UI.BrowserModel.BrowserFileItem.isLinguistFile?4()
 eric5.UI.BrowserModel.BrowserFileItem.isMultiProjectFile?4()
 eric5.UI.BrowserModel.BrowserFileItem.isPixmapFile?4()
@@ -7617,6 +7642,7 @@
 eric5.UI.BrowserSortFilterProxyModel.BrowserSortFilterProxyModel.preferencesChanged?4()
 eric5.UI.BrowserSortFilterProxyModel.BrowserSortFilterProxyModel.sort?4(column, order)
 eric5.UI.BrowserSortFilterProxyModel.BrowserSortFilterProxyModel?1(parent=None)
+eric5.UI.CompareDialog.CompareDialog.compare?4(lines1, lines2, name1="", name2="")
 eric5.UI.CompareDialog.CompareDialog.on_buttonBox_clicked?4(button)
 eric5.UI.CompareDialog.CompareDialog.on_diffButton_clicked?4()
 eric5.UI.CompareDialog.CompareDialog.on_downButton_clicked?4()
@@ -7898,6 +7924,7 @@
 eric5.Utilities.ClassBrowsers.ClbrBaseClasses._ClbrBase.setEndLine?4(endLineNo)
 eric5.Utilities.ClassBrowsers.ClbrBaseClasses._ClbrBase?2(module, name, file, lineno)
 eric5.Utilities.ClassBrowsers.IDL_SOURCE?7
+eric5.Utilities.ClassBrowsers.JS_SOURCE?7
 eric5.Utilities.ClassBrowsers.PTL_SOURCE?7
 eric5.Utilities.ClassBrowsers.PY_SOURCE?7
 eric5.Utilities.ClassBrowsers.RB_SOURCE?7
@@ -7914,6 +7941,19 @@
 eric5.Utilities.ClassBrowsers.idlclbr._modules?8
 eric5.Utilities.ClassBrowsers.idlclbr._normalize?8
 eric5.Utilities.ClassBrowsers.idlclbr.readmodule_ex?4(module, path=[])
+eric5.Utilities.ClassBrowsers.jsclbr.Attribute?1(module, name, file, lineno)
+eric5.Utilities.ClassBrowsers.jsclbr.Function?1(module, name, file, lineno, signature='', separator=', ')
+eric5.Utilities.ClassBrowsers.jsclbr.SUPPORTED_TYPES?7
+eric5.Utilities.ClassBrowsers.jsclbr.VisibilityMixin?1()
+eric5.Utilities.ClassBrowsers.jsclbr.Visitor.parse?4()
+eric5.Utilities.ClassBrowsers.jsclbr.Visitor.visit_const?4(node)
+eric5.Utilities.ClassBrowsers.jsclbr.Visitor.visit_function?4(node)
+eric5.Utilities.ClassBrowsers.jsclbr.Visitor.visit_noop?4(node)
+eric5.Utilities.ClassBrowsers.jsclbr.Visitor.visit_property_init?4(node)
+eric5.Utilities.ClassBrowsers.jsclbr.Visitor.visit_var?4(node)
+eric5.Utilities.ClassBrowsers.jsclbr.Visitor?1(src, module, filename)
+eric5.Utilities.ClassBrowsers.jsclbr._modules?8
+eric5.Utilities.ClassBrowsers.jsclbr.readmodule_ex?4(module, path=[])
 eric5.Utilities.ClassBrowsers.pyclbr.Attribute?1(module, name, file, lineno)
 eric5.Utilities.ClassBrowsers.pyclbr.Class?1(module, name, super, file, lineno)
 eric5.Utilities.ClassBrowsers.pyclbr.Function?1(module, name, file, lineno, signature='', separator=', ', modifierType=ClbrBaseClasses.Function.General)
--- a/APIs/Python3/eric5.bas	Mon Aug 12 19:41:53 2013 +0200
+++ b/APIs/Python3/eric5.bas	Mon Aug 12 22:21:53 2013 +0200
@@ -286,6 +286,7 @@
 Hg VersionControl
 HgAddSubrepositoryDialog QDialog Ui_HgAddSubrepositoryDialog
 HgAnnotateDialog QDialog Ui_HgAnnotateDialog
+HgArchiveDialog QDialog Ui_HgArchiveDialog
 HgBackoutDialog QDialog Ui_HgBackoutDialog
 HgBookmarkDialog QDialog Ui_HgBookmarkDialog
 HgBookmarkRenameDialog QDialog Ui_HgBookmarkRenameDialog
@@ -334,6 +335,7 @@
 HgServeDialog E5MainWindow
 HgStatusDialog QWidget Ui_HgStatusDialog
 HgStatusMonitorThread VcsStatusMonitorThread
+HgSummaryDialog QDialog Ui_HgSummaryDialog
 HgTagBranchListDialog QDialog Ui_HgTagBranchListDialog
 HgTagDialog QDialog Ui_HgTagDialog
 HighlightingStylesReader XMLStreamReaderBase
@@ -423,6 +425,7 @@
 LogViewerEdit QTextEdit
 MasterPasswordEntryDialog QDialog Ui_MasterPasswordEntryDialog
 MercurialPage ConfigurationPageBase Ui_MercurialPage
+MercurialUserDataDialog QDialog Ui_MercurialUserDataDialog
 MessageBoxWizard QObject
 MessageBoxWizardDialog QDialog Ui_MessageBoxWizardDialog
 MiniEditor E5MainWindow
--- a/DataViews/PyCoverageDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/DataViews/PyCoverageDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -15,12 +15,14 @@
 from PyQt4.QtGui import QDialog, QDialogButtonBox, QMenu, QHeaderView, QTreeWidgetItem, \
     QApplication, QProgressDialog
 
+from E5Gui import E5MessageBox
 from E5Gui.E5Application import e5App
 
 from .Ui_PyCoverageDialog import Ui_PyCoverageDialog
 
 import Utilities
 from DebugClients.Python3.coverage import coverage
+from DebugClients.Python3.coverage.misc import CoverageException
 
 
 class PyCoverageDialog(QDialog, Ui_PyCoverageDialog):
@@ -172,6 +174,7 @@
         
         total_statements = 0
         total_executed = 0
+        total_exceptions = 0
         
         cover.exclude(self.excludeList[0])
         progress = 0
@@ -186,18 +189,22 @@
                 if self.cancelled:
                     return
                 
-                statements, excluded, missing, readable = cover.analysis2(file)[1:]
-                readableEx = excluded and self.__format_lines(excluded) or ''
-                n = len(statements)
-                m = n - len(missing)
-                if n > 0:
-                    pc = 100.0 * m / n
-                else:
-                    pc = 100.0
-                self.__createResultItem(file, str(n), str(m), pc, readableEx, readable)
-                
-                total_statements = total_statements + n
-                total_executed = total_executed + m
+                try:
+                    statements, excluded, missing, readable = cover.analysis2(file)[1:]
+                    readableEx = excluded and self.__format_lines(excluded) or ''
+                    n = len(statements)
+                    m = n - len(missing)
+                    if n > 0:
+                        pc = 100.0 * m / n
+                    else:
+                        pc = 100.0
+                    self.__createResultItem(
+                        file, str(n), str(m), pc, readableEx, readable)
+                    
+                    total_statements = total_statements + n
+                    total_executed = total_executed + m
+                except CoverageException:
+                    total_exceptions += 1
                 
                 progress += 1
                 self.checkProgress.setValue(progress)
@@ -224,6 +231,12 @@
         else:
             self.summaryGroup.hide()
         
+        if total_exceptions:
+            E5MessageBox.warning(self,
+                self.trUtf8("Parse Error"),
+                self.trUtf8("""%n file(s) could not be parsed. Coverage info for"""
+                            """ these is not available.""", "", total_exceptions))
+        
         self.__finish()
         
     def __finish(self):
--- a/Debugger/DebugViewer.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Debugger/DebugViewer.py	Mon Aug 12 22:21:53 2013 +0200
@@ -72,7 +72,7 @@
         self.setWindowIcon(UI.PixmapCache.getIcon("eric.png"))
         
         self.__mainLayout = QVBoxLayout()
-        self.__mainLayout.setMargin(0)
+        self.__mainLayout.setContentsMargins(0, 0, 0, 0)
         self.setLayout(self.__mainLayout)
         
         self.__tabWidget = E5TabWidget()
@@ -101,7 +101,7 @@
         # add the global variables viewer
         self.glvWidget = QWidget()
         self.glvWidgetVLayout = QVBoxLayout(self.glvWidget)
-        self.glvWidgetVLayout.setMargin(0)
+        self.glvWidgetVLayout.setContentsMargins(0, 0, 0, 0)
         self.glvWidgetVLayout.setSpacing(3)
         self.glvWidget.setLayout(self.glvWidgetVLayout)
         
@@ -109,7 +109,7 @@
         self.glvWidgetVLayout.addWidget(self.globalsViewer)
         
         self.glvWidgetHLayout = QHBoxLayout()
-        self.glvWidgetHLayout.setMargin(3)
+        self.glvWidgetHLayout.setContentsMargins(3, 3, 3, 3)
         
         self.globalsFilterEdit = QLineEdit(self.glvWidget)
         self.globalsFilterEdit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
@@ -136,12 +136,12 @@
         # add the local variables viewer
         self.lvWidget = QWidget()
         self.lvWidgetVLayout = QVBoxLayout(self.lvWidget)
-        self.lvWidgetVLayout.setMargin(0)
+        self.lvWidgetVLayout.setContentsMargins(0, 0, 0, 0)
         self.lvWidgetVLayout.setSpacing(3)
         self.lvWidget.setLayout(self.lvWidgetVLayout)
         
         self.lvWidgetHLayout1 = QHBoxLayout()
-        self.lvWidgetHLayout1.setMargin(3)
+        self.lvWidgetHLayout1.setContentsMargins(3, 3, 3, 3)
         
         self.stackComboBox = QComboBox(self.lvWidget)
         self.stackComboBox.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
@@ -156,7 +156,7 @@
         self.lvWidgetVLayout.addWidget(self.localsViewer)
         
         self.lvWidgetHLayout2 = QHBoxLayout()
-        self.lvWidgetHLayout2.setMargin(3)
+        self.lvWidgetHLayout2.setContentsMargins(3, 3, 3, 3)
         
         self.localsFilterEdit = QLineEdit(self.lvWidget)
         self.localsFilterEdit.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
Binary file Documentation/Help/source.qch has changed
--- a/Documentation/Help/source.qhp	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Help/source.qhp	Mon Aug 12 22:21:53 2013 +0200
@@ -491,6 +491,7 @@
                 </section>
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage" ref="index-eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html">
                   <section title="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html" />
+                  <section title="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.html" />
                 </section>
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension" ref="index-eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.html">
                   <section title="eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html" />
@@ -535,6 +536,7 @@
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.Config" ref="eric5.Plugins.VcsPlugins.vcsMercurial.Config.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgAddSubrepositoryDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgAddSubrepositoryDialog.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog.html" />
+                <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgBundleDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgBundleDialog.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgClient" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgClient.html" />
@@ -562,6 +564,7 @@
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgServeDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgServeDialog.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.html" />
+                <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgTagDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgTagDialog.html" />
                 <section title="eric5.Plugins.VcsPlugins.vcsMercurial.HgUtilities" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html" />
@@ -940,6 +943,7 @@
               <section title="eric5.Utilities.ClassBrowsers.ClbrBaseClasses" ref="eric5.Utilities.ClassBrowsers.ClbrBaseClasses.html" />
               <section title="eric5.Utilities.ClassBrowsers.__init__" ref="eric5.Utilities.ClassBrowsers.__init__.html" />
               <section title="eric5.Utilities.ClassBrowsers.idlclbr" ref="eric5.Utilities.ClassBrowsers.idlclbr.html" />
+              <section title="eric5.Utilities.ClassBrowsers.jsclbr" ref="eric5.Utilities.ClassBrowsers.jsclbr.html" />
               <section title="eric5.Utilities.ClassBrowsers.pyclbr" ref="eric5.Utilities.ClassBrowsers.pyclbr.html" />
               <section title="eric5.Utilities.ClassBrowsers.rbclbr" ref="eric5.Utilities.ClassBrowsers.rbclbr.html" />
             </section>
@@ -1434,11 +1438,13 @@
       <keyword name="AsyncPendingWrite" id="AsyncPendingWrite" ref="eric5.DebugClients.Ruby.AsyncFile.html#AsyncPendingWrite" />
       <keyword name="Attribute" id="Attribute" ref="eric5.Utilities.ClassBrowsers.ClbrBaseClasses.html#Attribute" />
       <keyword name="Attribute" id="Attribute" ref="eric5.Utilities.ClassBrowsers.idlclbr.html#Attribute" />
+      <keyword name="Attribute" id="Attribute" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Attribute" />
       <keyword name="Attribute" id="Attribute" ref="eric5.Utilities.ClassBrowsers.pyclbr.html#Attribute" />
       <keyword name="Attribute" id="Attribute" ref="eric5.Utilities.ClassBrowsers.rbclbr.html#Attribute" />
       <keyword name="Attribute" id="Attribute" ref="eric5.Utilities.ModuleParser.html#Attribute" />
       <keyword name="Attribute (Constructor)" id="Attribute (Constructor)" ref="eric5.Utilities.ClassBrowsers.ClbrBaseClasses.html#Attribute.__init__" />
       <keyword name="Attribute (Constructor)" id="Attribute (Constructor)" ref="eric5.Utilities.ClassBrowsers.idlclbr.html#Attribute.__init__" />
+      <keyword name="Attribute (Constructor)" id="Attribute (Constructor)" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Attribute.__init__" />
       <keyword name="Attribute (Constructor)" id="Attribute (Constructor)" ref="eric5.Utilities.ClassBrowsers.pyclbr.html#Attribute.__init__" />
       <keyword name="Attribute (Constructor)" id="Attribute (Constructor)" ref="eric5.Utilities.ClassBrowsers.rbclbr.html#Attribute.__init__" />
       <keyword name="Attribute (Constructor)" id="Attribute (Constructor)" ref="eric5.Utilities.ModuleParser.html#Attribute.__init__" />
@@ -1788,6 +1794,7 @@
       <keyword name="BrowserFileItem.isDFile" id="BrowserFileItem.isDFile" ref="eric5.UI.BrowserModel.html#BrowserFileItem.isDFile" />
       <keyword name="BrowserFileItem.isDesignerFile" id="BrowserFileItem.isDesignerFile" ref="eric5.UI.BrowserModel.html#BrowserFileItem.isDesignerFile" />
       <keyword name="BrowserFileItem.isIdlFile" id="BrowserFileItem.isIdlFile" ref="eric5.UI.BrowserModel.html#BrowserFileItem.isIdlFile" />
+      <keyword name="BrowserFileItem.isJavaScriptFile" id="BrowserFileItem.isJavaScriptFile" ref="eric5.UI.BrowserModel.html#BrowserFileItem.isJavaScriptFile" />
       <keyword name="BrowserFileItem.isLinguistFile" id="BrowserFileItem.isLinguistFile" ref="eric5.UI.BrowserModel.html#BrowserFileItem.isLinguistFile" />
       <keyword name="BrowserFileItem.isMultiProjectFile" id="BrowserFileItem.isMultiProjectFile" ref="eric5.UI.BrowserModel.html#BrowserFileItem.isMultiProjectFile" />
       <keyword name="BrowserFileItem.isPixmapFile" id="BrowserFileItem.isPixmapFile" ref="eric5.UI.BrowserModel.html#BrowserFileItem.isPixmapFile" />
@@ -2192,10 +2199,12 @@
       <keyword name="CompareDialog (Constructor)" id="CompareDialog (Constructor)" ref="eric5.UI.CompareDialog.html#CompareDialog.__init__" />
       <keyword name="CompareDialog (Module)" id="CompareDialog (Module)" ref="eric5.UI.CompareDialog.html" />
       <keyword name="CompareDialog.__appendText" id="CompareDialog.__appendText" ref="eric5.UI.CompareDialog.html#CompareDialog.__appendText" />
+      <keyword name="CompareDialog.__compare" id="CompareDialog.__compare" ref="eric5.UI.CompareDialog.html#CompareDialog.__compare" />
       <keyword name="CompareDialog.__fileChanged" id="CompareDialog.__fileChanged" ref="eric5.UI.CompareDialog.html#CompareDialog.__fileChanged" />
       <keyword name="CompareDialog.__moveTextToCurrentDiffPos" id="CompareDialog.__moveTextToCurrentDiffPos" ref="eric5.UI.CompareDialog.html#CompareDialog.__moveTextToCurrentDiffPos" />
       <keyword name="CompareDialog.__scrollBarMoved" id="CompareDialog.__scrollBarMoved" ref="eric5.UI.CompareDialog.html#CompareDialog.__scrollBarMoved" />
       <keyword name="CompareDialog.__selectFile" id="CompareDialog.__selectFile" ref="eric5.UI.CompareDialog.html#CompareDialog.__selectFile" />
+      <keyword name="CompareDialog.compare" id="CompareDialog.compare" ref="eric5.UI.CompareDialog.html#CompareDialog.compare" />
       <keyword name="CompareDialog.on_buttonBox_clicked" id="CompareDialog.on_buttonBox_clicked" ref="eric5.UI.CompareDialog.html#CompareDialog.on_buttonBox_clicked" />
       <keyword name="CompareDialog.on_diffButton_clicked" id="CompareDialog.on_diffButton_clicked" ref="eric5.UI.CompareDialog.html#CompareDialog.on_diffButton_clicked" />
       <keyword name="CompareDialog.on_downButton_clicked" id="CompareDialog.on_downButton_clicked" ref="eric5.UI.CompareDialog.html#CompareDialog.on_downButton_clicked" />
@@ -4797,11 +4806,13 @@
       <keyword name="FtpUtilities (Module)" id="FtpUtilities (Module)" ref="eric5.Utilities.FtpUtilities.html" />
       <keyword name="Function" id="Function" ref="eric5.Utilities.ClassBrowsers.ClbrBaseClasses.html#Function" />
       <keyword name="Function" id="Function" ref="eric5.Utilities.ClassBrowsers.idlclbr.html#Function" />
+      <keyword name="Function" id="Function" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Function" />
       <keyword name="Function" id="Function" ref="eric5.Utilities.ClassBrowsers.pyclbr.html#Function" />
       <keyword name="Function" id="Function" ref="eric5.Utilities.ClassBrowsers.rbclbr.html#Function" />
       <keyword name="Function" id="Function" ref="eric5.Utilities.ModuleParser.html#Function" />
       <keyword name="Function (Constructor)" id="Function (Constructor)" ref="eric5.Utilities.ClassBrowsers.ClbrBaseClasses.html#Function.__init__" />
       <keyword name="Function (Constructor)" id="Function (Constructor)" ref="eric5.Utilities.ClassBrowsers.idlclbr.html#Function.__init__" />
+      <keyword name="Function (Constructor)" id="Function (Constructor)" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Function.__init__" />
       <keyword name="Function (Constructor)" id="Function (Constructor)" ref="eric5.Utilities.ClassBrowsers.pyclbr.html#Function.__init__" />
       <keyword name="Function (Constructor)" id="Function (Constructor)" ref="eric5.Utilities.ClassBrowsers.rbclbr.html#Function.__init__" />
       <keyword name="Function (Constructor)" id="Function (Constructor)" ref="eric5.Utilities.ModuleParser.html#Function.__init__" />
@@ -5284,8 +5295,10 @@
       <keyword name="HelpWindow.__prevTab" id="HelpWindow.__prevTab" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__prevTab" />
       <keyword name="HelpWindow.__privateBrowsing" id="HelpWindow.__privateBrowsing" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__privateBrowsing" />
       <keyword name="HelpWindow.__reload" id="HelpWindow.__reload" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__reload" />
+      <keyword name="HelpWindow.__removeOldDocumentation" id="HelpWindow.__removeOldDocumentation" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__removeOldDocumentation" />
       <keyword name="HelpWindow.__savePageAs" id="HelpWindow.__savePageAs" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__savePageAs" />
       <keyword name="HelpWindow.__savePageScreen" id="HelpWindow.__savePageScreen" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__savePageScreen" />
+      <keyword name="HelpWindow.__saveVisiblePageScreen" id="HelpWindow.__saveVisiblePageScreen" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__saveVisiblePageScreen" />
       <keyword name="HelpWindow.__searchForWord" id="HelpWindow.__searchForWord" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__searchForWord" />
       <keyword name="HelpWindow.__setIconDatabasePath" id="HelpWindow.__setIconDatabasePath" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__setIconDatabasePath" />
       <keyword name="HelpWindow.__setTextEncoding" id="HelpWindow.__setTextEncoding" ref="eric5.Helpviewer.HelpWindow.html#HelpWindow.__setTextEncoding" />
@@ -5389,6 +5402,7 @@
       <keyword name="Hg" id="Hg" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg" />
       <keyword name="Hg (Constructor)" id="Hg (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__init__" />
       <keyword name="Hg.__getExtensionsInfo" id="Hg.__getExtensionsInfo" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__getExtensionsInfo" />
+      <keyword name="Hg.__hgGetFileForRevision" id="Hg.__hgGetFileForRevision" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__hgGetFileForRevision" />
       <keyword name="Hg.__hgURL" id="Hg.__hgURL" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__hgURL" />
       <keyword name="Hg.__iniFileChanged" id="Hg.__iniFileChanged" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__iniFileChanged" />
       <keyword name="Hg.__monitorRepoIniFile" id="Hg.__monitorRepoIniFile" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.__monitorRepoIniFile" />
@@ -5402,6 +5416,7 @@
       <keyword name="Hg.hasSubrepositories" id="Hg.hasSubrepositories" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hasSubrepositories" />
       <keyword name="Hg.hgAddSubrepository" id="Hg.hgAddSubrepository" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgAddSubrepository" />
       <keyword name="Hg.hgAnnotate" id="Hg.hgAnnotate" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgAnnotate" />
+      <keyword name="Hg.hgArchive" id="Hg.hgArchive" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgArchive" />
       <keyword name="Hg.hgBackout" id="Hg.hgBackout" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgBackout" />
       <keyword name="Hg.hgBisect" id="Hg.hgBisect" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgBisect" />
       <keyword name="Hg.hgBranch" id="Hg.hgBranch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgBranch" />
@@ -5435,10 +5450,12 @@
       <keyword name="Hg.hgResolve" id="Hg.hgResolve" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgResolve" />
       <keyword name="Hg.hgRevert" id="Hg.hgRevert" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgRevert" />
       <keyword name="Hg.hgRollback" id="Hg.hgRollback" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgRollback" />
+      <keyword name="Hg.hgSbsDiff" id="Hg.hgSbsDiff" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgSbsDiff" />
       <keyword name="Hg.hgServe" id="Hg.hgServe" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgServe" />
       <keyword name="Hg.hgShowBranch" id="Hg.hgShowBranch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgShowBranch" />
       <keyword name="Hg.hgShowConfig" id="Hg.hgShowConfig" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgShowConfig" />
       <keyword name="Hg.hgShowPaths" id="Hg.hgShowPaths" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgShowPaths" />
+      <keyword name="Hg.hgSummary" id="Hg.hgSummary" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgSummary" />
       <keyword name="Hg.hgUnbundle" id="Hg.hgUnbundle" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgUnbundle" />
       <keyword name="Hg.hgVerify" id="Hg.hgVerify" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.hgVerify" />
       <keyword name="Hg.isExtensionActive" id="Hg.isExtensionActive" ref="eric5.Plugins.VcsPlugins.vcsMercurial.hg.html#Hg.isExtensionActive" />
@@ -5499,6 +5516,13 @@
       <keyword name="HgAnnotateDialog.on_passwordCheckBox_toggled" id="HgAnnotateDialog.on_passwordCheckBox_toggled" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog.html#HgAnnotateDialog.on_passwordCheckBox_toggled" />
       <keyword name="HgAnnotateDialog.on_sendButton_clicked" id="HgAnnotateDialog.on_sendButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog.html#HgAnnotateDialog.on_sendButton_clicked" />
       <keyword name="HgAnnotateDialog.start" id="HgAnnotateDialog.start" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog.html#HgAnnotateDialog.start" />
+      <keyword name="HgArchiveDialog" id="HgArchiveDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html#HgArchiveDialog" />
+      <keyword name="HgArchiveDialog (Constructor)" id="HgArchiveDialog (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html#HgArchiveDialog.__init__" />
+      <keyword name="HgArchiveDialog (Module)" id="HgArchiveDialog (Module)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html" />
+      <keyword name="HgArchiveDialog.getData" id="HgArchiveDialog.getData" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html#HgArchiveDialog.getData" />
+      <keyword name="HgArchiveDialog.on_archiveButton_clicked" id="HgArchiveDialog.on_archiveButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html#HgArchiveDialog.on_archiveButton_clicked" />
+      <keyword name="HgArchiveDialog.on_archiveEdit_textChanged" id="HgArchiveDialog.on_archiveEdit_textChanged" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html#HgArchiveDialog.on_archiveEdit_textChanged" />
+      <keyword name="HgArchiveDialog.on_typeComboBox_activated" id="HgArchiveDialog.on_typeComboBox_activated" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html#HgArchiveDialog.on_typeComboBox_activated" />
       <keyword name="HgBackoutDialog" id="HgBackoutDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog.html#HgBackoutDialog" />
       <keyword name="HgBackoutDialog (Constructor)" id="HgBackoutDialog (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog.html#HgBackoutDialog.__init__" />
       <keyword name="HgBackoutDialog (Module)" id="HgBackoutDialog (Module)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog.html" />
@@ -5876,6 +5900,8 @@
       <keyword name="HgProjectBrowserHelper.__HgMove" id="HgProjectBrowserHelper.__HgMove" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html#HgProjectBrowserHelper.__HgMove" />
       <keyword name="HgProjectBrowserHelper.__HgResolve" id="HgProjectBrowserHelper.__HgResolve" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html#HgProjectBrowserHelper.__HgResolve" />
       <keyword name="HgProjectBrowserHelper.__HgRevert" id="HgProjectBrowserHelper.__HgRevert" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html#HgProjectBrowserHelper.__HgRevert" />
+      <keyword name="HgProjectBrowserHelper.__HgSbsDiff" id="HgProjectBrowserHelper.__HgSbsDiff" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html#HgProjectBrowserHelper.__HgSbsDiff" />
+      <keyword name="HgProjectBrowserHelper.__HgSbsExtendedDiff" id="HgProjectBrowserHelper.__HgSbsExtendedDiff" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html#HgProjectBrowserHelper.__HgSbsExtendedDiff" />
       <keyword name="HgProjectBrowserHelper._addVCSMenu" id="HgProjectBrowserHelper._addVCSMenu" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html#HgProjectBrowserHelper._addVCSMenu" />
       <keyword name="HgProjectBrowserHelper._addVCSMenuBack" id="HgProjectBrowserHelper._addVCSMenuBack" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html#HgProjectBrowserHelper._addVCSMenuBack" />
       <keyword name="HgProjectBrowserHelper._addVCSMenuDir" id="HgProjectBrowserHelper._addVCSMenuDir" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html#HgProjectBrowserHelper._addVCSMenuDir" />
@@ -5888,6 +5914,7 @@
       <keyword name="HgProjectHelper" id="HgProjectHelper" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper" />
       <keyword name="HgProjectHelper (Constructor)" id="HgProjectHelper (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__init__" />
       <keyword name="HgProjectHelper.__hgAddSubrepository" id="HgProjectHelper.__hgAddSubrepository" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgAddSubrepository" />
+      <keyword name="HgProjectHelper.__hgArchive" id="HgProjectHelper.__hgArchive" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgArchive" />
       <keyword name="HgProjectHelper.__hgBackout" id="HgProjectHelper.__hgBackout" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgBackout" />
       <keyword name="HgProjectHelper.__hgBisectBad" id="HgProjectHelper.__hgBisectBad" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgBisectBad" />
       <keyword name="HgProjectHelper.__hgBisectGood" id="HgProjectHelper.__hgBisectGood" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgBisectGood" />
@@ -5928,6 +5955,7 @@
       <keyword name="HgProjectHelper.__hgShowBranch" id="HgProjectHelper.__hgShowBranch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgShowBranch" />
       <keyword name="HgProjectHelper.__hgShowConfig" id="HgProjectHelper.__hgShowConfig" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgShowConfig" />
       <keyword name="HgProjectHelper.__hgShowPaths" id="HgProjectHelper.__hgShowPaths" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgShowPaths" />
+      <keyword name="HgProjectHelper.__hgSummary" id="HgProjectHelper.__hgSummary" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgSummary" />
       <keyword name="HgProjectHelper.__hgTagList" id="HgProjectHelper.__hgTagList" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgTagList" />
       <keyword name="HgProjectHelper.__hgTip" id="HgProjectHelper.__hgTip" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgTip" />
       <keyword name="HgProjectHelper.__hgUnbundle" id="HgProjectHelper.__hgUnbundle" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html#HgProjectHelper.__hgUnbundle" />
@@ -6140,6 +6168,7 @@
       <keyword name="HgStatusDialog.__resort" id="HgStatusDialog.__resort" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__resort" />
       <keyword name="HgStatusDialog.__restoreMissing" id="HgStatusDialog.__restoreMissing" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__restoreMissing" />
       <keyword name="HgStatusDialog.__revert" id="HgStatusDialog.__revert" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__revert" />
+      <keyword name="HgStatusDialog.__sbsDiff" id="HgStatusDialog.__sbsDiff" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__sbsDiff" />
       <keyword name="HgStatusDialog.__showContextMenu" id="HgStatusDialog.__showContextMenu" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showContextMenu" />
       <keyword name="HgStatusDialog.__showError" id="HgStatusDialog.__showError" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__showError" />
       <keyword name="HgStatusDialog.__updateButtons" id="HgStatusDialog.__updateButtons" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.__updateButtons" />
@@ -6156,6 +6185,7 @@
       <keyword name="HgStatusDialog.on_refreshButton_clicked" id="HgStatusDialog.on_refreshButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_refreshButton_clicked" />
       <keyword name="HgStatusDialog.on_restoreButton_clicked" id="HgStatusDialog.on_restoreButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_restoreButton_clicked" />
       <keyword name="HgStatusDialog.on_revertButton_clicked" id="HgStatusDialog.on_revertButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_revertButton_clicked" />
+      <keyword name="HgStatusDialog.on_sbsDiffButton_clicked" id="HgStatusDialog.on_sbsDiffButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_sbsDiffButton_clicked" />
       <keyword name="HgStatusDialog.on_sendButton_clicked" id="HgStatusDialog.on_sendButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_sendButton_clicked" />
       <keyword name="HgStatusDialog.on_statusFilterCombo_activated" id="HgStatusDialog.on_statusFilterCombo_activated" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_statusFilterCombo_activated" />
       <keyword name="HgStatusDialog.on_statusList_itemChanged" id="HgStatusDialog.on_statusList_itemChanged" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html#HgStatusDialog.on_statusList_itemChanged" />
@@ -6166,6 +6196,20 @@
       <keyword name="HgStatusMonitorThread (Module)" id="HgStatusMonitorThread (Module)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.html" />
       <keyword name="HgStatusMonitorThread._performMonitor" id="HgStatusMonitorThread._performMonitor" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.html#HgStatusMonitorThread._performMonitor" />
       <keyword name="HgStatusMonitorThread._shutdown" id="HgStatusMonitorThread._shutdown" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.html#HgStatusMonitorThread._shutdown" />
+      <keyword name="HgSummaryDialog" id="HgSummaryDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog" />
+      <keyword name="HgSummaryDialog (Constructor)" id="HgSummaryDialog (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.__init__" />
+      <keyword name="HgSummaryDialog (Module)" id="HgSummaryDialog (Module)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html" />
+      <keyword name="HgSummaryDialog.__committed" id="HgSummaryDialog.__committed" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.__committed" />
+      <keyword name="HgSummaryDialog.__finish" id="HgSummaryDialog.__finish" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.__finish" />
+      <keyword name="HgSummaryDialog.__procFinished" id="HgSummaryDialog.__procFinished" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.__procFinished" />
+      <keyword name="HgSummaryDialog.__processOutput" id="HgSummaryDialog.__processOutput" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.__processOutput" />
+      <keyword name="HgSummaryDialog.__readStderr" id="HgSummaryDialog.__readStderr" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.__readStderr" />
+      <keyword name="HgSummaryDialog.__readStdout" id="HgSummaryDialog.__readStdout" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.__readStdout" />
+      <keyword name="HgSummaryDialog.__showError" id="HgSummaryDialog.__showError" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.__showError" />
+      <keyword name="HgSummaryDialog.closeEvent" id="HgSummaryDialog.closeEvent" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.closeEvent" />
+      <keyword name="HgSummaryDialog.on_buttonBox_clicked" id="HgSummaryDialog.on_buttonBox_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.on_buttonBox_clicked" />
+      <keyword name="HgSummaryDialog.on_refreshButton_clicked" id="HgSummaryDialog.on_refreshButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.on_refreshButton_clicked" />
+      <keyword name="HgSummaryDialog.start" id="HgSummaryDialog.start" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html#HgSummaryDialog.start" />
       <keyword name="HgTagBranchListDialog" id="HgTagBranchListDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html#HgTagBranchListDialog" />
       <keyword name="HgTagBranchListDialog (Constructor)" id="HgTagBranchListDialog (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html#HgTagBranchListDialog.__init__" />
       <keyword name="HgTagBranchListDialog (Module)" id="HgTagBranchListDialog (Module)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html" />
@@ -6470,6 +6514,7 @@
       <keyword name="IconEditorWindow.closeEvent" id="IconEditorWindow.closeEvent" ref="eric5.IconEditor.IconEditorWindow.html#IconEditorWindow.closeEvent" />
       <keyword name="IconEditorWindow.event" id="IconEditorWindow.event" ref="eric5.IconEditor.IconEditorWindow.html#IconEditorWindow.event" />
       <keyword name="IconEditorWindow.gestureEvent" id="IconEditorWindow.gestureEvent" ref="eric5.IconEditor.IconEditorWindow.html#IconEditorWindow.gestureEvent" />
+      <keyword name="IconEditorWindow.setRecentPaths" id="IconEditorWindow.setRecentPaths" ref="eric5.IconEditor.IconEditorWindow.html#IconEditorWindow.setRecentPaths" />
       <keyword name="IconEditorWindow.wheelEvent" id="IconEditorWindow.wheelEvent" ref="eric5.IconEditor.IconEditorWindow.html#IconEditorWindow.wheelEvent" />
       <keyword name="IconSizeDialog" id="IconSizeDialog" ref="eric5.IconEditor.IconSizeDialog.html#IconSizeDialog" />
       <keyword name="IconSizeDialog (Constructor)" id="IconSizeDialog (Constructor)" ref="eric5.IconEditor.IconSizeDialog.html#IconSizeDialog.__init__" />
@@ -7241,6 +7286,10 @@
       <keyword name="MercurialPage (Module)" id="MercurialPage (Module)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html" />
       <keyword name="MercurialPage.on_configButton_clicked" id="MercurialPage.on_configButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html#MercurialPage.on_configButton_clicked" />
       <keyword name="MercurialPage.save" id="MercurialPage.save" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html#MercurialPage.save" />
+      <keyword name="MercurialUserDataDialog" id="MercurialUserDataDialog" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.html#MercurialUserDataDialog" />
+      <keyword name="MercurialUserDataDialog (Constructor)" id="MercurialUserDataDialog (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.html#MercurialUserDataDialog.__init__" />
+      <keyword name="MercurialUserDataDialog (Module)" id="MercurialUserDataDialog (Module)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.html" />
+      <keyword name="MercurialUserDataDialog.getData" id="MercurialUserDataDialog.getData" ref="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.html#MercurialUserDataDialog.getData" />
       <keyword name="Message" id="Message" ref="eric5.Utilities.py3flakes.messages.html#Message" />
       <keyword name="Message" id="Message" ref="eric5.UtilitiesPython2.py2flakes.messages.html#Message" />
       <keyword name="Message (Constructor)" id="Message (Constructor)" ref="eric5.Utilities.py3flakes.messages.html#Message.__init__" />
@@ -9203,6 +9252,7 @@
       <keyword name="Queues.hgQueueGuardsList" id="Queues.hgQueueGuardsList" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueGuardsList" />
       <keyword name="Queues.hgQueueGuardsListAll" id="Queues.hgQueueGuardsListAll" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueGuardsListAll" />
       <keyword name="Queues.hgQueueGuardsSetActive" id="Queues.hgQueueGuardsSetActive" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueGuardsSetActive" />
+      <keyword name="Queues.hgQueueInit" id="Queues.hgQueueInit" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueInit" />
       <keyword name="Queues.hgQueueListPatches" id="Queues.hgQueueListPatches" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueListPatches" />
       <keyword name="Queues.hgQueueListQueues" id="Queues.hgQueueListQueues" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueListQueues" />
       <keyword name="Queues.hgQueueNewPatch" id="Queues.hgQueueNewPatch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueNewPatch" />
@@ -9211,11 +9261,13 @@
       <keyword name="Queues.hgQueueRenamePatch" id="Queues.hgQueueRenamePatch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueRenamePatch" />
       <keyword name="Queues.hgQueueShowHeader" id="Queues.hgQueueShowHeader" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueShowHeader" />
       <keyword name="Queues.hgQueueShowPatch" id="Queues.hgQueueShowPatch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueShowPatch" />
+      <keyword name="Queues.hgQueueStatus" id="Queues.hgQueueStatus" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.hgQueueStatus" />
       <keyword name="Queues.shutdown" id="Queues.shutdown" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.shutdown" />
       <keyword name="QueuesExtension (Package)" id="QueuesExtension (Package)" ref="index-eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.html" />
       <keyword name="QueuesProjectHelper" id="QueuesProjectHelper" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper" />
       <keyword name="QueuesProjectHelper (Constructor)" id="QueuesProjectHelper (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__init__" />
       <keyword name="QueuesProjectHelper.__hgQueueActivateQueue" id="QueuesProjectHelper.__hgQueueActivateQueue" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueActivateQueue" />
+      <keyword name="QueuesProjectHelper.__hgQueueCommit" id="QueuesProjectHelper.__hgQueueCommit" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueCommit" />
       <keyword name="QueuesProjectHelper.__hgQueueCreateQueue" id="QueuesProjectHelper.__hgQueueCreateQueue" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueCreateQueue" />
       <keyword name="QueuesProjectHelper.__hgQueueDeletePatch" id="QueuesProjectHelper.__hgQueueDeletePatch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueDeletePatch" />
       <keyword name="QueuesProjectHelper.__hgQueueDeleteQueue" id="QueuesProjectHelper.__hgQueueDeleteQueue" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueDeleteQueue" />
@@ -9230,6 +9282,7 @@
       <keyword name="QueuesProjectHelper.__hgQueueGuardsList" id="QueuesProjectHelper.__hgQueueGuardsList" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueGuardsList" />
       <keyword name="QueuesProjectHelper.__hgQueueGuardsListAll" id="QueuesProjectHelper.__hgQueueGuardsListAll" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueGuardsListAll" />
       <keyword name="QueuesProjectHelper.__hgQueueGuardsSetActive" id="QueuesProjectHelper.__hgQueueGuardsSetActive" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueGuardsSetActive" />
+      <keyword name="QueuesProjectHelper.__hgQueueInit" id="QueuesProjectHelper.__hgQueueInit" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueInit" />
       <keyword name="QueuesProjectHelper.__hgQueueListPatches" id="QueuesProjectHelper.__hgQueueListPatches" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueListPatches" />
       <keyword name="QueuesProjectHelper.__hgQueueListQueues" id="QueuesProjectHelper.__hgQueueListQueues" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueListQueues" />
       <keyword name="QueuesProjectHelper.__hgQueueNewPatch" id="QueuesProjectHelper.__hgQueueNewPatch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueNewPatch" />
@@ -9253,6 +9306,7 @@
       <keyword name="QueuesProjectHelper.__hgQueueRenameQueue" id="QueuesProjectHelper.__hgQueueRenameQueue" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueRenameQueue" />
       <keyword name="QueuesProjectHelper.__hgQueueShowHeader" id="QueuesProjectHelper.__hgQueueShowHeader" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueShowHeader" />
       <keyword name="QueuesProjectHelper.__hgQueueShowPatch" id="QueuesProjectHelper.__hgQueueShowPatch" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueShowPatch" />
+      <keyword name="QueuesProjectHelper.__hgQueueStatus" id="QueuesProjectHelper.__hgQueueStatus" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__hgQueueStatus" />
       <keyword name="QueuesProjectHelper.__initGuardsActions" id="QueuesProjectHelper.__initGuardsActions" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__initGuardsActions" />
       <keyword name="QueuesProjectHelper.__initPushPopActions" id="QueuesProjectHelper.__initPushPopActions" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__initPushPopActions" />
       <keyword name="QueuesProjectHelper.__initPushPopForceActions" id="QueuesProjectHelper.__initPushPopForceActions" ref="eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html#QueuesProjectHelper.__initPushPopForceActions" />
@@ -9883,6 +9937,8 @@
       <keyword name="Subversion" id="Subversion" ref="eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion" />
       <keyword name="Subversion (Constructor)" id="Subversion (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.__init__" />
       <keyword name="Subversion (Constructor)" id="Subversion (Constructor)" ref="eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion.__init__" />
+      <keyword name="Subversion.__svnGetFileForRevision" id="Subversion.__svnGetFileForRevision" ref="eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.__svnGetFileForRevision" />
+      <keyword name="Subversion.__svnGetFileForRevision" id="Subversion.__svnGetFileForRevision" ref="eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion.__svnGetFileForRevision" />
       <keyword name="Subversion.__svnURL" id="Subversion.__svnURL" ref="eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.__svnURL" />
       <keyword name="Subversion.__svnURL" id="Subversion.__svnURL" ref="eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion.__svnURL" />
       <keyword name="Subversion.__vcsAllRegisteredStates_wc" id="Subversion.__vcsAllRegisteredStates_wc" ref="eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.__vcsAllRegisteredStates_wc" />
@@ -9935,6 +9991,8 @@
       <keyword name="Subversion.svnRepoBrowser" id="Subversion.svnRepoBrowser" ref="eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion.svnRepoBrowser" />
       <keyword name="Subversion.svnResolve" id="Subversion.svnResolve" ref="eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.svnResolve" />
       <keyword name="Subversion.svnResolve" id="Subversion.svnResolve" ref="eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion.svnResolve" />
+      <keyword name="Subversion.svnSbsDiff" id="Subversion.svnSbsDiff" ref="eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.svnSbsDiff" />
+      <keyword name="Subversion.svnSbsDiff" id="Subversion.svnSbsDiff" ref="eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion.svnSbsDiff" />
       <keyword name="Subversion.svnSetProp" id="Subversion.svnSetProp" ref="eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.svnSetProp" />
       <keyword name="Subversion.svnSetProp" id="Subversion.svnSetProp" ref="eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html#Subversion.svnSetProp" />
       <keyword name="Subversion.svnShowChangelists" id="Subversion.svnShowChangelists" ref="eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html#Subversion.svnShowChangelists" />
@@ -10367,6 +10425,10 @@
       <keyword name="SvnProjectBrowserHelper.__SVNRemoveFromChangelist" id="SvnProjectBrowserHelper.__SVNRemoveFromChangelist" ref="eric5.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNRemoveFromChangelist" />
       <keyword name="SvnProjectBrowserHelper.__SVNResolve" id="SvnProjectBrowserHelper.__SVNResolve" ref="eric5.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNResolve" />
       <keyword name="SvnProjectBrowserHelper.__SVNResolve" id="SvnProjectBrowserHelper.__SVNResolve" ref="eric5.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNResolve" />
+      <keyword name="SvnProjectBrowserHelper.__SVNSbsDiff" id="SvnProjectBrowserHelper.__SVNSbsDiff" ref="eric5.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNSbsDiff" />
+      <keyword name="SvnProjectBrowserHelper.__SVNSbsDiff" id="SvnProjectBrowserHelper.__SVNSbsDiff" ref="eric5.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNSbsDiff" />
+      <keyword name="SvnProjectBrowserHelper.__SVNSbsExtendedDiff" id="SvnProjectBrowserHelper.__SVNSbsExtendedDiff" ref="eric5.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNSbsExtendedDiff" />
+      <keyword name="SvnProjectBrowserHelper.__SVNSbsExtendedDiff" id="SvnProjectBrowserHelper.__SVNSbsExtendedDiff" ref="eric5.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNSbsExtendedDiff" />
       <keyword name="SvnProjectBrowserHelper.__SVNSetProp" id="SvnProjectBrowserHelper.__SVNSetProp" ref="eric5.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNSetProp" />
       <keyword name="SvnProjectBrowserHelper.__SVNSetProp" id="SvnProjectBrowserHelper.__SVNSetProp" ref="eric5.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNSetProp" />
       <keyword name="SvnProjectBrowserHelper.__SVNStealLock" id="SvnProjectBrowserHelper.__SVNStealLock" ref="eric5.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html#SvnProjectBrowserHelper.__SVNStealLock" />
@@ -10585,6 +10647,8 @@
       <keyword name="SvnStatusDialog.__restoreMissing" id="SvnStatusDialog.__restoreMissing" ref="eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html#SvnStatusDialog.__restoreMissing" />
       <keyword name="SvnStatusDialog.__revert" id="SvnStatusDialog.__revert" ref="eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html#SvnStatusDialog.__revert" />
       <keyword name="SvnStatusDialog.__revert" id="SvnStatusDialog.__revert" ref="eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html#SvnStatusDialog.__revert" />
+      <keyword name="SvnStatusDialog.__sbsDiff" id="SvnStatusDialog.__sbsDiff" ref="eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html#SvnStatusDialog.__sbsDiff" />
+      <keyword name="SvnStatusDialog.__sbsDiff" id="SvnStatusDialog.__sbsDiff" ref="eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html#SvnStatusDialog.__sbsDiff" />
       <keyword name="SvnStatusDialog.__showContextMenu" id="SvnStatusDialog.__showContextMenu" ref="eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html#SvnStatusDialog.__showContextMenu" />
       <keyword name="SvnStatusDialog.__showContextMenu" id="SvnStatusDialog.__showContextMenu" ref="eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html#SvnStatusDialog.__showContextMenu" />
       <keyword name="SvnStatusDialog.__showError" id="SvnStatusDialog.__showError" ref="eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html#SvnStatusDialog.__showError" />
@@ -10614,6 +10678,8 @@
       <keyword name="SvnStatusDialog.on_restoreButton_clicked" id="SvnStatusDialog.on_restoreButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html#SvnStatusDialog.on_restoreButton_clicked" />
       <keyword name="SvnStatusDialog.on_revertButton_clicked" id="SvnStatusDialog.on_revertButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html#SvnStatusDialog.on_revertButton_clicked" />
       <keyword name="SvnStatusDialog.on_revertButton_clicked" id="SvnStatusDialog.on_revertButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html#SvnStatusDialog.on_revertButton_clicked" />
+      <keyword name="SvnStatusDialog.on_sbsDiffButton_clicked" id="SvnStatusDialog.on_sbsDiffButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html#SvnStatusDialog.on_sbsDiffButton_clicked" />
+      <keyword name="SvnStatusDialog.on_sbsDiffButton_clicked" id="SvnStatusDialog.on_sbsDiffButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html#SvnStatusDialog.on_sbsDiffButton_clicked" />
       <keyword name="SvnStatusDialog.on_sendButton_clicked" id="SvnStatusDialog.on_sendButton_clicked" ref="eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html#SvnStatusDialog.on_sendButton_clicked" />
       <keyword name="SvnStatusDialog.on_statusFilterCombo_activated" id="SvnStatusDialog.on_statusFilterCombo_activated" ref="eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html#SvnStatusDialog.on_statusFilterCombo_activated" />
       <keyword name="SvnStatusDialog.on_statusFilterCombo_activated" id="SvnStatusDialog.on_statusFilterCombo_activated" ref="eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html#SvnStatusDialog.on_statusFilterCombo_activated" />
@@ -12151,11 +12217,22 @@
       <keyword name="VisibilityBase.setProtected" id="VisibilityBase.setProtected" ref="eric5.Utilities.ModuleParser.html#VisibilityBase.setProtected" />
       <keyword name="VisibilityBase.setPublic" id="VisibilityBase.setPublic" ref="eric5.Utilities.ModuleParser.html#VisibilityBase.setPublic" />
       <keyword name="VisibilityMixin" id="VisibilityMixin" ref="eric5.Utilities.ClassBrowsers.idlclbr.html#VisibilityMixin" />
+      <keyword name="VisibilityMixin" id="VisibilityMixin" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#VisibilityMixin" />
       <keyword name="VisibilityMixin" id="VisibilityMixin" ref="eric5.Utilities.ClassBrowsers.pyclbr.html#VisibilityMixin" />
       <keyword name="VisibilityMixin" id="VisibilityMixin" ref="eric5.Utilities.ClassBrowsers.rbclbr.html#VisibilityMixin" />
       <keyword name="VisibilityMixin (Constructor)" id="VisibilityMixin (Constructor)" ref="eric5.Utilities.ClassBrowsers.idlclbr.html#VisibilityMixin.__init__" />
+      <keyword name="VisibilityMixin (Constructor)" id="VisibilityMixin (Constructor)" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#VisibilityMixin.__init__" />
       <keyword name="VisibilityMixin (Constructor)" id="VisibilityMixin (Constructor)" ref="eric5.Utilities.ClassBrowsers.pyclbr.html#VisibilityMixin.__init__" />
       <keyword name="VisibilityMixin (Constructor)" id="VisibilityMixin (Constructor)" ref="eric5.Utilities.ClassBrowsers.rbclbr.html#VisibilityMixin.__init__" />
+      <keyword name="Visitor" id="Visitor" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Visitor" />
+      <keyword name="Visitor (Constructor)" id="Visitor (Constructor)" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Visitor.__init__" />
+      <keyword name="Visitor.__visit" id="Visitor.__visit" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Visitor.__visit" />
+      <keyword name="Visitor.parse" id="Visitor.parse" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Visitor.parse" />
+      <keyword name="Visitor.visit_const" id="Visitor.visit_const" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Visitor.visit_const" />
+      <keyword name="Visitor.visit_function" id="Visitor.visit_function" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Visitor.visit_function" />
+      <keyword name="Visitor.visit_noop" id="Visitor.visit_noop" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Visitor.visit_noop" />
+      <keyword name="Visitor.visit_property_init" id="Visitor.visit_property_init" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Visitor.visit_property_init" />
+      <keyword name="Visitor.visit_var" id="Visitor.visit_var" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#Visitor.visit_var" />
       <keyword name="VmListspacePlugin" id="VmListspacePlugin" ref="eric5.Plugins.PluginVmListspace.html#VmListspacePlugin" />
       <keyword name="VmListspacePlugin (Constructor)" id="VmListspacePlugin (Constructor)" ref="eric5.Plugins.PluginVmListspace.html#VmListspacePlugin.__init__" />
       <keyword name="VmListspacePlugin.activate" id="VmListspacePlugin.activate" ref="eric5.Plugins.PluginVmListspace.html#VmListspacePlugin.activate" />
@@ -12768,6 +12845,7 @@
       <keyword name="isinpath" id="isinpath" ref="eric5.Utilities.__init__.html#isinpath" />
       <keyword name="iter_child_nodes" id="iter_child_nodes" ref="eric5.UtilitiesPython2.py2flakes.checker.html#iter_child_nodes" />
       <keyword name="joinext" id="joinext" ref="eric5.Utilities.__init__.html#joinext" />
+      <keyword name="jsclbr (Module)" id="jsclbr (Module)" ref="eric5.Utilities.ClassBrowsers.jsclbr.html" />
       <keyword name="linesep" id="linesep" ref="eric5.Utilities.__init__.html#linesep" />
       <keyword name="loadTranslatorForLocale" id="loadTranslatorForLocale" ref="eric5.Toolbox.Startup.html#loadTranslatorForLocale" />
       <keyword name="loadTranslators" id="loadTranslators" ref="eric5.Toolbox.Startup.html#loadTranslators" />
@@ -12832,6 +12910,7 @@
       <keyword name="pendingWrite" id="pendingWrite" ref="eric5.DebugClients.Ruby.AsyncFile.html#pendingWrite" />
       <keyword name="pep8 (Module)" id="pep8 (Module)" ref="eric5.Plugins.CheckerPlugins.Pep8.pep8.html" />
       <keyword name="pep8 (Module)" id="pep8 (Module)" ref="eric5.UtilitiesPython2.pep8.html" />
+      <keyword name="prepareProcess" id="prepareProcess" ref="eric5.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html#prepareProcess" />
       <keyword name="prepareQtMacBundle" id="prepareQtMacBundle" ref="eric5.Utilities.__init__.html#prepareQtMacBundle" />
       <keyword name="prepareUninstall" id="prepareUninstall" ref="eric5.Plugins.PluginVcsMercurial.html#prepareUninstall" />
       <keyword name="prepareUninstall" id="prepareUninstall" ref="eric5.Plugins.PluginVcsPySvn.html#prepareUninstall" />
@@ -12896,6 +12975,7 @@
       <keyword name="readlines_1" id="readlines_1" ref="eric5.UtilitiesPython2.pep8.html#readlines_1" />
       <keyword name="readmodule" id="readmodule" ref="eric5.Utilities.ClassBrowsers.__init__.html#readmodule" />
       <keyword name="readmodule_ex" id="readmodule_ex" ref="eric5.Utilities.ClassBrowsers.idlclbr.html#readmodule_ex" />
+      <keyword name="readmodule_ex" id="readmodule_ex" ref="eric5.Utilities.ClassBrowsers.jsclbr.html#readmodule_ex" />
       <keyword name="readmodule_ex" id="readmodule_ex" ref="eric5.Utilities.ClassBrowsers.pyclbr.html#readmodule_ex" />
       <keyword name="readmodule_ex" id="readmodule_ex" ref="eric5.Utilities.ClassBrowsers.rbclbr.html#readmodule_ex" />
       <keyword name="rebase (Module)" id="rebase (Module)" ref="eric5.Plugins.VcsPlugins.vcsMercurial.RebaseExtension.rebase.html" />
@@ -13446,6 +13526,7 @@
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.BookmarksExtension.bookmarks.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.Config.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html</file>
+      <file>eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.HgFetchDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.ProjectHelper.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.FetchExtension.fetch.html</file>
@@ -13455,6 +13536,7 @@
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.GpgExtension.gpg.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgAddSubrepositoryDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog.html</file>
+      <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgBundleDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgClient.html</file>
@@ -13482,6 +13564,7 @@
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgServeDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.html</file>
+      <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgTagDialog.html</file>
       <file>eric5.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html</file>
@@ -13793,6 +13876,7 @@
       <file>eric5.Utilities.ClassBrowsers.ClbrBaseClasses.html</file>
       <file>eric5.Utilities.ClassBrowsers.__init__.html</file>
       <file>eric5.Utilities.ClassBrowsers.idlclbr.html</file>
+      <file>eric5.Utilities.ClassBrowsers.jsclbr.html</file>
       <file>eric5.Utilities.ClassBrowsers.pyclbr.html</file>
       <file>eric5.Utilities.ClassBrowsers.rbclbr.html</file>
       <file>eric5.Utilities.FtpUtilities.html</file>
--- a/Documentation/Source/eric5.Helpviewer.HelpWindow.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Helpviewer.HelpWindow.html	Mon Aug 12 22:21:53 2013 +0200
@@ -265,12 +265,18 @@
 <td><a href="#HelpWindow.__reload">__reload</a></td>
 <td>Private slot called to handle the reload action.</td>
 </tr><tr>
+<td><a href="#HelpWindow.__removeOldDocumentation">__removeOldDocumentation</a></td>
+<td>Private slot to remove non-existing documentation from the help engine.</td>
+</tr><tr>
 <td><a href="#HelpWindow.__savePageAs">__savePageAs</a></td>
 <td>Private slot to save the current page.</td>
 </tr><tr>
 <td><a href="#HelpWindow.__savePageScreen">__savePageScreen</a></td>
 <td>Private slot to save the current page as a screen shot.</td>
 </tr><tr>
+<td><a href="#HelpWindow.__saveVisiblePageScreen">__saveVisiblePageScreen</a></td>
+<td>Private slot to save the visible part of the current page as a screen shot.</td>
+</tr><tr>
 <td><a href="#HelpWindow.__searchForWord">__searchForWord</a></td>
 <td>Private slot to search for a word.</td>
 </tr><tr>
@@ -1034,6 +1040,11 @@
 <b>__reload</b>(<i></i>)
 <p>
         Private slot called to handle the reload action.
+</p><a NAME="HelpWindow.__removeOldDocumentation" ID="HelpWindow.__removeOldDocumentation"></a>
+<h4>HelpWindow.__removeOldDocumentation</h4>
+<b>__removeOldDocumentation</b>(<i></i>)
+<p>
+        Private slot to remove non-existing documentation from the help engine.
 </p><a NAME="HelpWindow.__savePageAs" ID="HelpWindow.__savePageAs"></a>
 <h4>HelpWindow.__savePageAs</h4>
 <b>__savePageAs</b>(<i></i>)
@@ -1041,9 +1052,20 @@
         Private slot to save the current page.
 </p><a NAME="HelpWindow.__savePageScreen" ID="HelpWindow.__savePageScreen"></a>
 <h4>HelpWindow.__savePageScreen</h4>
-<b>__savePageScreen</b>(<i></i>)
+<b>__savePageScreen</b>(<i>visibleOnly=False</i>)
 <p>
         Private slot to save the current page as a screen shot.
+</p><dl>
+<dt><i>visibleOnly</i></dt>
+<dd>
+flag indicating to just save the visible part
+            of the page (boolean)
+</dd>
+</dl><a NAME="HelpWindow.__saveVisiblePageScreen" ID="HelpWindow.__saveVisiblePageScreen"></a>
+<h4>HelpWindow.__saveVisiblePageScreen</h4>
+<b>__saveVisiblePageScreen</b>(<i></i>)
+<p>
+        Private slot to save the visible part of the current page as a screen shot.
 </p><a NAME="HelpWindow.__searchForWord" ID="HelpWindow.__searchForWord"></a>
 <h4>HelpWindow.__searchForWord</h4>
 <b>__searchForWord</b>(<i></i>)
--- a/Documentation/Source/eric5.Helpviewer.PageScreenDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Helpviewer.PageScreenDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -76,7 +76,7 @@
 </table>
 <a NAME="PageScreenDialog.__init__" ID="PageScreenDialog.__init__"></a>
 <h4>PageScreenDialog (Constructor)</h4>
-<b>PageScreenDialog</b>(<i>view, parent=None</i>)
+<b>PageScreenDialog</b>(<i>view, visibleOnly=False, parent=None</i>)
 <p>
         Constructor
 </p><dl>
@@ -84,16 +84,26 @@
 <dd>
 reference to the web view containing the page to be saved
             (HelpBrowser)
+</dd><dt><i>visibleOnly</i></dt>
+<dd>
+flag indicating to just save the visible part
+            of the page (boolean)
 </dd><dt><i>parent</i></dt>
 <dd>
 reference to the parent widget (QWidget)
 </dd>
 </dl><a NAME="PageScreenDialog.__createPixmap" ID="PageScreenDialog.__createPixmap"></a>
 <h4>PageScreenDialog.__createPixmap</h4>
-<b>__createPixmap</b>(<i></i>)
+<b>__createPixmap</b>(<i>visibleOnly</i>)
 <p>
         Private slot to create a pixmap of the associated view's page.
-</p><a NAME="PageScreenDialog.__savePageScreen" ID="PageScreenDialog.__savePageScreen"></a>
+</p><dl>
+<dt><i>visibleOnly</i></dt>
+<dd>
+flag indicating to just save the visible part
+            of the page (boolean)
+</dd>
+</dl><a NAME="PageScreenDialog.__savePageScreen" ID="PageScreenDialog.__savePageScreen"></a>
 <h4>PageScreenDialog.__savePageScreen</h4>
 <b>__savePageScreen</b>(<i></i>)
 <p>
--- a/Documentation/Source/eric5.IconEditor.IconEditorWindow.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.IconEditor.IconEditorWindow.html	Mon Aug 12 22:21:53 2013 +0200
@@ -174,6 +174,9 @@
 <td><a href="#IconEditorWindow.gestureEvent">gestureEvent</a></td>
 <td>Protected method handling gesture events.</td>
 </tr><tr>
+<td><a href="#IconEditorWindow.setRecentPaths">setRecentPaths</a></td>
+<td>Public method to set the last open and save paths.</td>
+</tr><tr>
 <td><a href="#IconEditorWindow.wheelEvent">wheelEvent</a></td>
 <td>Protected method to handle wheel events.</td>
 </tr>
@@ -184,7 +187,7 @@
 </table>
 <a NAME="IconEditorWindow.__init__" ID="IconEditorWindow.__init__"></a>
 <h4>IconEditorWindow (Constructor)</h4>
-<b>IconEditorWindow</b>(<i>fileName="", parent=None, fromEric=False, initShortcutsOnly=False</i>)
+<b>IconEditorWindow</b>(<i>fileName="", parent=None, fromEric=False, initShortcutsOnly=False, project=None</i>)
 <p>
         Constructor
 </p><dl>
@@ -202,6 +205,9 @@
 <dd>
 flag indicating to just initialize the keyboard
             shortcuts (boolean)
+</dd><dt><i>project=</i></dt>
+<dd>
+reference to the project object (Project)
 </dd>
 </dl><a NAME="IconEditorWindow.__about" ID="IconEditorWindow.__about"></a>
 <h4>IconEditorWindow.__about</h4>
@@ -461,6 +467,19 @@
 <dd>
 reference to the gesture event (QGestureEvent
 </dd>
+</dl><a NAME="IconEditorWindow.setRecentPaths" ID="IconEditorWindow.setRecentPaths"></a>
+<h4>IconEditorWindow.setRecentPaths</h4>
+<b>setRecentPaths</b>(<i>openPath, savePath</i>)
+<p>
+        Public method to set the last open and save paths.
+</p><dl>
+<dt><i>openPath</i></dt>
+<dd>
+least recently used open path (string)
+</dd><dt><i>savePath</i></dt>
+<dd>
+least recently used save path (string)
+</dd>
 </dl><a NAME="IconEditorWindow.wheelEvent" ID="IconEditorWindow.wheelEvent"></a>
 <h4>IconEditorWindow.wheelEvent</h4>
 <b>wheelEvent</b>(<i>evt</i>)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog</h1>
+<p>
+Module implementing a dialog to enter the user data for a minimal hgrc file.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#MercurialUserDataDialog">MercurialUserDataDialog</a></td>
+<td>Class implementing a dialog to enter the user data for a minimal hgrc file.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="MercurialUserDataDialog" ID="MercurialUserDataDialog"></a>
+<h2>MercurialUserDataDialog</h2>
+<p>
+    Class implementing a dialog to enter the user data for a minimal hgrc file.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_MercurialUserDataDialog
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#MercurialUserDataDialog.__init__">MercurialUserDataDialog</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#MercurialUserDataDialog.getData">getData</a></td>
+<td>Public method to retrieve the data.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="MercurialUserDataDialog.__init__" ID="MercurialUserDataDialog.__init__"></a>
+<h4>MercurialUserDataDialog (Constructor)</h4>
+<b>MercurialUserDataDialog</b>(<i>parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="MercurialUserDataDialog.getData" ID="MercurialUserDataDialog.getData"></a>
+<h4>MercurialUserDataDialog.getData</h4>
+<b>getData</b>(<i></i>)
+<p>
+        Public method to retrieve the data.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple containing the user name and the user email address (string, string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog</h1>
+<p>
+Module implementing a dialog to enter the archive data.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#HgArchiveDialog">HgArchiveDialog</a></td>
+<td>Class implementing a dialog to enter the archive data.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="HgArchiveDialog" ID="HgArchiveDialog"></a>
+<h2>HgArchiveDialog</h2>
+<p>
+    Class implementing a dialog to enter the archive data.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_HgArchiveDialog
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#HgArchiveDialog.__init__">HgArchiveDialog</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#HgArchiveDialog.getData">getData</a></td>
+<td>Public method to retrieve the data.</td>
+</tr><tr>
+<td><a href="#HgArchiveDialog.on_archiveButton_clicked">on_archiveButton_clicked</a></td>
+<td>Private slot to select the archive name via a file selection dialog.</td>
+</tr><tr>
+<td><a href="#HgArchiveDialog.on_archiveEdit_textChanged">on_archiveEdit_textChanged</a></td>
+<td>Private slot to handle changes of the archive name.</td>
+</tr><tr>
+<td><a href="#HgArchiveDialog.on_typeComboBox_activated">on_typeComboBox_activated</a></td>
+<td>Private slot to react on changes of the selected archive type.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="HgArchiveDialog.__init__" ID="HgArchiveDialog.__init__"></a>
+<h4>HgArchiveDialog (Constructor)</h4>
+<b>HgArchiveDialog</b>(<i>vcs, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>vcs</i></dt>
+<dd>
+reference to the Mercurial object (Hg)
+</dd><dt><i>parent</i></dt>
+<dd>
+reference to the parent widget (QWidget)
+</dd>
+</dl><a NAME="HgArchiveDialog.getData" ID="HgArchiveDialog.getData"></a>
+<h4>HgArchiveDialog.getData</h4>
+<b>getData</b>(<i></i>)
+<p>
+        Public method to retrieve the data.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+tuple giving the archive name (string), the archive type (string),
+            the directory prefix 8string) and a flag indicating to recurse into
+            subrepositories (boolean)
+</dd>
+</dl><a NAME="HgArchiveDialog.on_archiveButton_clicked" ID="HgArchiveDialog.on_archiveButton_clicked"></a>
+<h4>HgArchiveDialog.on_archiveButton_clicked</h4>
+<b>on_archiveButton_clicked</b>(<i></i>)
+<p>
+        Private slot to select the archive name via a file selection dialog.
+</p><a NAME="HgArchiveDialog.on_archiveEdit_textChanged" ID="HgArchiveDialog.on_archiveEdit_textChanged"></a>
+<h4>HgArchiveDialog.on_archiveEdit_textChanged</h4>
+<b>on_archiveEdit_textChanged</b>(<i>archive</i>)
+<p>
+        Private slot to handle changes of the archive name.
+</p><a NAME="HgArchiveDialog.on_typeComboBox_activated" ID="HgArchiveDialog.on_typeComboBox_activated"></a>
+<h4>HgArchiveDialog.on_typeComboBox_activated</h4>
+<b>on_typeComboBox_activated</b>(<i>index</i>)
+<p>
+        Private slot to react on changes of the selected archive type.
+</p><dl>
+<dt><i>index</i></dt>
+<dd>
+index of the selected type (integer)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgCommitDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgCommitDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -100,13 +100,16 @@
 </table>
 <a NAME="HgCommitDialog.__init__" ID="HgCommitDialog.__init__"></a>
 <h4>HgCommitDialog (Constructor)</h4>
-<b>HgCommitDialog</b>(<i>vcs, parent=None</i>)
+<b>HgCommitDialog</b>(<i>vcs, mq, parent=None</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>vcs</i></dt>
 <dd>
 reference to the vcs object
+</dd><dt><i>mq</i></dt>
+<dd>
+flag indicating a queue commit (boolean)
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgLogBrowserDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -214,7 +214,7 @@
 </table>
 <a NAME="HgLogBrowserDialog.__init__" ID="HgLogBrowserDialog.__init__"></a>
 <h4>HgLogBrowserDialog (Constructor)</h4>
-<b>HgLogBrowserDialog</b>(<i>vcs, mode="log", bundle=None, parent=None</i>)
+<b>HgLogBrowserDialog</b>(<i>vcs, mode="log", bundle=None, isFile=False, parent=None</i>)
 <p>
         Constructor
 </p><dl>
@@ -227,6 +227,9 @@
 </dd><dt><i>bundle</i></dt>
 <dd>
 name of a bundle file (string)
+</dd><dt><i>isFile</i></dt>
+<dd>
+flag indicating log for a file is to be shown (boolean)
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgLogDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -112,7 +112,7 @@
 </table>
 <a NAME="HgLogDialog.__init__" ID="HgLogDialog.__init__"></a>
 <h4>HgLogDialog (Constructor)</h4>
-<b>HgLogDialog</b>(<i>vcs, mode="log", bundle=None, parent=None</i>)
+<b>HgLogDialog</b>(<i>vcs, mode="log", bundle=None, isFile=False, parent=None</i>)
 <p>
         Constructor
 </p><dl>
@@ -125,6 +125,9 @@
 </dd><dt><i>bundle</i></dt>
 <dd>
 name of a bundle file (string)
+</dd><dt><i>isFile</i></dt>
+<dd>
+flag indicating log for a file is to be shown (boolean)
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -126,6 +126,9 @@
 <td><a href="#HgStatusDialog.__revert">__revert</a></td>
 <td>Private slot to handle the Revert context menu entry.</td>
 </tr><tr>
+<td><a href="#HgStatusDialog.__sbsDiff">__sbsDiff</a></td>
+<td>Private slot to handle the Diff context menu entry.</td>
+</tr><tr>
 <td><a href="#HgStatusDialog.__showContextMenu">__showContextMenu</a></td>
 <td>Protected slot to show the context menu of the status list.</td>
 </tr><tr>
@@ -174,6 +177,9 @@
 <td><a href="#HgStatusDialog.on_revertButton_clicked">on_revertButton_clicked</a></td>
 <td>Private slot to handle the press of the Revert button.</td>
 </tr><tr>
+<td><a href="#HgStatusDialog.on_sbsDiffButton_clicked">on_sbsDiffButton_clicked</a></td>
+<td>Private slot to handle the press of the Side-by-Side Diff button.</td>
+</tr><tr>
 <td><a href="#HgStatusDialog.on_sendButton_clicked">on_sendButton_clicked</a></td>
 <td>Private slot to send the input to the subversion process.</td>
 </tr><tr>
@@ -196,13 +202,16 @@
 </table>
 <a NAME="HgStatusDialog.__init__" ID="HgStatusDialog.__init__"></a>
 <h4>HgStatusDialog (Constructor)</h4>
-<b>HgStatusDialog</b>(<i>vcs, parent=None</i>)
+<b>HgStatusDialog</b>(<i>vcs, mq=False, parent=None</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>vcs</i></dt>
 <dd>
 reference to the vcs object
+</dd><dt><i>mq</i></dt>
+<dd>
+flag indicating to show a queue repo status (boolean)
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
@@ -369,6 +378,11 @@
 <b>__revert</b>(<i></i>)
 <p>
         Private slot to handle the Revert context menu entry.
+</p><a NAME="HgStatusDialog.__sbsDiff" ID="HgStatusDialog.__sbsDiff"></a>
+<h4>HgStatusDialog.__sbsDiff</h4>
+<b>__sbsDiff</b>(<i></i>)
+<p>
+        Private slot to handle the Diff context menu entry.
 </p><a NAME="HgStatusDialog.__showContextMenu" ID="HgStatusDialog.__showContextMenu"></a>
 <h4>HgStatusDialog.__showContextMenu</h4>
 <b>__showContextMenu</b>(<i>coord</i>)
@@ -479,6 +493,11 @@
 <b>on_revertButton_clicked</b>(<i></i>)
 <p>
         Private slot to handle the press of the Revert button.
+</p><a NAME="HgStatusDialog.on_sbsDiffButton_clicked" ID="HgStatusDialog.on_sbsDiffButton_clicked"></a>
+<h4>HgStatusDialog.on_sbsDiffButton_clicked</h4>
+<b>on_sbsDiffButton_clicked</b>(<i></i>)
+<p>
+        Private slot to handle the press of the Side-by-Side Diff button.
 </p><a NAME="HgStatusDialog.on_sendButton_clicked" ID="HgStatusDialog.on_sendButton_clicked"></a>
 <h4>HgStatusDialog.on_sendButton_clicked</h4>
 <b>on_sendButton_clicked</b>(<i></i>)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog</h1>
+<p>
+Module implementing a dialog to show some summary information of the working
+directory state.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#HgSummaryDialog">HgSummaryDialog</a></td>
+<td>Class implementing a dialog to show some summary information of the working directory state.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr /><hr />
+<a NAME="HgSummaryDialog" ID="HgSummaryDialog"></a>
+<h2>HgSummaryDialog</h2>
+<p>
+    Class implementing a dialog to show some summary information of the working
+    directory state.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_HgSummaryDialog
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#HgSummaryDialog.__init__">HgSummaryDialog</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.__committed">__committed</a></td>
+<td>Private slot called after the commit has finished.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.__finish">__finish</a></td>
+<td>Private slot called when the process finished or the user pressed the button.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.__procFinished">__procFinished</a></td>
+<td>Private slot connected to the finished signal.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.__processOutput">__processOutput</a></td>
+<td>Private method to process the output into nice readable text.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.__readStderr">__readStderr</a></td>
+<td>Private slot to handle the readyReadStandardError signal.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.__readStdout">__readStdout</a></td>
+<td>Private slot to handle the readyReadStandardOutput signal.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.__showError">__showError</a></td>
+<td>Private slot to show some error.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.closeEvent">closeEvent</a></td>
+<td>Private slot implementing a close event handler.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
+<td>Private slot called by a button of the button box clicked.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.on_refreshButton_clicked">on_refreshButton_clicked</a></td>
+<td>Private slot to refresh the status display.</td>
+</tr><tr>
+<td><a href="#HgSummaryDialog.start">start</a></td>
+<td>Public slot to start the hg summary command.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="HgSummaryDialog.__init__" ID="HgSummaryDialog.__init__"></a>
+<h4>HgSummaryDialog (Constructor)</h4>
+<b>HgSummaryDialog</b>(<i>vcs, parent=None</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>vcs</i></dt>
+<dd>
+reference to the vcs object
+</dd><dt><i>parent</i></dt>
+<dd>
+parent widget (QWidget)
+</dd>
+</dl><a NAME="HgSummaryDialog.__committed" ID="HgSummaryDialog.__committed"></a>
+<h4>HgSummaryDialog.__committed</h4>
+<b>__committed</b>(<i></i>)
+<p>
+        Private slot called after the commit has finished.
+</p><a NAME="HgSummaryDialog.__finish" ID="HgSummaryDialog.__finish"></a>
+<h4>HgSummaryDialog.__finish</h4>
+<b>__finish</b>(<i></i>)
+<p>
+        Private slot called when the process finished or the user pressed the button.
+</p><a NAME="HgSummaryDialog.__procFinished" ID="HgSummaryDialog.__procFinished"></a>
+<h4>HgSummaryDialog.__procFinished</h4>
+<b>__procFinished</b>(<i>exitCode, exitStatus</i>)
+<p>
+        Private slot connected to the finished signal.
+</p><dl>
+<dt><i>exitCode</i></dt>
+<dd>
+exit code of the process (integer)
+</dd><dt><i>exitStatus</i></dt>
+<dd>
+exit status of the process (QProcess.ExitStatus)
+</dd>
+</dl><a NAME="HgSummaryDialog.__processOutput" ID="HgSummaryDialog.__processOutput"></a>
+<h4>HgSummaryDialog.__processOutput</h4>
+<b>__processOutput</b>(<i>output</i>)
+<p>
+        Private method to process the output into nice readable text.
+</p><dl>
+<dt><i>output</i></dt>
+<dd>
+output from the summary command (string)
+</dd>
+</dl><a NAME="HgSummaryDialog.__readStderr" ID="HgSummaryDialog.__readStderr"></a>
+<h4>HgSummaryDialog.__readStderr</h4>
+<b>__readStderr</b>(<i></i>)
+<p>
+        Private slot to handle the readyReadStandardError signal.
+</p><p>
+        It reads the error output of the process and inserts it into the
+        error pane.
+</p><a NAME="HgSummaryDialog.__readStdout" ID="HgSummaryDialog.__readStdout"></a>
+<h4>HgSummaryDialog.__readStdout</h4>
+<b>__readStdout</b>(<i></i>)
+<p>
+        Private slot to handle the readyReadStandardOutput signal.
+</p><p>
+        It reads the output of the process, formats it and inserts it into
+        the contents pane.
+</p><a NAME="HgSummaryDialog.__showError" ID="HgSummaryDialog.__showError"></a>
+<h4>HgSummaryDialog.__showError</h4>
+<b>__showError</b>(<i>out</i>)
+<p>
+        Private slot to show some error.
+</p><dl>
+<dt><i>out</i></dt>
+<dd>
+error to be shown (string)
+</dd>
+</dl><a NAME="HgSummaryDialog.closeEvent" ID="HgSummaryDialog.closeEvent"></a>
+<h4>HgSummaryDialog.closeEvent</h4>
+<b>closeEvent</b>(<i>e</i>)
+<p>
+        Private slot implementing a close event handler.
+</p><dl>
+<dt><i>e</i></dt>
+<dd>
+close event (QCloseEvent)
+</dd>
+</dl><a NAME="HgSummaryDialog.on_buttonBox_clicked" ID="HgSummaryDialog.on_buttonBox_clicked"></a>
+<h4>HgSummaryDialog.on_buttonBox_clicked</h4>
+<b>on_buttonBox_clicked</b>(<i>button</i>)
+<p>
+        Private slot called by a button of the button box clicked.
+</p><dl>
+<dt><i>button</i></dt>
+<dd>
+button that was clicked (QAbstractButton)
+</dd>
+</dl><a NAME="HgSummaryDialog.on_refreshButton_clicked" ID="HgSummaryDialog.on_refreshButton_clicked"></a>
+<h4>HgSummaryDialog.on_refreshButton_clicked</h4>
+<b>on_refreshButton_clicked</b>(<i></i>)
+<p>
+        Private slot to refresh the status display.
+</p><a NAME="HgSummaryDialog.start" ID="HgSummaryDialog.start"></a>
+<h4>HgSummaryDialog.start</h4>
+<b>start</b>(<i>path, mq=False</i>)
+<p>
+        Public slot to start the hg summary command.
+</p><dl>
+<dt><i>path</i></dt>
+<dd>
+path name of the working directory (string)
+</dd><dt><i>mq</i></dt>
+<dd>
+flag indicating to show the queue status as well (boolean)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html	Mon Aug 12 22:21:53 2013 +0200
@@ -36,6 +36,9 @@
 <tr>
 <td><a href="#getConfigPath">getConfigPath</a></td>
 <td>Public method to get the filename of the config file.</td>
+</tr><tr>
+<td><a href="#prepareProcess">prepareProcess</a></td>
+<td>Public method to prepare the given process.</td>
 </tr>
 </table>
 <hr /><hr />
@@ -51,5 +54,24 @@
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="prepareProcess" ID="prepareProcess"></a>
+<h2>prepareProcess</h2>
+<b>prepareProcess</b>(<i>proc, encoding="", language=""</i>)
+<p>
+    Public method to prepare the given process.
+</p><dl>
+<dt><i>proc</i></dt>
+<dd>
+reference to the proces to be prepared (QProcess)
+</dd><dt><i>encoding</i></dt>
+<dd>
+encoding to be used by the process (string)
+</dd><dt><i>language</i></dt>
+<dd>
+language to be set (string)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ProjectBrowserHelper.html	Mon Aug 12 22:21:53 2013 +0200
@@ -84,6 +84,12 @@
 <td><a href="#HgProjectBrowserHelper.__HgRevert">__HgRevert</a></td>
 <td>Protected slot called by the context menu to revert changes made.</td>
 </tr><tr>
+<td><a href="#HgProjectBrowserHelper.__HgSbsDiff">__HgSbsDiff</a></td>
+<td>Private slot called by the context menu to show the difference of a file to the repository side-by-side.</td>
+</tr><tr>
+<td><a href="#HgProjectBrowserHelper.__HgSbsExtendedDiff">__HgSbsExtendedDiff</a></td>
+<td>Private slot called by the context menu to show the difference of a file to the repository side-by-side allowing the selection of revisions to compare.</td>
+</tr><tr>
 <td><a href="#HgProjectBrowserHelper._addVCSMenu">_addVCSMenu</a></td>
 <td>Protected method used to add the VCS menu to all project browsers.</td>
 </tr><tr>
@@ -186,6 +192,18 @@
 <b>__HgRevert</b>(<i></i>)
 <p>
         Protected slot called by the context menu to revert changes made.
+</p><a NAME="HgProjectBrowserHelper.__HgSbsDiff" ID="HgProjectBrowserHelper.__HgSbsDiff"></a>
+<h4>HgProjectBrowserHelper.__HgSbsDiff</h4>
+<b>__HgSbsDiff</b>(<i></i>)
+<p>
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side.
+</p><a NAME="HgProjectBrowserHelper.__HgSbsExtendedDiff" ID="HgProjectBrowserHelper.__HgSbsExtendedDiff"></a>
+<h4>HgProjectBrowserHelper.__HgSbsExtendedDiff</h4>
+<b>__HgSbsExtendedDiff</b>(<i></i>)
+<p>
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side allowing the selection of revisions to compare.
 </p><a NAME="HgProjectBrowserHelper._addVCSMenu" ID="HgProjectBrowserHelper._addVCSMenu"></a>
 <h4>HgProjectBrowserHelper._addVCSMenu</h4>
 <b>_addVCSMenu</b>(<i>mainMenu</i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.ProjectHelper.html	Mon Aug 12 22:21:53 2013 +0200
@@ -63,6 +63,9 @@
 <td><a href="#HgProjectHelper.__hgAddSubrepository">__hgAddSubrepository</a></td>
 <td>Private slot used to add a sub-repository.</td>
 </tr><tr>
+<td><a href="#HgProjectHelper.__hgArchive">__hgArchive</a></td>
+<td>Private slot to create an unversioned archive from the repository.</td>
+</tr><tr>
 <td><a href="#HgProjectHelper.__hgBackout">__hgBackout</a></td>
 <td>Private slot used to back out changes of a changeset.</td>
 </tr><tr>
@@ -183,6 +186,9 @@
 <td><a href="#HgProjectHelper.__hgShowPaths">__hgShowPaths</a></td>
 <td>Private slot used to show the aliases for remote repositories.</td>
 </tr><tr>
+<td><a href="#HgProjectHelper.__hgSummary">__hgSummary</a></td>
+<td>Private slot to show a working directory summary.</td>
+</tr><tr>
 <td><a href="#HgProjectHelper.__hgTagList">__hgTagList</a></td>
 <td>Private slot used to list the tags of the project.</td>
 </tr><tr>
@@ -245,6 +251,11 @@
 <b>__hgAddSubrepository</b>(<i></i>)
 <p>
         Private slot used to add a sub-repository.
+</p><a NAME="HgProjectHelper.__hgArchive" ID="HgProjectHelper.__hgArchive"></a>
+<h4>HgProjectHelper.__hgArchive</h4>
+<b>__hgArchive</b>(<i></i>)
+<p>
+        Private slot to create an unversioned archive from the repository.
 </p><a NAME="HgProjectHelper.__hgBackout" ID="HgProjectHelper.__hgBackout"></a>
 <h4>HgProjectHelper.__hgBackout</h4>
 <b>__hgBackout</b>(<i></i>)
@@ -447,6 +458,11 @@
 <b>__hgShowPaths</b>(<i></i>)
 <p>
         Private slot used to show the aliases for remote repositories.
+</p><a NAME="HgProjectHelper.__hgSummary" ID="HgProjectHelper.__hgSummary"></a>
+<h4>HgProjectHelper.__hgSummary</h4>
+<b>__hgSummary</b>(<i></i>)
+<p>
+        Private slot to show a working directory summary.
 </p><a NAME="HgProjectHelper.__hgTagList" ID="HgProjectHelper.__hgTagList"></a>
 <h4>HgProjectHelper.__hgTagList</h4>
 <b>__hgTagList</b>(<i></i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.ProjectHelper.html	Mon Aug 12 22:21:53 2013 +0200
@@ -63,6 +63,9 @@
 <td><a href="#QueuesProjectHelper.__hgQueueActivateQueue">__hgQueueActivateQueue</a></td>
 <td>Private slot used to set the active queue.</td>
 </tr><tr>
+<td><a href="#QueuesProjectHelper.__hgQueueCommit">__hgQueueCommit</a></td>
+<td>Private slot to commit changes in the queue repository.</td>
+</tr><tr>
 <td><a href="#QueuesProjectHelper.__hgQueueCreateQueue">__hgQueueCreateQueue</a></td>
 <td>Private slot used to create a new queue.</td>
 </tr><tr>
@@ -105,6 +108,9 @@
 <td><a href="#QueuesProjectHelper.__hgQueueGuardsSetActive">__hgQueueGuardsSetActive</a></td>
 <td>Private slot used to set the active guards.</td>
 </tr><tr>
+<td><a href="#QueuesProjectHelper.__hgQueueInit">__hgQueueInit</a></td>
+<td>Private slot to initialize a new queue repository.</td>
+</tr><tr>
 <td><a href="#QueuesProjectHelper.__hgQueueListPatches">__hgQueueListPatches</a></td>
 <td>Private slot used to show a list of applied and unapplied patches.</td>
 </tr><tr>
@@ -174,6 +180,9 @@
 <td><a href="#QueuesProjectHelper.__hgQueueShowPatch">__hgQueueShowPatch</a></td>
 <td>Private slot used to show the contents of the current patch.</td>
 </tr><tr>
+<td><a href="#QueuesProjectHelper.__hgQueueStatus">__hgQueueStatus</a></td>
+<td>Private slot to show the status of the queue repository.</td>
+</tr><tr>
 <td><a href="#QueuesProjectHelper.__initGuardsActions">__initGuardsActions</a></td>
 <td>Public method to generate the guards action objects.</td>
 </tr><tr>
@@ -210,6 +219,11 @@
 <b>__hgQueueActivateQueue</b>(<i></i>)
 <p>
         Private slot used to set the active queue.
+</p><a NAME="QueuesProjectHelper.__hgQueueCommit" ID="QueuesProjectHelper.__hgQueueCommit"></a>
+<h4>QueuesProjectHelper.__hgQueueCommit</h4>
+<b>__hgQueueCommit</b>(<i></i>)
+<p>
+        Private slot to commit changes in the queue repository.
 </p><a NAME="QueuesProjectHelper.__hgQueueCreateQueue" ID="QueuesProjectHelper.__hgQueueCreateQueue"></a>
 <h4>QueuesProjectHelper.__hgQueueCreateQueue</h4>
 <b>__hgQueueCreateQueue</b>(<i></i>)
@@ -282,6 +296,11 @@
 <b>__hgQueueGuardsSetActive</b>(<i></i>)
 <p>
         Private slot used to set the active guards.
+</p><a NAME="QueuesProjectHelper.__hgQueueInit" ID="QueuesProjectHelper.__hgQueueInit"></a>
+<h4>QueuesProjectHelper.__hgQueueInit</h4>
+<b>__hgQueueInit</b>(<i></i>)
+<p>
+        Private slot to initialize a new queue repository.
 </p><a NAME="QueuesProjectHelper.__hgQueueListPatches" ID="QueuesProjectHelper.__hgQueueListPatches"></a>
 <h4>QueuesProjectHelper.__hgQueueListPatches</h4>
 <b>__hgQueueListPatches</b>(<i></i>)
@@ -430,6 +449,11 @@
 <b>__hgQueueShowPatch</b>(<i></i>)
 <p>
         Private slot used to show the contents of the current patch.
+</p><a NAME="QueuesProjectHelper.__hgQueueStatus" ID="QueuesProjectHelper.__hgQueueStatus"></a>
+<h4>QueuesProjectHelper.__hgQueueStatus</h4>
+<b>__hgQueueStatus</b>(<i></i>)
+<p>
+        Private slot to show the status of the queue repository.
 </p><a NAME="QueuesProjectHelper.__initGuardsActions" ID="QueuesProjectHelper.__initGuardsActions"></a>
 <h4>QueuesProjectHelper.__initGuardsActions</h4>
 <b>__initGuardsActions</b>(<i></i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html	Mon Aug 12 22:21:53 2013 +0200
@@ -108,6 +108,9 @@
 <td><a href="#Queues.hgQueueGuardsSetActive">hgQueueGuardsSetActive</a></td>
 <td>Public method to set the active guards.</td>
 </tr><tr>
+<td><a href="#Queues.hgQueueInit">hgQueueInit</a></td>
+<td>Public method to initialize a new queue repository.</td>
+</tr><tr>
 <td><a href="#Queues.hgQueueListPatches">hgQueueListPatches</a></td>
 <td>Public method to show a list of all patches.</td>
 </tr><tr>
@@ -132,6 +135,9 @@
 <td><a href="#Queues.hgQueueShowPatch">hgQueueShowPatch</a></td>
 <td>Public method to show the contents of the current patch.</td>
 </tr><tr>
+<td><a href="#Queues.hgQueueStatus">hgQueueStatus</a></td>
+<td>Public method used to view the status of a queue repository.</td>
+</tr><tr>
 <td><a href="#Queues.shutdown">shutdown</a></td>
 <td>Public method used to shutdown the queues interface.</td>
 </tr>
@@ -348,6 +354,16 @@
 <dd>
 file/directory name (string)
 </dd>
+</dl><a NAME="Queues.hgQueueInit" ID="Queues.hgQueueInit"></a>
+<h4>Queues.hgQueueInit</h4>
+<b>hgQueueInit</b>(<i>name</i>)
+<p>
+        Public method to initialize a new queue repository.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+directory name (string)
+</dd>
 </dl><a NAME="Queues.hgQueueListPatches" ID="Queues.hgQueueListPatches"></a>
 <h4>Queues.hgQueueListPatches</h4>
 <b>hgQueueListPatches</b>(<i>name</i>)
@@ -451,6 +467,16 @@
 <dd>
 file/directory name (string)
 </dd>
+</dl><a NAME="Queues.hgQueueStatus" ID="Queues.hgQueueStatus"></a>
+<h4>Queues.hgQueueStatus</h4>
+<b>hgQueueStatus</b>(<i>name</i>)
+<p>
+        Public method used to view the status of a queue repository.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+directory name (string)
+</dd>
 </dl><a NAME="Queues.shutdown" ID="Queues.shutdown"></a>
 <h4>Queues.shutdown</h4>
 <b>shutdown</b>(<i></i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsMercurial.hg.html	Mon Aug 12 22:21:53 2013 +0200
@@ -73,6 +73,9 @@
 <td><a href="#Hg.__getExtensionsInfo">__getExtensionsInfo</a></td>
 <td>Private method to get the active extensions from Mercurial.</td>
 </tr><tr>
+<td><a href="#Hg.__hgGetFileForRevision">__hgGetFileForRevision</a></td>
+<td>Private method to get a file for a specific revision from the repository.</td>
+</tr><tr>
 <td><a href="#Hg.__hgURL">__hgURL</a></td>
 <td>Private method to format a url for Mercurial.</td>
 </tr><tr>
@@ -112,6 +115,9 @@
 <td><a href="#Hg.hgAnnotate">hgAnnotate</a></td>
 <td>Public method to show the output of the hg annotate command.</td>
 </tr><tr>
+<td><a href="#Hg.hgArchive">hgArchive</a></td>
+<td>Public method to create an unversioned archive from the repository.</td>
+</tr><tr>
 <td><a href="#Hg.hgBackout">hgBackout</a></td>
 <td>Public method used to backout an earlier changeset from the Mercurial repository.</td>
 </tr><tr>
@@ -211,6 +217,9 @@
 <td><a href="#Hg.hgRollback">hgRollback</a></td>
 <td>Public method used to rollback the last transaction.</td>
 </tr><tr>
+<td><a href="#Hg.hgSbsDiff">hgSbsDiff</a></td>
+<td>Public method used to view the difference of a file to the Mercurial repository side-by-side.</td>
+</tr><tr>
 <td><a href="#Hg.hgServe">hgServe</a></td>
 <td>Public method used to serve the project.</td>
 </tr><tr>
@@ -223,6 +232,9 @@
 <td><a href="#Hg.hgShowPaths">hgShowPaths</a></td>
 <td>Public method to show the path aliases for remote repositories.</td>
 </tr><tr>
+<td><a href="#Hg.hgSummary">hgSummary</a></td>
+<td>Public method used to show some summary information of the working directory state.</td>
+</tr><tr>
 <td><a href="#Hg.hgUnbundle">hgUnbundle</a></td>
 <td>Public method to apply changegroup files.</td>
 </tr><tr>
@@ -351,7 +363,25 @@
 <b>__getExtensionsInfo</b>(<i></i>)
 <p>
         Private method to get the active extensions from Mercurial.
-</p><a NAME="Hg.__hgURL" ID="Hg.__hgURL"></a>
+</p><a NAME="Hg.__hgGetFileForRevision" ID="Hg.__hgGetFileForRevision"></a>
+<h4>Hg.__hgGetFileForRevision</h4>
+<b>__hgGetFileForRevision</b>(<i>name, rev=""</i>)
+<p>
+        Private method to get a file for a specific revision from the repository.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+file name to get from the repository (string)
+</dd><dt><i>rev=</i></dt>
+<dd>
+revision to retrieve (string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+contents of the file (string) and an error message (string)
+</dd>
+</dl><a NAME="Hg.__hgURL" ID="Hg.__hgURL"></a>
 <h4>Hg.__hgURL</h4>
 <b>__hgURL</b>(<i>url</i>)
 <p>
@@ -486,7 +516,12 @@
 <dd>
 file name to show the annotations for (string)
 </dd>
-</dl><a NAME="Hg.hgBackout" ID="Hg.hgBackout"></a>
+</dl><a NAME="Hg.hgArchive" ID="Hg.hgArchive"></a>
+<h4>Hg.hgArchive</h4>
+<b>hgArchive</b>(<i></i>)
+<p>
+        Public method to create an unversioned archive from the repository.
+</p><a NAME="Hg.hgBackout" ID="Hg.hgBackout"></a>
 <h4>Hg.hgBackout</h4>
 <b>hgBackout</b>(<i>name</i>)
 <p>
@@ -759,7 +794,7 @@
 </dd>
 </dl><a NAME="Hg.hgLogBrowser" ID="Hg.hgLogBrowser"></a>
 <h4>Hg.hgLogBrowser</h4>
-<b>hgLogBrowser</b>(<i>path</i>)
+<b>hgLogBrowser</b>(<i>path, isFile=False</i>)
 <p>
         Public method used to browse the log of a file/directory from the
         Mercurial repository.
@@ -767,6 +802,9 @@
 <dt><i>path</i></dt>
 <dd>
 file/directory name to show the log of (string)
+</dd><dt><i>isFile=</i></dt>
+<dd>
+flag indicating log for a file is to be shown (boolean)
 </dd>
 </dl><a NAME="Hg.hgNormalizeURL" ID="Hg.hgNormalizeURL"></a>
 <h4>Hg.hgNormalizeURL</h4>
@@ -907,6 +945,23 @@
 <dd>
 directory name (string or list of strings)
 </dd>
+</dl><a NAME="Hg.hgSbsDiff" ID="Hg.hgSbsDiff"></a>
+<h4>Hg.hgSbsDiff</h4>
+<b>hgSbsDiff</b>(<i>name, extended=False, revisions=None</i>)
+<p>
+        Public method used to view the difference of a file to the Mercurial repository
+        side-by-side.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+file name to be diffed (string)
+</dd><dt><i>extended=</i></dt>
+<dd>
+flag indicating the extended variant (boolean)
+</dd><dt><i>revisions=</i></dt>
+<dd>
+tuple of two revisions (tuple of strings)
+</dd>
 </dl><a NAME="Hg.hgServe" ID="Hg.hgServe"></a>
 <h4>Hg.hgServe</h4>
 <b>hgServe</b>(<i>name</i>)
@@ -947,6 +1002,17 @@
 <dd>
 file/directory name (string)
 </dd>
+</dl><a NAME="Hg.hgSummary" ID="Hg.hgSummary"></a>
+<h4>Hg.hgSummary</h4>
+<b>hgSummary</b>(<i>mq=False</i>)
+<p>
+        Public method used to show some summary information of the
+        working directory state.
+</p><dl>
+<dt><i>mq</i></dt>
+<dd>
+flag indicating to show the queue status as well (boolean)
+</dd>
 </dl><a NAME="Hg.hgUnbundle" ID="Hg.hgUnbundle"></a>
 <h4>Hg.hgUnbundle</h4>
 <b>hgUnbundle</b>(<i>name</i>)
@@ -1097,7 +1163,7 @@
 </dd>
 </dl><a NAME="Hg.vcsCommit" ID="Hg.vcsCommit"></a>
 <h4>Hg.vcsCommit</h4>
-<b>vcsCommit</b>(<i>name, message, noDialog=False, closeBranch=False</i>)
+<b>vcsCommit</b>(<i>name, message, noDialog=False, closeBranch=False, mq=False</i>)
 <p>
         Public method used to make the change of a file/directory permanent in the
         Mercurial repository.
@@ -1114,6 +1180,9 @@
 </dd><dt><i>closeBranch=</i></dt>
 <dd>
 flag indicating a close branch commit (boolean)
+</dd><dt><i>mq=</i></dt>
+<dd>
+flag indicating a queue commit (boolean)
 </dd>
 </dl><a NAME="Hg.vcsConvertProject" ID="Hg.vcsConvertProject"></a>
 <h4>Hg.vcsConvertProject</h4>
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.ProjectBrowserHelper.html	Mon Aug 12 22:21:53 2013 +0200
@@ -102,6 +102,12 @@
 <td><a href="#SvnProjectBrowserHelper.__SVNResolve">__SVNResolve</a></td>
 <td>Private slot called by the context menu to resolve conflicts of a file.</td>
 </tr><tr>
+<td><a href="#SvnProjectBrowserHelper.__SVNSbsDiff">__SVNSbsDiff</a></td>
+<td>Private slot called by the context menu to show the difference of a file to the repository side-by-side.</td>
+</tr><tr>
+<td><a href="#SvnProjectBrowserHelper.__SVNSbsExtendedDiff">__SVNSbsExtendedDiff</a></td>
+<td>Private slot called by the context menu to show the difference of a file to the repository side-by-side allowing the selection of revisions to compare.</td>
+</tr><tr>
 <td><a href="#SvnProjectBrowserHelper.__SVNSetProp">__SVNSetProp</a></td>
 <td>Private slot called by the context menu to set a subversion property of a file.</td>
 </tr><tr>
@@ -250,6 +256,18 @@
 <b>__SVNResolve</b>(<i></i>)
 <p>
         Private slot called by the context menu to resolve conflicts of a file.
+</p><a NAME="SvnProjectBrowserHelper.__SVNSbsDiff" ID="SvnProjectBrowserHelper.__SVNSbsDiff"></a>
+<h4>SvnProjectBrowserHelper.__SVNSbsDiff</h4>
+<b>__SVNSbsDiff</b>(<i></i>)
+<p>
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side.
+</p><a NAME="SvnProjectBrowserHelper.__SVNSbsExtendedDiff" ID="SvnProjectBrowserHelper.__SVNSbsExtendedDiff"></a>
+<h4>SvnProjectBrowserHelper.__SVNSbsExtendedDiff</h4>
+<b>__SVNSbsExtendedDiff</b>(<i></i>)
+<p>
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side allowing the selection of revisions to compare.
 </p><a NAME="SvnProjectBrowserHelper.__SVNSetProp" ID="SvnProjectBrowserHelper.__SVNSetProp"></a>
 <h4>SvnProjectBrowserHelper.__SVNSetProp</h4>
 <b>__SVNSetProp</b>(<i></i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogBrowserDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -139,13 +139,16 @@
 </table>
 <a NAME="SvnLogBrowserDialog.__init__" ID="SvnLogBrowserDialog.__init__"></a>
 <h4>SvnLogBrowserDialog (Constructor)</h4>
-<b>SvnLogBrowserDialog</b>(<i>vcs, parent=None</i>)
+<b>SvnLogBrowserDialog</b>(<i>vcs, isFile=False, parent=None</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>vcs</i></dt>
 <dd>
 reference to the vcs object
+</dd><dt><i>isFile</i></dt>
+<dd>
+flag indicating log for a file is to be shown (boolean)
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.SvnLogDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -85,13 +85,16 @@
 </table>
 <a NAME="SvnLogDialog.__init__" ID="SvnLogDialog.__init__"></a>
 <h4>SvnLogDialog (Constructor)</h4>
-<b>SvnLogDialog</b>(<i>vcs, parent=None</i>)
+<b>SvnLogDialog</b>(<i>vcs, isFile=False, parent=None</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>vcs</i></dt>
 <dd>
 reference to the vcs object
+</dd><dt><i>isFile</i></dt>
+<dd>
+flag indicating log for a file is to be shown (boolean)
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.SvnStatusDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -134,6 +134,9 @@
 <td><a href="#SvnStatusDialog.__revert">__revert</a></td>
 <td>Private slot to handle the Revert context menu entry.</td>
 </tr><tr>
+<td><a href="#SvnStatusDialog.__sbsDiff">__sbsDiff</a></td>
+<td>Private slot to handle the Side-by-Side Diff context menu entry.</td>
+</tr><tr>
 <td><a href="#SvnStatusDialog.__showContextMenu">__showContextMenu</a></td>
 <td>Protected slot to show the context menu of the status list.</td>
 </tr><tr>
@@ -173,6 +176,9 @@
 <td><a href="#SvnStatusDialog.on_revertButton_clicked">on_revertButton_clicked</a></td>
 <td>Private slot to handle the press of the Revert button.</td>
 </tr><tr>
+<td><a href="#SvnStatusDialog.on_sbsDiffButton_clicked">on_sbsDiffButton_clicked</a></td>
+<td>Private slot to handle the press of the Side-by-Side Diff button.</td>
+</tr><tr>
 <td><a href="#SvnStatusDialog.on_statusFilterCombo_activated">on_statusFilterCombo_activated</a></td>
 <td>Private slot to react to the selection of a status filter.</td>
 </tr><tr>
@@ -405,6 +411,11 @@
 <b>__revert</b>(<i></i>)
 <p>
         Private slot to handle the Revert context menu entry.
+</p><a NAME="SvnStatusDialog.__sbsDiff" ID="SvnStatusDialog.__sbsDiff"></a>
+<h4>SvnStatusDialog.__sbsDiff</h4>
+<b>__sbsDiff</b>(<i></i>)
+<p>
+        Private slot to handle the Side-by-Side Diff context menu entry.
 </p><a NAME="SvnStatusDialog.__showContextMenu" ID="SvnStatusDialog.__showContextMenu"></a>
 <h4>SvnStatusDialog.__showContextMenu</h4>
 <b>__showContextMenu</b>(<i>coord</i>)
@@ -485,6 +496,11 @@
 <b>on_revertButton_clicked</b>(<i></i>)
 <p>
         Private slot to handle the press of the Revert button.
+</p><a NAME="SvnStatusDialog.on_sbsDiffButton_clicked" ID="SvnStatusDialog.on_sbsDiffButton_clicked"></a>
+<h4>SvnStatusDialog.on_sbsDiffButton_clicked</h4>
+<b>on_sbsDiffButton_clicked</b>(<i></i>)
+<p>
+        Private slot to handle the press of the Side-by-Side Diff button.
 </p><a NAME="SvnStatusDialog.on_statusFilterCombo_activated" ID="SvnStatusDialog.on_statusFilterCombo_activated"></a>
 <h4>SvnStatusDialog.on_statusFilterCombo_activated</h4>
 <b>on_statusFilterCombo_activated</b>(<i>txt</i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsPySvn.subversion.html	Mon Aug 12 22:21:53 2013 +0200
@@ -66,6 +66,9 @@
 <td><a href="#Subversion.__init__">Subversion</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#Subversion.__svnGetFileForRevision">__svnGetFileForRevision</a></td>
+<td>Private method to get a file for a specific revision from the repository.</td>
+</tr><tr>
 <td><a href="#Subversion.__svnURL">__svnURL</a></td>
 <td>Private method to format a url for subversion.</td>
 </tr><tr>
@@ -147,6 +150,9 @@
 <td><a href="#Subversion.svnResolve">svnResolve</a></td>
 <td>Public method used to resolve conflicts of a file/directory.</td>
 </tr><tr>
+<td><a href="#Subversion.svnSbsDiff">svnSbsDiff</a></td>
+<td>Public method used to view the difference of a file to the Mercurial repository side-by-side.</td>
+</tr><tr>
 <td><a href="#Subversion.svnSetProp">svnSetProp</a></td>
 <td>Public method used to add a property to a file/directory.</td>
 </tr><tr>
@@ -276,6 +282,24 @@
 <dd>
 name of this object (string)
 </dd>
+</dl><a NAME="Subversion.__svnGetFileForRevision" ID="Subversion.__svnGetFileForRevision"></a>
+<h4>Subversion.__svnGetFileForRevision</h4>
+<b>__svnGetFileForRevision</b>(<i>name, rev=""</i>)
+<p>
+        Private method to get a file for a specific revision from the repository.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+file name to get from the repository (string)
+</dd><dt><i>rev=</i></dt>
+<dd>
+revision to retrieve (integer or string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+contents of the file (string) and an error message (string)
+</dd>
 </dl><a NAME="Subversion.__svnURL" ID="Subversion.__svnURL"></a>
 <h4>Subversion.__svnURL</h4>
 <b>__svnURL</b>(<i>url</i>)
@@ -587,7 +611,7 @@
 </dd>
 </dl><a NAME="Subversion.svnLogBrowser" ID="Subversion.svnLogBrowser"></a>
 <h4>Subversion.svnLogBrowser</h4>
-<b>svnLogBrowser</b>(<i>path</i>)
+<b>svnLogBrowser</b>(<i>path, isFile=False</i>)
 <p>
         Public method used to browse the log of a file/directory from the
         Subversion repository.
@@ -595,6 +619,9 @@
 <dt><i>path</i></dt>
 <dd>
 file/directory name to show the log of (string)
+</dd><dt><i>isFile</i></dt>
+<dd>
+flag indicating log for a file is to be shown (boolean)
 </dd>
 </dl><a NAME="Subversion.svnNormalizeURL" ID="Subversion.svnNormalizeURL"></a>
 <h4>Subversion.svnNormalizeURL</h4>
@@ -654,6 +681,23 @@
 <dd>
 file/directory name to be resolved (string)
 </dd>
+</dl><a NAME="Subversion.svnSbsDiff" ID="Subversion.svnSbsDiff"></a>
+<h4>Subversion.svnSbsDiff</h4>
+<b>svnSbsDiff</b>(<i>name, extended=False, revisions=None</i>)
+<p>
+        Public method used to view the difference of a file to the Mercurial repository
+        side-by-side.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+file name to be diffed (string)
+</dd><dt><i>extended=</i></dt>
+<dd>
+flag indicating the extended variant (boolean)
+</dd><dt><i>revisions=</i></dt>
+<dd>
+tuple of two revisions (tuple of strings)
+</dd>
 </dl><a NAME="Subversion.svnSetProp" ID="Subversion.svnSetProp"></a>
 <h4>Subversion.svnSetProp</h4>
 <b>svnSetProp</b>(<i>name, recursive=False</i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.ProjectBrowserHelper.html	Mon Aug 12 22:21:53 2013 +0200
@@ -99,6 +99,12 @@
 <td><a href="#SvnProjectBrowserHelper.__SVNResolve">__SVNResolve</a></td>
 <td>Private slot called by the context menu to resolve conflicts of a file.</td>
 </tr><tr>
+<td><a href="#SvnProjectBrowserHelper.__SVNSbsDiff">__SVNSbsDiff</a></td>
+<td>Private slot called by the context menu to show the difference of a file to the repository side-by-side.</td>
+</tr><tr>
+<td><a href="#SvnProjectBrowserHelper.__SVNSbsExtendedDiff">__SVNSbsExtendedDiff</a></td>
+<td>Private slot called by the context menu to show the difference of a file to the repository side-by-side allowing the selection of revisions to compare.</td>
+</tr><tr>
 <td><a href="#SvnProjectBrowserHelper.__SVNSetProp">__SVNSetProp</a></td>
 <td>Private slot called by the context menu to set a subversion property of a file.</td>
 </tr><tr>
@@ -241,6 +247,18 @@
 <b>__SVNResolve</b>(<i></i>)
 <p>
         Private slot called by the context menu to resolve conflicts of a file.
+</p><a NAME="SvnProjectBrowserHelper.__SVNSbsDiff" ID="SvnProjectBrowserHelper.__SVNSbsDiff"></a>
+<h4>SvnProjectBrowserHelper.__SVNSbsDiff</h4>
+<b>__SVNSbsDiff</b>(<i></i>)
+<p>
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side.
+</p><a NAME="SvnProjectBrowserHelper.__SVNSbsExtendedDiff" ID="SvnProjectBrowserHelper.__SVNSbsExtendedDiff"></a>
+<h4>SvnProjectBrowserHelper.__SVNSbsExtendedDiff</h4>
+<b>__SVNSbsExtendedDiff</b>(<i></i>)
+<p>
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side allowing the selection of revisions to compare.
 </p><a NAME="SvnProjectBrowserHelper.__SVNSetProp" ID="SvnProjectBrowserHelper.__SVNSetProp"></a>
 <h4>SvnProjectBrowserHelper.__SVNSetProp</h4>
 <b>__SVNSetProp</b>(<i></i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogBrowserDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -160,13 +160,16 @@
 </table>
 <a NAME="SvnLogBrowserDialog.__init__" ID="SvnLogBrowserDialog.__init__"></a>
 <h4>SvnLogBrowserDialog (Constructor)</h4>
-<b>SvnLogBrowserDialog</b>(<i>vcs, parent=None</i>)
+<b>SvnLogBrowserDialog</b>(<i>vcs, isFile=False, parent=None</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>vcs</i></dt>
 <dd>
 reference to the vcs object
+</dd><dt><i>isFile</i></dt>
+<dd>
+flag indicating log for a file is to be shown (boolean)
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.SvnLogDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -100,13 +100,16 @@
 </table>
 <a NAME="SvnLogDialog.__init__" ID="SvnLogDialog.__init__"></a>
 <h4>SvnLogDialog (Constructor)</h4>
-<b>SvnLogDialog</b>(<i>vcs, parent=None</i>)
+<b>SvnLogDialog</b>(<i>vcs, isFile=False, parent=None</i>)
 <p>
         Constructor
 </p><dl>
 <dt><i>vcs</i></dt>
 <dd>
 reference to the vcs object
+</dd><dt><i>isFile</i></dt>
+<dd>
+flag indicating log for a file is to be shown (boolean)
 </dd><dt><i>parent</i></dt>
 <dd>
 parent widget (QWidget)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.SvnStatusDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -143,6 +143,9 @@
 <td><a href="#SvnStatusDialog.__revert">__revert</a></td>
 <td>Private slot to handle the Revert context menu entry.</td>
 </tr><tr>
+<td><a href="#SvnStatusDialog.__sbsDiff">__sbsDiff</a></td>
+<td>Private slot to handle the Side-by-Side Diff context menu entry.</td>
+</tr><tr>
 <td><a href="#SvnStatusDialog.__showContextMenu">__showContextMenu</a></td>
 <td>Protected slot to show the context menu of the status list.</td>
 </tr><tr>
@@ -191,6 +194,9 @@
 <td><a href="#SvnStatusDialog.on_revertButton_clicked">on_revertButton_clicked</a></td>
 <td>Private slot to handle the press of the Revert button.</td>
 </tr><tr>
+<td><a href="#SvnStatusDialog.on_sbsDiffButton_clicked">on_sbsDiffButton_clicked</a></td>
+<td>Private slot to handle the press of the Side-by-Side Diff button.</td>
+</tr><tr>
 <td><a href="#SvnStatusDialog.on_sendButton_clicked">on_sendButton_clicked</a></td>
 <td>Private slot to send the input to the subversion process.</td>
 </tr><tr>
@@ -452,6 +458,11 @@
 <b>__revert</b>(<i></i>)
 <p>
         Private slot to handle the Revert context menu entry.
+</p><a NAME="SvnStatusDialog.__sbsDiff" ID="SvnStatusDialog.__sbsDiff"></a>
+<h4>SvnStatusDialog.__sbsDiff</h4>
+<b>__sbsDiff</b>(<i></i>)
+<p>
+        Private slot to handle the Side-by-Side Diff context menu entry.
 </p><a NAME="SvnStatusDialog.__showContextMenu" ID="SvnStatusDialog.__showContextMenu"></a>
 <h4>SvnStatusDialog.__showContextMenu</h4>
 <b>__showContextMenu</b>(<i>coord</i>)
@@ -557,6 +568,11 @@
 <b>on_revertButton_clicked</b>(<i></i>)
 <p>
         Private slot to handle the press of the Revert button.
+</p><a NAME="SvnStatusDialog.on_sbsDiffButton_clicked" ID="SvnStatusDialog.on_sbsDiffButton_clicked"></a>
+<h4>SvnStatusDialog.on_sbsDiffButton_clicked</h4>
+<b>on_sbsDiffButton_clicked</b>(<i></i>)
+<p>
+        Private slot to handle the press of the Side-by-Side Diff button.
 </p><a NAME="SvnStatusDialog.on_sendButton_clicked" ID="SvnStatusDialog.on_sendButton_clicked"></a>
 <h4>SvnStatusDialog.on_sendButton_clicked</h4>
 <b>on_sendButton_clicked</b>(<i></i>)
--- a/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Plugins.VcsPlugins.vcsSubversion.subversion.html	Mon Aug 12 22:21:53 2013 +0200
@@ -66,6 +66,9 @@
 <td><a href="#Subversion.__init__">Subversion</a></td>
 <td>Constructor</td>
 </tr><tr>
+<td><a href="#Subversion.__svnGetFileForRevision">__svnGetFileForRevision</a></td>
+<td>Private method to get a file for a specific revision from the repository.</td>
+</tr><tr>
 <td><a href="#Subversion.__svnURL">__svnURL</a></td>
 <td>Private method to format a url for subversion.</td>
 </tr><tr>
@@ -141,6 +144,9 @@
 <td><a href="#Subversion.svnResolve">svnResolve</a></td>
 <td>Public method used to resolve conflicts of a file/directory.</td>
 </tr><tr>
+<td><a href="#Subversion.svnSbsDiff">svnSbsDiff</a></td>
+<td>Public method used to view the difference of a file to the Mercurial repository side-by-side.</td>
+</tr><tr>
 <td><a href="#Subversion.svnSetProp">svnSetProp</a></td>
 <td>Public method used to add a property to a file/directory.</td>
 </tr><tr>
@@ -270,6 +276,24 @@
 <dd>
 name of this object (string)
 </dd>
+</dl><a NAME="Subversion.__svnGetFileForRevision" ID="Subversion.__svnGetFileForRevision"></a>
+<h4>Subversion.__svnGetFileForRevision</h4>
+<b>__svnGetFileForRevision</b>(<i>name, rev=""</i>)
+<p>
+        Private method to get a file for a specific revision from the repository.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+file name to get from the repository (string)
+</dd><dt><i>rev=</i></dt>
+<dd>
+revision to retrieve (integer or string)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+contents of the file (string) and an error message (string)
+</dd>
 </dl><a NAME="Subversion.__svnURL" ID="Subversion.__svnURL"></a>
 <h4>Subversion.__svnURL</h4>
 <b>__svnURL</b>(<i>url</i>)
@@ -558,7 +582,7 @@
 </dd>
 </dl><a NAME="Subversion.svnLogBrowser" ID="Subversion.svnLogBrowser"></a>
 <h4>Subversion.svnLogBrowser</h4>
-<b>svnLogBrowser</b>(<i>path</i>)
+<b>svnLogBrowser</b>(<i>path, isFile=False</i>)
 <p>
         Public method used to browse the log of a file/directory from the
         Subversion repository.
@@ -566,6 +590,9 @@
 <dt><i>path</i></dt>
 <dd>
 file/directory name to show the log of (string)
+</dd><dt><i>isFile</i></dt>
+<dd>
+flag indicating log for a file is to be shown (boolean)
 </dd>
 </dl><a NAME="Subversion.svnNormalizeURL" ID="Subversion.svnNormalizeURL"></a>
 <h4>Subversion.svnNormalizeURL</h4>
@@ -625,6 +652,23 @@
 <dd>
 file/directory name to be resolved (string)
 </dd>
+</dl><a NAME="Subversion.svnSbsDiff" ID="Subversion.svnSbsDiff"></a>
+<h4>Subversion.svnSbsDiff</h4>
+<b>svnSbsDiff</b>(<i>name, extended=False, revisions=None</i>)
+<p>
+        Public method used to view the difference of a file to the Mercurial repository
+        side-by-side.
+</p><dl>
+<dt><i>name</i></dt>
+<dd>
+file name to be diffed (string)
+</dd><dt><i>extended=</i></dt>
+<dd>
+flag indicating the extended variant (boolean)
+</dd><dt><i>revisions=</i></dt>
+<dd>
+tuple of two revisions (tuple of strings)
+</dd>
 </dl><a NAME="Subversion.svnSetProp" ID="Subversion.svnSetProp"></a>
 <h4>Subversion.svnSetProp</h4>
 <b>svnSetProp</b>(<i>name, recursive=False</i>)
--- a/Documentation/Source/eric5.UI.BrowserModel.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.UI.BrowserModel.html	Mon Aug 12 22:21:53 2013 +0200
@@ -639,6 +639,9 @@
 <td><a href="#BrowserFileItem.isIdlFile">isIdlFile</a></td>
 <td>Public method to check, if this file is a CORBA IDL file.</td>
 </tr><tr>
+<td><a href="#BrowserFileItem.isJavaScriptFile">isJavaScriptFile</a></td>
+<td>Public method to check, if this file is a JavaScript file.</td>
+</tr><tr>
 <td><a href="#BrowserFileItem.isLinguistFile">isLinguistFile</a></td>
 <td>Public method to check, if this file is a Qt-Linguist file.</td>
 </tr><tr>
@@ -762,6 +765,16 @@
 <dd>
 flag indicating a CORBA IDL file (boolean)
 </dd>
+</dl><a NAME="BrowserFileItem.isJavaScriptFile" ID="BrowserFileItem.isJavaScriptFile"></a>
+<h4>BrowserFileItem.isJavaScriptFile</h4>
+<b>isJavaScriptFile</b>(<i></i>)
+<p>
+        Public method to check, if this file is a JavaScript file.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a JavaScript file (boolean)
+</dd>
 </dl><a NAME="BrowserFileItem.isLinguistFile" ID="BrowserFileItem.isLinguistFile"></a>
 <h4>BrowserFileItem.isLinguistFile</h4>
 <b>isLinguistFile</b>(<i></i>)
--- a/Documentation/Source/eric5.UI.CompareDialog.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.UI.CompareDialog.html	Mon Aug 12 22:21:53 2013 +0200
@@ -72,6 +72,9 @@
 <td><a href="#CompareDialog.__appendText">__appendText</a></td>
 <td>Private method to append text to the end of the contents pane.</td>
 </tr><tr>
+<td><a href="#CompareDialog.__compare">__compare</a></td>
+<td>Private method to compare two lists of text.</td>
+</tr><tr>
 <td><a href="#CompareDialog.__fileChanged">__fileChanged</a></td>
 <td>Private slot to enable/disable the Compare button.</td>
 </tr><tr>
@@ -84,6 +87,9 @@
 <td><a href="#CompareDialog.__selectFile">__selectFile</a></td>
 <td>Private slot to display a file selection dialog.</td>
 </tr><tr>
+<td><a href="#CompareDialog.compare">compare</a></td>
+<td>Public method to compare two lists of text.</td>
+</tr><tr>
 <td><a href="#CompareDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
 <td>Private slot called by a button of the button box clicked.</td>
 </tr><tr>
@@ -155,6 +161,19 @@
 <dd>
 flag indicating interline changes (boolean)
 </dd>
+</dl><a NAME="CompareDialog.__compare" ID="CompareDialog.__compare"></a>
+<h4>CompareDialog.__compare</h4>
+<b>__compare</b>(<i>lines1, lines2</i>)
+<p>
+        Private method to compare two lists of text.
+</p><dl>
+<dt><i>lines1</i></dt>
+<dd>
+text to compare against (list of strings)
+</dd><dt><i>lines2</i></dt>
+<dd>
+text to compare (list of strings)
+</dd>
 </dl><a NAME="CompareDialog.__fileChanged" ID="CompareDialog.__fileChanged"></a>
 <h4>CompareDialog.__fileChanged</h4>
 <b>__fileChanged</b>(<i></i>)
@@ -187,6 +206,25 @@
 field for the display of the selected filename
                 (QLineEdit)
 </dd>
+</dl><a NAME="CompareDialog.compare" ID="CompareDialog.compare"></a>
+<h4>CompareDialog.compare</h4>
+<b>compare</b>(<i>lines1, lines2, name1="", name2=""</i>)
+<p>
+        Public method to compare two lists of text.
+</p><dl>
+<dt><i>lines1</i></dt>
+<dd>
+text to compare against (string or list of strings)
+</dd><dt><i>lines2</i></dt>
+<dd>
+text to compare (string or list of strings)
+</dd><dt><i>name1=</i></dt>
+<dd>
+name to be shown for the first text (string)
+</dd><dt><i>name2=</i></dt>
+<dd>
+name to be shown for the second text (string)
+</dd>
 </dl><a NAME="CompareDialog.on_buttonBox_clicked" ID="CompareDialog.on_buttonBox_clicked"></a>
 <h4>CompareDialog.on_buttonBox_clicked</h4>
 <b>on_buttonBox_clicked</b>(<i>button</i>)
--- a/Documentation/Source/eric5.Utilities.ClassBrowsers.__init__.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/eric5.Utilities.ClassBrowsers.__init__.html	Mon Aug 12 22:21:53 2013 +0200
@@ -34,7 +34,7 @@
 </p>
 <h3>Global Attributes</h3>
 <table>
-<tr><td>IDL_SOURCE</td></tr><tr><td>PTL_SOURCE</td></tr><tr><td>PY_SOURCE</td></tr><tr><td>RB_SOURCE</td></tr><tr><td>SUPPORTED_TYPES</td></tr><tr><td>__extensions</td></tr>
+<tr><td>IDL_SOURCE</td></tr><tr><td>JS_SOURCE</td></tr><tr><td>PTL_SOURCE</td></tr><tr><td>PY_SOURCE</td></tr><tr><td>RB_SOURCE</td></tr><tr><td>SUPPORTED_TYPES</td></tr><tr><td>__extensions</td></tr>
 </table>
 <h3>Classes</h3>
 <table>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Utilities.ClassBrowsers.jsclbr.html	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,344 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric5.Utilities.ClassBrowsers.jsclbr</title>
+<meta charset="UTF-8">
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Utilities.ClassBrowsers.jsclbr</h1>
+<p>
+Parse a JavaScript file and retrieve variables and functions.
+</p><p>
+It uses the JavaScript parser contained in the jasy web framework.
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>SUPPORTED_TYPES</td></tr><tr><td>_modules</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#Attribute">Attribute</a></td>
+<td>Class to represent a class attribute.</td>
+</tr><tr>
+<td><a href="#Function">Function</a></td>
+<td>Class to represent a Python function.</td>
+</tr><tr>
+<td><a href="#VisibilityMixin">VisibilityMixin</a></td>
+<td>Mixin class implementing the notion of visibility.</td>
+</tr><tr>
+<td><a href="#Visitor">Visitor</a></td>
+<td>Class implementing a visitor going through the parsed tree.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#readmodule_ex">readmodule_ex</a></td>
+<td>Read a JavaScript file and return a dictionary of functions and variables.</td>
+</tr>
+</table>
+<hr /><hr />
+<a NAME="Attribute" ID="Attribute"></a>
+<h2>Attribute</h2>
+<p>
+    Class to represent a class attribute.
+</p>
+<h3>Derived from</h3>
+ClbrBaseClasses.Attribute, VisibilityMixin
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Attribute.__init__">Attribute</a></td>
+<td>Constructor</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="Attribute.__init__" ID="Attribute.__init__"></a>
+<h4>Attribute (Constructor)</h4>
+<b>Attribute</b>(<i>module, name, file, lineno</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>module</i></dt>
+<dd>
+name of the module containing this class
+</dd><dt><i>name</i></dt>
+<dd>
+name of this class
+</dd><dt><i>file</i></dt>
+<dd>
+filename containing this attribute
+</dd><dt><i>lineno</i></dt>
+<dd>
+linenumber of the class definition
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="Function" ID="Function"></a>
+<h2>Function</h2>
+<p>
+    Class to represent a Python function.
+</p>
+<h3>Derived from</h3>
+ClbrBaseClasses.Function, VisibilityMixin
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Function.__init__">Function</a></td>
+<td>Constructor</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="Function.__init__" ID="Function.__init__"></a>
+<h4>Function (Constructor)</h4>
+<b>Function</b>(<i>module, name, file, lineno, signature='', separator=', '</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>module</i></dt>
+<dd>
+name of the module containing this function
+</dd><dt><i>name</i></dt>
+<dd>
+name of this function
+</dd><dt><i>file</i></dt>
+<dd>
+filename containing this class
+</dd><dt><i>lineno</i></dt>
+<dd>
+linenumber of the class definition
+</dd><dt><i>signature</i></dt>
+<dd>
+parameterlist of the method
+</dd><dt><i>separator</i></dt>
+<dd>
+string separating the parameters
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="VisibilityMixin" ID="VisibilityMixin"></a>
+<h2>VisibilityMixin</h2>
+<p>
+    Mixin class implementing the notion of visibility.
+</p>
+<h3>Derived from</h3>
+ClbrBaseClasses.ClbrVisibilityMixinBase
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#VisibilityMixin.__init__">VisibilityMixin</a></td>
+<td>Method to initialize the visibility.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="VisibilityMixin.__init__" ID="VisibilityMixin.__init__"></a>
+<h4>VisibilityMixin (Constructor)</h4>
+<b>VisibilityMixin</b>(<i></i>)
+<p>
+        Method to initialize the visibility.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="Visitor" ID="Visitor"></a>
+<h2>Visitor</h2>
+<p>
+    Class implementing a visitor going through the parsed tree.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Visitor.__init__">Visitor</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#Visitor.__visit">__visit</a></td>
+<td>Private method implementing the visit logic delegating to interesting methods.</td>
+</tr><tr>
+<td><a href="#Visitor.parse">parse</a></td>
+<td>Public method to parse the source.</td>
+</tr><tr>
+<td><a href="#Visitor.visit_const">visit_const</a></td>
+<td>Public method to treat a constant node.</td>
+</tr><tr>
+<td><a href="#Visitor.visit_function">visit_function</a></td>
+<td>Public method to treat a function node.</td>
+</tr><tr>
+<td><a href="#Visitor.visit_noop">visit_noop</a></td>
+<td>Public method to ignore the given node.</td>
+</tr><tr>
+<td><a href="#Visitor.visit_property_init">visit_property_init</a></td>
+<td>Public method to treat a property_init node.</td>
+</tr><tr>
+<td><a href="#Visitor.visit_var">visit_var</a></td>
+<td>Public method to treat a variable node.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="Visitor.__init__" ID="Visitor.__init__"></a>
+<h4>Visitor (Constructor)</h4>
+<b>Visitor</b>(<i>src, module, filename</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>src</i></dt>
+<dd>
+source to be parsed (string)
+</dd><dt><i>module</i></dt>
+<dd>
+name of the module (string)
+</dd><dt><i>filename</i></dt>
+<dd>
+file name (string)
+</dd>
+</dl><a NAME="Visitor.__visit" ID="Visitor.__visit"></a>
+<h4>Visitor.__visit</h4>
+<b>__visit</b>(<i>root</i>)
+<p>
+        Private method implementing the visit logic delegating to interesting methods.
+</p><a NAME="Visitor.parse" ID="Visitor.parse"></a>
+<h4>Visitor.parse</h4>
+<b>parse</b>(<i></i>)
+<p>
+        Public method to parse the source.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+dictionary containing the parsed information
+</dd>
+</dl><a NAME="Visitor.visit_const" ID="Visitor.visit_const"></a>
+<h4>Visitor.visit_const</h4>
+<b>visit_const</b>(<i>node</i>)
+<p>
+        Public method to treat a constant node.
+</p><dl>
+<dt><i>node</i></dt>
+<dd>
+reference to the node (jasy.js.parse.Node.Node)
+</dd>
+</dl><a NAME="Visitor.visit_function" ID="Visitor.visit_function"></a>
+<h4>Visitor.visit_function</h4>
+<b>visit_function</b>(<i>node</i>)
+<p>
+        Public method to treat a function node.
+</p><dl>
+<dt><i>node</i></dt>
+<dd>
+reference to the node (jasy.js.parse.Node.Node)
+</dd>
+</dl><a NAME="Visitor.visit_noop" ID="Visitor.visit_noop"></a>
+<h4>Visitor.visit_noop</h4>
+<b>visit_noop</b>(<i>node</i>)
+<p>
+        Public method to ignore the given node.
+</p><dl>
+<dt><i>node</i></dt>
+<dd>
+reference to the node (jasy.js.parse.Node.Node)
+</dd>
+</dl><a NAME="Visitor.visit_property_init" ID="Visitor.visit_property_init"></a>
+<h4>Visitor.visit_property_init</h4>
+<b>visit_property_init</b>(<i>node</i>)
+<p>
+        Public method to treat a property_init node.
+</p><dl>
+<dt><i>node</i></dt>
+<dd>
+reference to the node (jasy.js.parse.Node.Node)
+</dd>
+</dl><a NAME="Visitor.visit_var" ID="Visitor.visit_var"></a>
+<h4>Visitor.visit_var</h4>
+<b>visit_var</b>(<i>node</i>)
+<p>
+        Public method to treat a variable node.
+</p><dl>
+<dt><i>node</i></dt>
+<dd>
+reference to the node (jasy.js.parse.Node.Node)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="readmodule_ex" ID="readmodule_ex"></a>
+<h2>readmodule_ex</h2>
+<b>readmodule_ex</b>(<i>module, path=[]</i>)
+<p>
+    Read a JavaScript file and return a dictionary of functions and variables.
+</p><dl>
+<dt><i>module</i></dt>
+<dd>
+name of the JavaScript file (string)
+</dd><dt><i>path</i></dt>
+<dd>
+path the file should be searched in (list of strings)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+the resulting dictionary
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/index-eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.html	Mon Aug 12 22:21:53 2013 +0200
@@ -30,6 +30,9 @@
 <tr>
 <td><a href="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialPage.html">MercurialPage</a></td>
 <td>Module implementing the Mercurial configuration page.</td>
+</tr><tr>
+<td><a href="eric5.Plugins.VcsPlugins.vcsMercurial.ConfigurationPage.MercurialUserDataDialog.html">MercurialUserDataDialog</a></td>
+<td>Module implementing a dialog to enter the user data for a minimal hgrc file.</td>
 </tr>
 </table>
 </body></html>
\ No newline at end of file
--- a/Documentation/Source/index-eric5.Plugins.VcsPlugins.vcsMercurial.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/index-eric5.Plugins.VcsPlugins.vcsMercurial.html	Mon Aug 12 22:21:53 2013 +0200
@@ -68,6 +68,9 @@
 <td><a href="eric5.Plugins.VcsPlugins.vcsMercurial.HgAnnotateDialog.html">HgAnnotateDialog</a></td>
 <td>Module implementing a dialog to show the output of the hg annotate command.</td>
 </tr><tr>
+<td><a href="eric5.Plugins.VcsPlugins.vcsMercurial.HgArchiveDialog.html">HgArchiveDialog</a></td>
+<td>Module implementing a dialog to enter the archive data.</td>
+</tr><tr>
 <td><a href="eric5.Plugins.VcsPlugins.vcsMercurial.HgBackoutDialog.html">HgBackoutDialog</a></td>
 <td>Module implementing a dialog to enter the data for a backout operation.</td>
 </tr><tr>
@@ -149,6 +152,9 @@
 <td><a href="eric5.Plugins.VcsPlugins.vcsMercurial.HgStatusMonitorThread.html">HgStatusMonitorThread</a></td>
 <td>Module implementing the VCS status monitor thread class for Mercurial.</td>
 </tr><tr>
+<td><a href="eric5.Plugins.VcsPlugins.vcsMercurial.HgSummaryDialog.html">HgSummaryDialog</a></td>
+<td>Module implementing a dialog to show some summary information of the working directory state.</td>
+</tr><tr>
 <td><a href="eric5.Plugins.VcsPlugins.vcsMercurial.HgTagBranchListDialog.html">HgTagBranchListDialog</a></td>
 <td>Module implementing a dialog to show a list of tags or branches.</td>
 </tr><tr>
--- a/Documentation/Source/index-eric5.Utilities.ClassBrowsers.html	Mon Aug 12 19:41:53 2013 +0200
+++ b/Documentation/Source/index-eric5.Utilities.ClassBrowsers.html	Mon Aug 12 22:21:53 2013 +0200
@@ -46,6 +46,9 @@
 <td><a href="eric5.Utilities.ClassBrowsers.idlclbr.html">idlclbr</a></td>
 <td>Parse a CORBA IDL file and retrieve modules, interfaces, methods and attributes.</td>
 </tr><tr>
+<td><a href="eric5.Utilities.ClassBrowsers.jsclbr.html">jsclbr</a></td>
+<td>Parse a JavaScript file and retrieve variables and functions.</td>
+</tr><tr>
 <td><a href="eric5.Utilities.ClassBrowsers.pyclbr.html">pyclbr</a></td>
 <td>Parse a Python file and retrieve classes, functions/methods and attributes.</td>
 </tr><tr>
--- a/E5Gui/E5Completers.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/E5Gui/E5Completers.py	Mon Aug 12 22:21:53 2013 +0200
@@ -10,7 +10,7 @@
 from __future__ import unicode_literals    # __IGNORE_WARNING__
 
 from PyQt4.QtCore import QDir, Qt
-from PyQt4.QtGui import QCompleter, QDirModel, QStringListModel
+from PyQt4.QtGui import QCompleter, QFileSystemModel, QStringListModel
 
 from Globals import isWindowsPlatform
 
@@ -31,7 +31,7 @@
         @keyparam showHidden flag indicating to show hidden entries as well (boolean)
         """
         super(E5FileCompleter, self).__init__(parent)
-        self.__model = QDirModel(self)
+        self.__model = QFileSystemModel(self)
         if showHidden:
             self.__model.setFilter(
                 QDir.Filters(QDir.Dirs | QDir.Files | QDir.Drives | \
@@ -63,7 +63,7 @@
         @keyparam showHidden flag indicating to show hidden entries as well (boolean)
         """
         super(E5DirCompleter, self).__init__(parent)
-        self.__model = QDirModel(self)
+        self.__model = QFileSystemModel(self)
         if showHidden:
             self.__model.setFilter(
                 QDir.Filters(QDir.Drives | QDir.AllDirs | QDir.Hidden))
--- a/E5Gui/E5SideBar.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/E5Gui/E5SideBar.py	Mon Aug 12 22:21:53 2013 +0200
@@ -54,9 +54,9 @@
         self.__autoHideButton.setToolTip(
             self.trUtf8("Deselect to activate automatic collapsing"))
         self.barLayout = QBoxLayout(QBoxLayout.LeftToRight)
-        self.barLayout.setMargin(0)
+        self.barLayout.setContentsMargins(0, 0, 0, 0)
         self.layout = QBoxLayout(QBoxLayout.TopToBottom)
-        self.layout.setMargin(0)
+        self.layout.setContentsMargins(0, 0, 0, 0)
         self.layout.setSpacing(0)
         self.barLayout.addWidget(self.__autoHideButton)
         self.barLayout.addWidget(self.__tabBar)
--- a/Helpviewer/Download/DownloadAskActionDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Helpviewer/Download/DownloadAskActionDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>500</width>
-    <height>202</height>
+    <height>273</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -150,6 +150,19 @@
     </layout>
    </item>
    <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>19</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
--- a/Helpviewer/HelpTabBar.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Helpviewer/HelpTabBar.py	Mon Aug 12 22:21:53 2013 +0200
@@ -65,7 +65,7 @@
         
         self.__previewPopup.setView(l)
         self.__previewPopup.layout().setAlignment(Qt.AlignTop)
-        self.__previewPopup.layout().setMargin(0)
+        self.__previewPopup.layout().setContentsMargins(0, 0, 0, 0)
         
         tr = self.tabRect(self.__currentTabPreviewIndex)
         pos = QPoint(tr.x(), tr.y() + tr.height())
--- a/Helpviewer/HelpTabWidget.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Helpviewer/HelpTabWidget.py	Mon Aug 12 22:21:53 2013 +0200
@@ -82,7 +82,7 @@
         
         self.__rightCornerWidget = QWidget(self)
         self.__rightCornerWidgetLayout = QHBoxLayout(self.__rightCornerWidget)
-        self.__rightCornerWidgetLayout.setMargin(0)
+        self.__rightCornerWidgetLayout.setContentsMargins(0, 0, 0, 0)
         self.__rightCornerWidgetLayout.setSpacing(0)
         
         self.__navigationMenu = QMenu(self)
--- a/Helpviewer/HelpWindow.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Helpviewer/HelpWindow.py	Mon Aug 12 22:21:53 2013 +0200
@@ -136,6 +136,7 @@
                 self.__helpEngine = \
                     QHelpEngine(os.path.join(Utilities.getConfigDir(),
                                              "browser", "eric5help.qhc"), self)
+                self.__removeOldDocumentation()
                 self.__helpEngine.warning.connect(self.__warning)
             else:
                 self.__helpEngine = None
@@ -459,7 +460,7 @@
         self.__actions.append(self.saveAsAct)
         
         self.savePageScreenAct = E5Action(self.trUtf8('Save Page Screen'),
-            UI.PixmapCache.getIcon("filePixmap.png"),
+            UI.PixmapCache.getIcon("fileSavePixmap.png"),
             self.trUtf8('Save Page Screen...'),
             0, 0, self, 'help_file_save_page_screen')
         self.savePageScreenAct.setStatusTip(
@@ -472,6 +473,21 @@
             self.savePageScreenAct.triggered[()].connect(self.__savePageScreen)
         self.__actions.append(self.savePageScreenAct)
         
+        self.saveVisiblePageScreenAct = E5Action(self.trUtf8('Save Visible Page Screen'),
+            UI.PixmapCache.getIcon("fileSaveVisiblePixmap.png"),
+            self.trUtf8('Save Visible Page Screen...'),
+            0, 0, self, 'help_file_save_visible_page_screen')
+        self.saveVisiblePageScreenAct.setStatusTip(
+            self.trUtf8('Save the visible part of the current page as a screen shot'))
+        self.saveVisiblePageScreenAct.setWhatsThis(self.trUtf8(
+                """<b>Save Visible Page Screen...</b>"""
+                """<p>Saves the visible part of the current page as a screen shot.</p>"""
+        ))
+        if not self.initShortcutsOnly:
+            self.saveVisiblePageScreenAct.triggered[()].connect(
+                self.__saveVisiblePageScreen)
+        self.__actions.append(self.saveVisiblePageScreenAct)
+        
         bookmarksManager = self.bookmarksManager()
         self.importBookmarksAct = E5Action(self.trUtf8('Import Bookmarks'),
             self.trUtf8('&Import Bookmarks...'),
@@ -1362,6 +1378,7 @@
         menu.addSeparator()
         menu.addAction(self.saveAsAct)
         menu.addAction(self.savePageScreenAct)
+        menu.addAction(self.saveVisiblePageScreenAct)
         menu.addSeparator()
         menu.addAction(self.printPreviewAct)
         menu.addAction(self.printAct)
@@ -1523,6 +1540,13 @@
         filetb.addAction(self.closeAct)
         filetb.addAction(self.exitAct)
         
+        self.savePageScreenMenu = QMenu(self)
+        self.savePageScreenMenu.addAction(self.savePageScreenAct)
+        self.savePageScreenMenu.addAction(self.saveVisiblePageScreenAct)
+        savePageScreenButton = filetb.widgetForAction(self.savePageScreenAct)
+        savePageScreenButton.setMenu(self.savePageScreenMenu)
+        savePageScreenButton.setPopupMode(QToolButton.MenuButtonPopup)
+        
         edittb = self.addToolBar(self.trUtf8("Edit"))
         edittb.setObjectName("EditToolBar")
         edittb.setIconSize(UI.Config.ToolBarIconSize)
@@ -1841,14 +1865,24 @@
         if browser is not None:
             browser.saveAs()
         
-    def __savePageScreen(self):
+    def __savePageScreen(self, visibleOnly=False):
         """
         Private slot to save the current page as a screen shot.
+        
+        @param visibleOnly flag indicating to just save the visible part
+            of the page (boolean)
         """
         from .PageScreenDialog import PageScreenDialog
-        self.__pageScreen = PageScreenDialog(self.currentBrowser())
+        self.__pageScreen = PageScreenDialog(
+            self.currentBrowser(), visibleOnly=visibleOnly)
         self.__pageScreen.show()
         
+    def __saveVisiblePageScreen(self):
+        """
+        Private slot to save the visible part of the current page as a screen shot.
+        """
+        self.__savePageScreen(visibleOnly=True)
+        
     def __about(self):
         """
         Private slot to show the about information.
@@ -2051,7 +2085,8 @@
             Preferences.setGeometry("HelpViewerGeometry", QByteArray())
         
         try:
-            del self.__class__.helpwindows[self.__class__.helpwindows.index(self)]
+            if self.fromEric or len(self.__class__.helpwindows) > 1:
+                del self.__class__.helpwindows[self.__class__.helpwindows.index(self)]
         except ValueError:
             pass
         
@@ -2554,7 +2589,7 @@
             if self.__indexingProgress is None:
                 self.__indexingProgress = QWidget()
                 layout = QHBoxLayout(self.__indexingProgress)
-                layout.setMargin(0)
+                layout.setContentsMargins(0, 0, 0, 0)
                 sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
                 
                 label = QLabel(self.trUtf8("Updating search index"))
@@ -2602,6 +2637,15 @@
                 self.__searchWord = word
                 self.__searchForWord()
         
+    def __removeOldDocumentation(self):
+        """
+        Private slot to remove non-existing documentation from the help engine.
+        """
+        for namespace in self.__helpEngine.registeredDocumentations():
+            docFile = self.__helpEngine.documentationFileName(namespace)
+            if not os.path.exists(docFile):
+                self.__helpEngine.unregisterDocumentation(namespace)
+        
     def __lookForNewDocumentation(self):
         """
         Private slot to look for new documentation to be loaded into the
--- a/Helpviewer/PageScreenDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Helpviewer/PageScreenDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -22,28 +22,34 @@
     """
     Class documentation goes here.
     """
-    def __init__(self, view, parent=None):
+    def __init__(self, view, visibleOnly=False, parent=None):
         """
         Constructor
         
         @param view reference to the web view containing the page to be saved
             (HelpBrowser)
+        @param visibleOnly flag indicating to just save the visible part
+            of the page (boolean)
         @param parent reference to the parent widget (QWidget)
         """
         super(PageScreenDialog, self).__init__(parent)
         self.setupUi(self)
         
         self.__view = view
-        self.__createPixmap()
+        self.__createPixmap(visibleOnly)
         self.pageScreenLabel.setPixmap(self.__pagePixmap)
     
-    def __createPixmap(self):
+    def __createPixmap(self, visibleOnly):
         """
         Private slot to create a pixmap of the associated view's page.
+        
+        @param visibleOnly flag indicating to just save the visible part
+            of the page (boolean)
         """
         page = self.__view.page()
         origSize = page.viewportSize()
-        page.setViewportSize(page.mainFrame().contentsSize())
+        if not visibleOnly:
+            page.setViewportSize(page.mainFrame().contentsSize())
         
         image = QImage(page.viewportSize(), QImage.Format_ARGB32)
         painter = QPainter(image)
--- a/Helpviewer/Sync/DirectorySyncHandler.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Helpviewer/Sync/DirectorySyncHandler.py	Mon Aug 12 22:21:53 2013 +0200
@@ -92,7 +92,7 @@
         except IOError as err:
             self.syncStatus.emit(type_,
                 self.trUtf8("Cannot read remote file.\n{0}").format(str(err)))
-            self.syncFinished(type_, False, True)
+            self.syncFinished.emit(type_, False, True)
             return
         
         QCoreApplication.processEvents()
@@ -113,7 +113,7 @@
         data = self.readFile(fileName, type_)
         if data.isEmpty():
             self.syncStatus.emit(type_, self._messages[type_]["LocalMissing"])
-            self.syncFinished(type_, False, False)
+            self.syncFinished.emit(type_, False, False)
             return
         else:
             try:
@@ -124,7 +124,7 @@
             except IOError as err:
                 self.syncStatus.emit(type_,
                     self.trUtf8("Cannot write remote file.\n{0}").format(str(err)))
-                self.syncFinished(type_, False, False)
+                self.syncFinished.emit(type_, False, False)
                 return
             
         self.syncFinished.emit(type_, True, False)
--- a/IconEditor/IconEditorWindow.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/IconEditor/IconEditorWindow.py	Mon Aug 12 22:21:53 2013 +0200
@@ -9,10 +9,12 @@
 
 from __future__ import unicode_literals    # __IGNORE_WARNING__
 
+import os
+
 from PyQt4.QtCore import pyqtSignal, Qt, QSize, QSignalMapper, QFileInfo, QFile, \
     QEvent
 from PyQt4.QtGui import QScrollArea, QPalette, QImage, QImageReader, QImageWriter, \
-    QKeySequence, qApp, QLabel, QDockWidget, QWhatsThis
+    QKeySequence, QLabel, QDockWidget, QWhatsThis
 
 from E5Gui.E5Action import E5Action, createActionGroup
 from E5Gui import E5FileDialog, E5MessageBox
@@ -38,7 +40,7 @@
     windows = []
     
     def __init__(self, fileName="", parent=None, fromEric=False,
-                 initShortcutsOnly=False):
+                 initShortcutsOnly=False, project=None):
         """
         Constructor
         
@@ -48,6 +50,7 @@
             eric5 (boolean)
         @keyparam initShortcutsOnly flag indicating to just initialize the keyboard
             shortcuts (boolean)
+        @keyparam project reference to the project object (Project)
         """
         super(IconEditorWindow, self).__init__(parent)
         self.setObjectName("eric5_icon_editor")
@@ -106,6 +109,10 @@
             
             self.__checkActions()
             
+            self.__project = project
+            self.__lastOpenPath = ""
+            self.__lastSavePath = ""
+            
             self.grabGesture(Qt.PinchGesture)
     
     def __initFileFilters(self):
@@ -275,10 +282,8 @@
                 """<b>Quit</b>"""
                 """<p>Quit the icon editor.</p>"""
         ))
-        if self.fromEric:
-            self.exitAct.triggered[()].connect(self.close)
-        else:
-            self.exitAct.triggered[()].connect(qApp.closeAllWindows)
+        if not self.fromEric:
+            self.exitAct.triggered[()].connect(self.__closeAll)
         self.__actions.append(self.exitAct)
     
     def __initEditActions(self):
@@ -754,8 +759,9 @@
         menu.addSeparator()
         menu.addAction(self.closeAct)
         menu.addAction(self.closeAllAct)
-        menu.addSeparator()
-        menu.addAction(self.exitAct)
+        if not self.fromEric:
+            menu.addSeparator()
+            menu.addAction(self.exitAct)
         
         menu = mb.addMenu(self.trUtf8("&Edit"))
         menu.setTearOffEnabled(True)
@@ -821,7 +827,8 @@
         filetb.addAction(self.saveAsAct)
         filetb.addSeparator()
         filetb.addAction(self.closeAct)
-        filetb.addAction(self.exitAct)
+        if not self.fromEric:
+            filetb.addAction(self.exitAct)
         
         edittb = self.addToolBar(self.trUtf8("Edit"))
         edittb.setObjectName("EditToolBar")
@@ -932,7 +939,8 @@
             Preferences.setGeometry("IconEditorGeometry", self.saveGeometry())
             
             try:
-                del self.__class__.windows[self.__class__.windows.index(self)]
+                if self.fromEric or len(self.__class__.windows) > 1:
+                    del self.__class__.windows[self.__class__.windows.index(self)]
             except ValueError:
                 pass
             
@@ -958,7 +966,9 @@
         """
         Public slot called to open a new icon editor window.
         """
-        ie = IconEditorWindow(parent=self.parent(), fromEric=self.fromEric)
+        ie = IconEditorWindow(parent=self.parent(), fromEric=self.fromEric,
+                              project=self.__project)
+        ie.setRecentPaths(self.__lastOpenPath, self.__lastSavePath)
         ie.show()
     
     def __openIcon(self):
@@ -966,14 +976,19 @@
         Private slot to open an icon file.
         """
         if self.__maybeSave():
+            if not self.__lastOpenPath:
+                if self.__project and self.__project.isOpen():
+                    self.__lastOpenPath = self.__project.getProjectPath()
+            
             fileName = E5FileDialog.getOpenFileNameAndFilter(
                 self,
                 self.trUtf8("Open icon file"),
-                "",
+                self.__lastOpenPath,
                 self.__inputFilter,
                 self.__defaultFilter)[0]
             if fileName:
                 self.__loadIconFile(fileName)
+                self.__lastOpenPath = os.path.dirname(fileName)
         self.__checkActions()
     
     def __saveIcon(self):
@@ -989,10 +1004,16 @@
         """
         Private slot to save the icon with a new name.
         """
+        if not self.__lastSavePath:
+            if self.__project and self.__project.isOpen():
+                self.__lastSavePath = self.__project.getProjectPath()
+        if not self.__lastSavePath and self.__lastOpenPath:
+            self.__lastSavePath = self.__lastOpenPath
+        
         fileName, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
             self,
             self.trUtf8("Save icon file"),
-            "",
+            self.__lastSavePath,
             self.__outputFilter,
             self.__defaultFilter,
             E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
@@ -1013,6 +1034,8 @@
             if not res:
                 return False
         
+        self.__lastSavePath = os.path.dirname(fileName)
+        
         return self.__saveIconFile(fileName)
     
     def __closeAll(self):
@@ -1022,6 +1045,7 @@
         for win in self.__class__.windows[:]:
             if win != self:
                 win.close()
+        self.close()
     
     def __loadIconFile(self, fileName):
         """
@@ -1128,6 +1152,18 @@
                 return False
         return True
     
+    def setRecentPaths(self, openPath, savePath):
+        """
+        Public method to set the last open and save paths.
+        
+        @param openPath least recently used open path (string)
+        @param savePath least recently used save path (string)
+        """
+        if openPath:
+            self.__lastOpenPath = openPath
+        if savePath:
+            self.__lastSavePath = savePath
+    
     def __checkActions(self):
         """
         Private slot to check some actions for their enable/disable status.
--- a/PluginManager/PluginInstallDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/PluginManager/PluginInstallDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -530,7 +530,7 @@
         self.setSizeGripEnabled(True)
         
         self.__layout = QVBoxLayout(self)
-        self.__layout.setMargin(0)
+        self.__layout.setContentsMargins(0, 0, 0, 0)
         self.setLayout(self.__layout)
         
         self.cw = PluginInstallWidget(pluginManager, pluginFileNames, self)
--- a/PluginManager/PluginRepositoryDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/PluginManager/PluginRepositoryDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -542,7 +542,7 @@
         self.setSizeGripEnabled(True)
         
         self.__layout = QVBoxLayout(self)
-        self.__layout.setMargin(0)
+        self.__layout.setContentsMargins(0, 0, 0, 0)
         self.setLayout(self.__layout)
         
         self.cw = PluginRepositoryWidget(self)
--- a/PluginManager/PluginUninstallDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/PluginManager/PluginUninstallDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -187,7 +187,7 @@
         self.setSizeGripEnabled(True)
         
         self.__layout = QVBoxLayout(self)
-        self.__layout.setMargin(0)
+        self.__layout.setContentsMargins(0, 0, 0, 0)
         self.setLayout(self.__layout)
         
         self.cw = PluginUninstallWidget(pluginManager, self)
--- a/Plugins/CheckerPlugins/Pep8/Pep8Dialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/CheckerPlugins/Pep8/Pep8Dialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -341,6 +341,8 @@
                         checker.messages.sort(key=lambda a: a[1])
                         for message in checker.messages:
                             fname, lineno, position, text = message
+                            if lineno > len(source):
+                                lineno = len(source)
                             if "__IGNORE_WARNING__" not in Utilities.extractLineFlags(
                                     source[lineno - 1].strip()):
                                 self.noResults = False
--- a/Plugins/CheckerPlugins/Pep8/pep8.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/CheckerPlugins/Pep8/pep8.py	Mon Aug 12 22:21:53 2013 +0200
@@ -44,6 +44,7 @@
 500 line length
 600 deprecation
 700 statements
+900 processing errors
 
 You can add checks to this program by writing plugins. Each plugin is
 a simple function that is called for each line of source code, either
@@ -233,6 +234,8 @@
         "multiple statements on one line (colon)"),
     "E702": QT_TRANSLATE_NOOP("pep8",
         "multiple statements on one line (semicolon)"),
+    "E901": QT_TRANSLATE_NOOP("pep8",
+        "Token Error: {0}"),
 }
 
 pep8_messages_sample_args = {
@@ -1070,42 +1073,46 @@
         self.blank_lines_before_comment = 0
         self.tokens = []
         parens = 0
-        for token in tokenize.generate_tokens(self.readline_check_physical):
-            if options.verbose >= 3:
-                if token[2][0] == token[3][0]:
-                    pos = '[%s:%s]' % (token[2][1] or '', token[3][1])
-                else:
-                    pos = 'l.%s' % token[3][0]
-                print('l.%s\t%s\t%s\t%r' %
-                    (token[2][0], pos, tokenize.tok_name[token[0]], token[1]))
-            self.tokens.append(token)
-            token_type, text = token[0:2]
-            if token_type == tokenize.OP and text in '([{':
-                parens += 1
-            if token_type == tokenize.OP and text in '}])':
-                parens -= 1
-            if token_type == tokenize.NEWLINE and not parens:
-                self.check_logical()
-                self.blank_lines = 0
-                self.blank_lines_before_comment = 0
-                self.tokens = []
-            if token_type == tokenize.NL and not parens:
-                if len(self.tokens) <= 1:
-                    # The physical line contains only this token.
-                    self.blank_lines += 1
-                self.tokens = []
-            if token_type == tokenize.COMMENT:
-                source_line = token[4]
-                token_start = token[2][1]
-                if source_line[:token_start].strip() == '':
-                    self.blank_lines_before_comment = max(self.blank_lines,
-                        self.blank_lines_before_comment)
+        try:
+            for token in tokenize.generate_tokens(self.readline_check_physical):
+                if options.verbose >= 3:
+                    if token[2][0] == token[3][0]:
+                        pos = '[%s:%s]' % (token[2][1] or '', token[3][1])
+                    else:
+                        pos = 'l.%s' % token[3][0]
+                    print('l.%s\t%s\t%s\t%r' %
+                        (token[2][0], pos, tokenize.tok_name[token[0]], token[1]))
+                self.tokens.append(token)
+                token_type, text = token[0:2]
+                if token_type == tokenize.OP and text in '([{':
+                    parens += 1
+                if token_type == tokenize.OP and text in '}])':
+                    parens -= 1
+                if token_type == tokenize.NEWLINE and not parens:
+                    self.check_logical()
                     self.blank_lines = 0
-                if text.endswith('\n') and not parens:
-                    # The comment also ends a physical line.  This works around
-                    # Python < 2.6 behaviour, which does not generate NL after
-                    # a comment which is on a line by itself.
+                    self.blank_lines_before_comment = 0
+                    self.tokens = []
+                if token_type == tokenize.NL and not parens:
+                    if len(self.tokens) <= 1:
+                        # The physical line contains only this token.
+                        self.blank_lines += 1
                     self.tokens = []
+                if token_type == tokenize.COMMENT:
+                    source_line = token[4]
+                    token_start = token[2][1]
+                    if source_line[:token_start].strip() == '':
+                        self.blank_lines_before_comment = max(self.blank_lines,
+                            self.blank_lines_before_comment)
+                        self.blank_lines = 0
+                    if text.endswith('\n') and not parens:
+                        # The comment also ends a physical line.  This works around
+                        # Python < 2.6 behaviour, which does not generate NL after
+                        # a comment which is on a line by itself.
+                        self.tokens = []
+        except tokenize.TokenError as err:
+            msg, (lnum, pos) = err.args
+            self.report_error_args(lnum, pos, "E901", "TokenError", msg)
         return self.file_errors
 
     def report_error(self, line_number, offset, text, check):
--- a/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialPage.py	Mon Aug 12 22:21:53 2013 +0200
@@ -12,6 +12,7 @@
 import os
 
 from PyQt4.QtCore import pyqtSlot
+from PyQt4.QtGui import QDialog
 
 from Preferences.ConfigurationPages.ConfigurationPageBase import ConfigurationPageBase
 from .Ui_MercurialPage import Ui_MercurialPage
@@ -64,8 +65,20 @@
         from QScintilla.MiniEditor import MiniEditor
         cfgFile = self.__plugin.getConfigPath()
         if not os.path.exists(cfgFile):
+            username = ""
+            from .MercurialUserDataDialog import MercurialUserDataDialog
+            dlg = MercurialUserDataDialog()
+            if dlg.exec_() == QDialog.Accepted:
+                name, email = dlg.getData()
+                if name and email:
+                    username = "{0} <{1}>".format(name, email)
+                elif name:
+                    username = name
+                elif email:
+                    username = email
             try:
                 f = open(cfgFile, "w")
+                f.write(os.linesep.join(["[ui]", "username = {0}".format(username), ""]))
                 f.close()
             except (IOError, OSError):
                 # ignore these
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialUserDataDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter the user data for a minimal hgrc file.
+"""
+
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+
+from PyQt4.QtGui import QDialog
+
+from .Ui_MercurialUserDataDialog import Ui_MercurialUserDataDialog
+
+
+class MercurialUserDataDialog(QDialog, Ui_MercurialUserDataDialog):
+    """
+    Class implementing a dialog to enter the user data for a minimal hgrc file.
+    """
+    def __init__(self, parent=None):
+        """
+        Constructor
+        
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(MercurialUserDataDialog, self).__init__(parent)
+        self.setupUi(self)
+    
+    def getData(self):
+        """
+        Public method to retrieve the data.
+        
+        @return tuple containing the user name and the user email address (string, string)
+        """
+        return self.usernameEdit.text(), self.emailEdit.text()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/VcsPlugins/vcsMercurial/ConfigurationPage/MercurialUserDataDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MercurialUserDataDialog</class>
+ <widget class="QDialog" name="MercurialUserDataDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>106</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Mercurial User Data</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>&amp;Username:</string>
+     </property>
+     <property name="buddy">
+      <cstring>usernameEdit</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="usernameEdit">
+     <property name="toolTip">
+      <string>Enter the name of the user (first name and last name)</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>&amp;Email:</string>
+     </property>
+     <property name="buddy">
+      <cstring>emailEdit</cstring>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1">
+    <widget class="QLineEdit" name="emailEdit">
+     <property name="toolTip">
+      <string>Enter the email address</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0" colspan="2">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>MercurialUserDataDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>MercurialUserDataDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to enter the archive data.
+"""
+
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+
+from PyQt4.QtCore import pyqtSlot, QFileInfo
+from PyQt4.QtGui import QDialog, QDialogButtonBox
+
+from E5Gui.E5Completers import E5FileCompleter, E5DirCompleter
+from E5Gui import E5FileDialog
+
+from .Ui_HgArchiveDialog import Ui_HgArchiveDialog
+
+import Utilities
+
+
+class HgArchiveDialog(QDialog, Ui_HgArchiveDialog):
+    """
+    Class implementing a dialog to enter the archive data.
+    """
+    def __init__(self, vcs, parent=None):
+        """
+        Constructor
+        
+        @param vcs reference to the Mercurial object (Hg)
+        @param parent reference to the parent widget (QWidget)
+        """
+        super(HgArchiveDialog, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.__archiveFileCompleter = E5FileCompleter()
+        self.__archiveDirCompleter = E5DirCompleter()
+        self.__activeCompleter = self.__archiveFileCompleter
+        self.archiveEdit.setCompleter(self.__activeCompleter)
+        self.__activeCompleter.model().setNameFilters([])
+        
+        self.typeComboBox.addItem(self.trUtf8("Detect Automatically"), "")
+        self.typeComboBox.addItem(self.trUtf8("Directory of Files"), "files")
+        self.typeComboBox.addItem(self.trUtf8("Uncompressed TAR-Archive"), "tar")
+        self.typeComboBox.addItem(self.trUtf8("Bzip2 compressed TAR-Archive"), "tbz2")
+        self.typeComboBox.addItem(self.trUtf8("Gzip compressed TAR-Archive"), "tgz")
+        self.typeComboBox.addItem(self.trUtf8("Uncompressed ZIP-Archive"), "uzip")
+        self.typeComboBox.addItem(self.trUtf8("Compressed ZIP-Archive"), "zip")
+        
+        self.__unixFileFilters = [
+            self.trUtf8("Bzip2 compressed TAR-Archive (*.tar.bz2)"),
+            self.trUtf8("Gzip compressed TAR-Archive (*.tar.gz)"),
+            self.trUtf8("Uncompressed TAR-Archive (*.tar)"),
+        ]
+        self.__windowsFileFilters = [
+            self.trUtf8("Compressed ZIP-Archive (*.zip)"),
+            self.trUtf8("Uncompressed ZIP-Archive (*.uzip)")
+        ]
+        if Utilities.isWindowsPlatform():
+            self.__fileFilters = ";;".join(
+                self.__windowsFileFilters + self.__unixFileFilters)
+        else:
+            self.__fileFilters = ";;".join(
+                self.__unixFileFilters + self.__windowsFileFilters)
+        self.__fileFilters += ";;" + self.trUtf8("All Files (*)")
+        
+        self.__typeFilters = {
+            "tar": ["*.tar"],
+            "tbz2": ["*.tar.bz2", "*.tbz2"],
+            "tgz": ["*.tar.gz", "*.tgz"],
+            "uzip": ["*.uzip", "*.zip"],
+            "zip": ["*.zip"],
+        }
+        
+        self.subReposCheckBox.setEnabled(vcs.hasSubrepositories())
+        
+        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(False)
+        
+        self.__projectPath = \
+            vcs.getPlugin().getProjectHelper().getProject().getProjectPath()
+    
+    @pyqtSlot(str)
+    def on_archiveEdit_textChanged(self, archive):
+        """
+        Private slot to handle changes of the archive name.
+        """
+        self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(archive != "")
+    
+    @pyqtSlot()
+    def on_archiveButton_clicked(self):
+        """
+        Private slot to select the archive name via a file selection dialog.
+        """
+        type_ = self.typeComboBox.itemData(self.typeComboBox.currentIndex())
+        
+        archive = Utilities.fromNativeSeparators(self.archiveEdit.text())
+        if not archive:
+            archive = self.__projectPath
+        
+        if type_ == "files":
+            archive = E5FileDialog.getExistingDirectory(
+                self,
+                self.trUtf8("Select Archive Directory"),
+                archive,
+                E5FileDialog.Options(E5FileDialog.ShowDirsOnly))
+        else:
+            archive, selectedFilter = E5FileDialog.getSaveFileNameAndFilter(
+                self,
+                self.trUtf8("Select Archive File"),
+                archive,
+                self.__fileFilters,
+                None,
+                E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite))
+            if archive:
+                ext = QFileInfo(archive).suffix()
+                if not ext:
+                    ex = selectedFilter.split("(*")[1].split(")")[0]
+                    if ex:
+                        archive += ex
+        
+        if archive:
+            self.archiveEdit.setText(Utilities.toNativeSeparators(archive))
+    
+    @pyqtSlot(int)
+    def on_typeComboBox_activated(self, index):
+        """
+        Private slot to react on changes of the selected archive type.
+        
+        @param index index of the selected type (integer)
+        """
+        type_ = self.typeComboBox.itemData(index)
+        if type_ == "files":
+            if self.__activeCompleter != self.__archiveDirCompleter:
+                self.__activeCompleter = self.__archiveDirCompleter
+                self.archiveEdit.setCompleter(self.__activeCompleter)
+        else:
+            if self.__activeCompleter != self.__archiveFileCompleter:
+                self.__activeCompleter = self.__archiveFileCompleter
+                self.archiveEdit.setCompleter(self.__activeCompleter)
+            if type_ in self.__typeFilters:
+                self.__activeCompleter.model().setNameFilters(self.__typeFilters[type_])
+            else:
+                self.__activeCompleter.model().setNameFilters([])
+    
+    def getData(self):
+        """
+        Public method to retrieve the data.
+        
+        @return tuple giving the archive name (string), the archive type (string),
+            the directory prefix 8string) and a flag indicating to recurse into
+            subrepositories (boolean)
+        """
+        return (
+            self.archiveEdit.text(),
+            self.typeComboBox.itemData(self.typeComboBox.currentIndex()),
+            self.prefixEdit.text(),
+            self.subReposCheckBox.isChecked(),
+        )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/VcsPlugins/vcsMercurial/HgArchiveDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>HgArchiveDialog</class>
+ <widget class="QDialog" name="HgArchiveDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>145</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Mercurial Archive</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QLabel" name="label">
+     <property name="text">
+      <string>Archive:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="1">
+    <widget class="QLineEdit" name="archiveEdit">
+     <property name="toolTip">
+      <string>Enter the file name of the archive</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="2">
+    <widget class="QPushButton" name="archiveButton">
+     <property name="toolTip">
+      <string>Press to select the archive file name via a file selection dialog</string>
+     </property>
+     <property name="text">
+      <string>...</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QLabel" name="label_3">
+     <property name="text">
+      <string>Type:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="1" column="1" colspan="2">
+    <widget class="QComboBox" name="typeComboBox">
+     <property name="toolTip">
+      <string>Select the archive type</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QLabel" name="label_2">
+     <property name="text">
+      <string>Prefix:</string>
+     </property>
+    </widget>
+   </item>
+   <item row="2" column="1" colspan="2">
+    <widget class="QLineEdit" name="prefixEdit">
+     <property name="toolTip">
+      <string>Enter the directory prefix for the files in the archive</string>
+     </property>
+    </widget>
+   </item>
+   <item row="3" column="0" colspan="3">
+    <widget class="QCheckBox" name="subReposCheckBox">
+     <property name="toolTip">
+      <string>Select to recurse into subrepositories</string>
+     </property>
+     <property name="text">
+      <string>Include Subrepositories</string>
+     </property>
+    </widget>
+   </item>
+   <item row="4" column="0" colspan="3">
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>archiveEdit</tabstop>
+  <tabstop>archiveButton</tabstop>
+  <tabstop>typeComboBox</tabstop>
+  <tabstop>prefixEdit</tabstop>
+  <tabstop>subReposCheckBox</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>HgArchiveDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>HgArchiveDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- a/Plugins/VcsPlugins/vcsMercurial/HgClient.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgClient.py	Mon Aug 12 22:21:53 2013 +0200
@@ -15,10 +15,11 @@
 import struct
 import io
 
-from PyQt4.QtCore import QProcess, QProcessEnvironment, QObject, QByteArray, \
-    QCoreApplication, QThread
+from PyQt4.QtCore import QProcess, QObject, QByteArray, QCoreApplication, QThread
 from PyQt4.QtGui import QDialog
 
+from .HgUtilities import prepareProcess
+
 import Preferences
 
 
@@ -78,11 +79,7 @@
         # connect signals
         self.__server.finished.connect(self.__serverFinished)
         
-        # set the encoding for the server
-        if self.__encoding:
-            env = QProcessEnvironment.systemEnvironment()
-            env.insert("HGENCODING", self.__encoding)
-            self.__server.setProcessEnvironment(env)
+        prepareProcess(self.__server, self.__encoding)
         
         self.__server.start('hg', self.__serverArgs)
         serverStarted = self.__server.waitForStarted(5000)
--- a/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgCommitDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -27,20 +27,25 @@
     accepted = pyqtSignal()
     rejected = pyqtSignal()
     
-    def __init__(self, vcs, parent=None):
+    def __init__(self, vcs, mq, parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
+        @param mq flag indicating a queue commit (boolean)
         @param parent parent widget (QWidget)
         """
         super(HgCommitDialog, self).__init__(parent, Qt.WindowFlags(Qt.Window))
         self.setupUi(self)
         
-        if vcs.version < (2, 2):
-            self.amendCheckBox.setEnabled(False)
-        
-        self.subrepoCheckBox.setVisible(vcs.hasSubrepositories())
+        if mq:
+            self.amendCheckBox.setVisible(False)
+            self.subrepoCheckBox.setVisible(False)
+        else:
+            if vcs.version < (2, 2):
+                self.amendCheckBox.setEnabled(False)
+            
+            self.subrepoCheckBox.setVisible(vcs.hasSubrepositories())
     
     def showEvent(self, evt):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -47,13 +47,14 @@
     MessageColumn = 6
     TagsColumn = 7
     
-    def __init__(self, vcs, mode="log", bundle=None, parent=None):
+    def __init__(self, vcs, mode="log", bundle=None, isFile=False, parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
         @param mode mode of the dialog (string; one of log, incoming, outgoing)
         @param bundle name of a bundle file (string)
+        @param isFile flag indicating log for a file is to be shown (boolean)
         @param parent parent widget (QWidget)
         """
         super(HgLogBrowserDialog, self).__init__(parent)
@@ -78,6 +79,8 @@
             self.trUtf8("Press to refresh the list of changesets"))
         self.refreshButton.setEnabled(False)
         
+        self.sbsCheckBox.setEnabled(isFile)
+        
         self.vcs = vcs
         if mode in ("log", "incoming", "outgoing"):
             self.commandMode = mode
@@ -959,12 +962,15 @@
         @param rev1 first revision number (integer)
         @param rev2 second revision number (integer)
         """
-        if self.diff is None:
-            from .HgDiffDialog import HgDiffDialog
-            self.diff = HgDiffDialog(self.vcs)
-        self.diff.show()
-        self.diff.raise_()
-        self.diff.start(self.filename, [rev1, rev2], self.bundle)
+        if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked():
+            self.vcs.hgSbsDiff(self.filename, revisions=(str(rev1), str(rev2)))
+        else:
+            if self.diff is None:
+                from .HgDiffDialog import HgDiffDialog
+                self.diff = HgDiffDialog(self.vcs)
+            self.diff.show()
+            self.diff.raise_()
+            self.diff.start(self.filename, [rev1, rev2], self.bundle)
     
     def on_buttonBox_clicked(self, button):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogBrowserDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -246,8 +246,8 @@
     </widget>
    </item>
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
       <widget class="QPushButton" name="nextButton">
        <property name="toolTip">
         <string>Press to get the next bunch of log entries</string>
@@ -257,7 +257,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="1">
       <widget class="QSpinBox" name="limitSpinBox">
        <property name="toolTip">
         <string>Enter the limit of entries to fetch</string>
@@ -276,7 +276,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="2">
       <widget class="QCheckBox" name="stopCheckBox">
        <property name="toolTip">
         <string>Select to stop listing log messages at a copy or move</string>
@@ -286,7 +286,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="3" rowspan="2">
       <widget class="Line" name="line">
        <property name="frameShadow">
         <enum>QFrame::Raised</enum>
@@ -299,7 +299,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="4">
       <widget class="QPushButton" name="diffP1Button">
        <property name="toolTip">
         <string>Press to generate a diff to the first parent revision</string>
@@ -309,7 +309,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="5">
       <widget class="QPushButton" name="diffP2Button">
        <property name="toolTip">
         <string>Press to generate a diff to the second parent revision</string>
@@ -319,7 +319,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="6">
       <widget class="QPushButton" name="diffRevisionsButton">
        <property name="toolTip">
         <string>Press to compare two revisions</string>
@@ -329,7 +329,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="7" rowspan="2">
       <widget class="Line" name="phaseLine">
        <property name="frameShadow">
         <enum>QFrame::Raised</enum>
@@ -342,7 +342,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="8">
       <widget class="QPushButton" name="graftButton">
        <property name="toolTip">
         <string>Press to copy the selected changesets to the current branch</string>
@@ -352,7 +352,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="9">
       <widget class="QPushButton" name="phaseButton">
        <property name="toolTip">
         <string>Change the phase of the selected revisions</string>
@@ -366,7 +366,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="10">
       <spacer>
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
@@ -379,6 +379,16 @@
        </property>
       </spacer>
      </item>
+     <item row="1" column="4" colspan="3">
+      <widget class="QCheckBox" name="sbsCheckBox">
+       <property name="toolTip">
+        <string>Select to show differences side-by-side</string>
+       </property>
+       <property name="text">
+        <string>Show differences side-by-side</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>
@@ -501,13 +511,14 @@
   <tabstop>diffP1Button</tabstop>
   <tabstop>diffP2Button</tabstop>
   <tabstop>diffRevisionsButton</tabstop>
+  <tabstop>sbsCheckBox</tabstop>
   <tabstop>graftButton</tabstop>
   <tabstop>phaseButton</tabstop>
   <tabstop>errors</tabstop>
   <tabstop>input</tabstop>
   <tabstop>passwordCheckBox</tabstop>
+  <tabstop>sendButton</tabstop>
   <tabstop>buttonBox</tabstop>
-  <tabstop>sendButton</tabstop>
  </tabstops>
  <resources/>
  <connections/>
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -35,13 +35,14 @@
     The dialog is nonmodal. Clicking a link in the upper text pane shows
     a diff of the revisions.
     """
-    def __init__(self, vcs, mode="log", bundle=None, parent=None):
+    def __init__(self, vcs, mode="log", bundle=None, isFile=False, parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
         @param mode mode of the dialog (string; one of log, incoming, outgoing)
         @param bundle name of a bundle file (string)
+        @param isFile flag indicating log for a file is to be shown (boolean)
         @param parent parent widget (QWidget)
         """
         super(HgLogDialog, self).__init__(parent)
@@ -78,6 +79,8 @@
         self.initialText = []
         
         self.diff = None
+        
+        self.sbsCheckBox.setEnabled(isFile)
     
     def closeEvent(self, e):
         """
@@ -449,11 +452,14 @@
             return
         self.contents.scrollToAnchor(ver)
         
-        if self.diff is None:
-            from .HgDiffDialog import HgDiffDialog
-            self.diff = HgDiffDialog(self.vcs)
-        self.diff.show()
-        self.diff.start(filename, [v1, v2], self.bundle)
+        if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked():
+            self.vcs.hgSbsDiff(filename, revisions=(v1, v2))
+        else:
+            if self.diff is None:
+                from .HgDiffDialog import HgDiffDialog
+                self.diff = HgDiffDialog(self.vcs)
+            self.diff.show()
+            self.diff.start(filename, [v1, v2], self.bundle)
     
     def on_passwordCheckBox_toggled(self, isOn):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/HgLogDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgLogDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -13,7 +13,7 @@
   <property name="windowTitle">
    <string>Mercurial Log</string>
   </property>
-  <layout class="QVBoxLayout">
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QGroupBox" name="contentsGroup">
      <property name="sizePolicy">
@@ -40,6 +40,16 @@
     </widget>
    </item>
    <item>
+    <widget class="QCheckBox" name="sbsCheckBox">
+     <property name="toolTip">
+      <string>Select to show differences side-by-side</string>
+     </property>
+     <property name="text">
+      <string>Show differences side-by-side</string>
+     </property>
+    </widget>
+   </item>
+   <item>
     <widget class="QGroupBox" name="errorGroup">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
@@ -139,6 +149,7 @@
  </widget>
  <tabstops>
   <tabstop>contents</tabstop>
+  <tabstop>sbsCheckBox</tabstop>
   <tabstop>errors</tabstop>
   <tabstop>input</tabstop>
   <tabstop>passwordCheckBox</tabstop>
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -31,11 +31,12 @@
     """
     Class implementing a dialog to show the output of the hg status command process.
     """
-    def __init__(self, vcs, parent=None):
+    def __init__(self, vcs, mq=False, parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
+        @param mq flag indicating to show a queue repo status (boolean)
         @param parent parent widget (QWidget)
         """
         super(HgStatusDialog, self).__init__(parent)
@@ -58,37 +59,50 @@
         self.vcs = vcs
         self.vcs.committed.connect(self.__committed)
         self.__hgClient = self.vcs.getClient()
+        self.__mq = mq
         
         self.statusList.headerItem().setText(self.__lastColumn, "")
         self.statusList.header().setSortIndicator(self.__pathColumn, Qt.AscendingOrder)
         
+        if mq:
+            self.buttonsLine.setVisible(False)
+            self.addButton.setVisible(False)
+            self.diffButton.setVisible(False)
+            self.sbsDiffButton.setVisible(False)
+            self.revertButton.setVisible(False)
+            self.forgetButton.setVisible(False)
+            self.restoreButton.setVisible(False)
+        
         self.menuactions = []
         self.menu = QMenu()
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Commit changes to repository..."), self.__commit))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Select all for commit"), self.__commitSelectAll))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Deselect all from commit"), self.__commitDeselectAll))
-        self.menu.addSeparator()
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Add to repository"), self.__add))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Show differences"), self.__diff))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Remove from repository"), self.__forget))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Revert changes"), self.__revert))
-        self.menuactions.append(self.menu.addAction(
-            self.trUtf8("Restore missing"), self.__restoreMissing))
-        self.menu.addSeparator()
-        self.menuactions.append(self.menu.addAction(self.trUtf8("Adjust column sizes"),
-            self.__resizeColumns))
-        for act in self.menuactions:
-            act.setEnabled(False)
-        
-        self.statusList.setContextMenuPolicy(Qt.CustomContextMenu)
-        self.statusList.customContextMenuRequested.connect(self.__showContextMenu)
+        if not mq:
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Commit changes to repository..."), self.__commit))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Select all for commit"), self.__commitSelectAll))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Deselect all from commit"), self.__commitDeselectAll))
+            self.menu.addSeparator()
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Add to repository"), self.__add))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Show differences"), self.__diff))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Show differences side-by-side"), self.__sbsDiff))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Remove from repository"), self.__forget))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Revert changes"), self.__revert))
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Restore missing"), self.__restoreMissing))
+            self.menu.addSeparator()
+            self.menuactions.append(self.menu.addAction(
+                self.trUtf8("Adjust column sizes"), self.__resizeColumns))
+            for act in self.menuactions:
+                act.setEnabled(False)
+            
+            self.statusList.setContextMenuPolicy(Qt.CustomContextMenu)
+            self.statusList.customContextMenuRequested.connect(self.__showContextMenu)
         
         self.modifiedIndicators = [
             self.trUtf8('added'),
@@ -189,6 +203,7 @@
         self.addButton.setEnabled(False)
         self.commitButton.setEnabled(False)
         self.diffButton.setEnabled(False)
+        self.sbsDiffButton.setEnabled(False)
         self.revertButton.setEnabled(False)
         self.forgetButton.setEnabled(False)
         self.restoreButton.setEnabled(False)
@@ -196,22 +211,32 @@
         self.statusFilterCombo.clear()
         self.__statusFilters = []
         
-        self.setWindowTitle(self.trUtf8('Mercurial Status'))
+        if self.__mq:
+            self.setWindowTitle(self.trUtf8("Mercurial Queue Repository Status"))
+        else:
+            self.setWindowTitle(self.trUtf8('Mercurial Status'))
         
         args = []
         args.append('status')
         self.vcs.addArguments(args, self.vcs.options['global'])
-        self.vcs.addArguments(args, self.vcs.options['status'])
-        
-        if self.vcs.hasSubrepositories():
-            args.append("--subrepos")
-        
-        if isinstance(fn, list):
-            self.dname, fnames = self.vcs.splitPathList(fn)
-            self.vcs.addArguments(args, fn)
+        if self.__mq:
+            args.append('--mq')
+            if isinstance(fn, list):
+                self.dname, fnames = self.vcs.splitPathList(fn)
+            else:
+                self.dname, fname = self.vcs.splitPath(fn)
         else:
-            self.dname, fname = self.vcs.splitPath(fn)
-            args.append(fn)
+            self.vcs.addArguments(args, self.vcs.options['status'])
+            
+            if self.vcs.hasSubrepositories():
+                args.append("--subrepos")
+            
+            if isinstance(fn, list):
+                self.dname, fnames = self.vcs.splitPathList(fn)
+                self.vcs.addArguments(args, fn)
+            else:
+                self.dname, fname = self.vcs.splitPath(fn)
+                args.append(fn)
         
         # find the root of the repo
         repodir = self.dname
@@ -444,6 +469,7 @@
 
         self.addButton.setEnabled(unversioned)
         self.diffButton.setEnabled(modified)
+        self.sbsDiffButton.setEnabled(modified == 1)
         self.revertButton.setEnabled(modified)
         self.forgetButton.setEnabled(missing)
         self.restoreButton.setEnabled(missing)
@@ -511,6 +537,13 @@
         self.__diff()
     
     @pyqtSlot()
+    def on_sbsDiffButton_clicked(self):
+        """
+        Private slot to handle the press of the Side-by-Side Diff button.
+        """
+        self.__sbsDiff()
+    
+    @pyqtSlot()
     def on_revertButton_clicked(self):
         """
         Private slot to handle the press of the Revert button.
@@ -547,20 +580,23 @@
         """
         Private slot to handle the Commit context menu entry.
         """
-        names = [os.path.join(self.dname, itm.text(self.__pathColumn)) \
-                 for itm in self.__getCommitableItems()]
-        if not names:
-            E5MessageBox.information(self,
-                self.trUtf8("Commit"),
-                self.trUtf8("""There are no entries selected to be"""
-                            """ committed."""))
-            return
-        
-        if Preferences.getVCS("AutoSaveFiles"):
-            vm = e5App().getObject("ViewManager")
-            for name in names:
-                vm.saveEditor(name)
-        self.vcs.vcsCommit(names, '')
+        if self.__mq:
+            self.vcs.vcsCommit(self.dname, "", mq=True)
+        else:
+            names = [os.path.join(self.dname, itm.text(self.__pathColumn)) \
+                     for itm in self.__getCommitableItems()]
+            if not names:
+                E5MessageBox.information(self,
+                    self.trUtf8("Commit"),
+                    self.trUtf8("""There are no entries selected to be"""
+                                """ committed."""))
+                return
+            
+            if Preferences.getVCS("AutoSaveFiles"):
+                vm = e5App().getObject("ViewManager")
+                for name in names:
+                    vm.saveEditor(name)
+            self.vcs.vcsCommit(names, '')
     
     def __committed(self):
         """
@@ -677,7 +713,28 @@
             self.diff = HgDiffDialog(self.vcs)
         self.diff.show()
         self.diff.start(names)
+    
+    def __sbsDiff(self):
+        """
+        Private slot to handle the Diff context menu entry.
+        """
+        names = [os.path.join(self.dname, itm.text(self.__pathColumn))
+                 for itm in self.__getModifiedItems()]
+        if not names:
+            E5MessageBox.information(self,
+                self.trUtf8("Side-by-Side Diff"),
+                self.trUtf8("""There are no uncommitted changes"""
+                            """ available/selected."""))
+            return
+        elif len(names) > 1:
+            E5MessageBox.information(self,
+                self.trUtf8("Side-by-Side Diff"),
+                self.trUtf8("""Only one file with uncommitted changes"""
+                            """ must be selected."""))
+            return
         
+        self.vcs.hgSbsDiff(names[0])
+    
     def __getCommitableItems(self):
         """
         Private method to retrieve all entries the user wants to commit.
--- a/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgStatusDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -105,7 +105,7 @@
       </widget>
      </item>
      <item>
-      <widget class="Line" name="line">
+      <widget class="Line" name="buttonsLine">
        <property name="orientation">
         <enum>Qt::Vertical</enum>
        </property>
@@ -132,6 +132,16 @@
       </widget>
      </item>
      <item>
+      <widget class="QPushButton" name="sbsDiffButton">
+       <property name="toolTip">
+        <string>Show differences of the selected entry to the repository in a side-by-side manner</string>
+       </property>
+       <property name="text">
+        <string>Side-b&amp;y-Side Diff</string>
+       </property>
+      </widget>
+     </item>
+     <item>
       <widget class="QPushButton" name="revertButton">
        <property name="toolTip">
         <string>Revert the selected entries to the last revision in the repository</string>
@@ -279,6 +289,7 @@
   <tabstop>commitButton</tabstop>
   <tabstop>addButton</tabstop>
   <tabstop>diffButton</tabstop>
+  <tabstop>sbsDiffButton</tabstop>
   <tabstop>revertButton</tabstop>
   <tabstop>forgetButton</tabstop>
   <tabstop>restoreButton</tabstop>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/VcsPlugins/vcsMercurial/HgSummaryDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,446 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2013 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to show some summary information of the working
+directory state.
+"""
+
+from __future__ import unicode_literals    # __IGNORE_WARNING__
+try:
+    str = unicode
+except (NameError):
+    pass
+
+import os
+
+from PyQt4.QtCore import pyqtSlot, QProcess, QTimer
+from PyQt4.QtGui import QDialog, QDialogButtonBox
+
+from E5Gui import E5MessageBox
+
+from .HgUtilities import prepareProcess
+
+from .Ui_HgSummaryDialog import Ui_HgSummaryDialog
+
+import Preferences
+
+
+class HgSummaryDialog(QDialog, Ui_HgSummaryDialog):
+    """
+    Class implementing a dialog to show some summary information of the working
+    directory state.
+    """
+    def __init__(self, vcs, parent=None):
+        """
+        Constructor
+        
+        @param vcs reference to the vcs object
+        @param parent parent widget (QWidget)
+        """
+        super(HgSummaryDialog, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.refreshButton = \
+            self.buttonBox.addButton(self.trUtf8("Refresh"), QDialogButtonBox.ActionRole)
+        self.refreshButton.setToolTip(self.trUtf8("Press to refresh the summary display"))
+        self.refreshButton.setEnabled(False)
+        
+        self.process = None
+        self.vcs = vcs
+        self.vcs.committed.connect(self.__committed)
+    
+    def closeEvent(self, e):
+        """
+        Private slot implementing a close event handler.
+        
+        @param e close event (QCloseEvent)
+        """
+        if self.process is not None and \
+           self.process.state() != QProcess.NotRunning:
+            self.process.terminate()
+            QTimer.singleShot(2000, self.process.kill)
+            self.process.waitForFinished(3000)
+        
+        e.accept()
+    
+    def start(self, path, mq=False):
+        """
+        Public slot to start the hg summary command.
+        
+        @param path path name of the working directory (string)
+        @param mq flag indicating to show the queue status as well (boolean)
+        """
+        self.errorGroup.hide()
+        self.__path = path
+        self.__mq = mq
+        
+        args = []
+        args.append('summary')
+        self.vcs.addArguments(args, self.vcs.options['global'])
+        args.append("--remote")
+        if self.__mq:
+            args.append("--mq")
+        
+        # find the root of the repo
+        repodir = self.__path
+        while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
+            repodir = os.path.dirname(repodir)
+            if os.path.splitdrive(repodir)[1] == os.sep:
+                return
+        
+        if self.process:
+            self.process.kill()
+        else:
+            self.process = QProcess()
+            prepareProcess(self.process, Preferences.getSystem("IOEncoding"), "C")
+            self.process.finished.connect(self.__procFinished)
+            self.process.readyReadStandardOutput.connect(self.__readStdout)
+            self.process.readyReadStandardError.connect(self.__readStderr)
+        
+        self.process.setWorkingDirectory(repodir)
+        
+        self.__buffer = []
+        
+        self.process.start('hg', args)
+        procStarted = self.process.waitForStarted(5000)
+        if not procStarted:
+            E5MessageBox.critical(self,
+                self.trUtf8('Process Generation Error'),
+                self.trUtf8(
+                    'The process {0} could not be started. '
+                    'Ensure, that it is in the search path.'
+                ).format('hg'))
+    
+    def __finish(self):
+        """
+        Private slot called when the process finished or the user pressed the button.
+        """
+        if self.process is not None and \
+           self.process.state() != QProcess.NotRunning:
+            self.process.terminate()
+            QTimer.singleShot(2000, self.process.kill)
+            self.process.waitForFinished(3000)
+        
+        self.refreshButton.setEnabled(True)
+        self.process = None
+    
+    def on_buttonBox_clicked(self, button):
+        """
+        Private slot called by a button of the button box clicked.
+        
+        @param button button that was clicked (QAbstractButton)
+        """
+        if button == self.buttonBox.button(QDialogButtonBox.Close):
+            self.close()
+        elif button == self.refreshButton:
+            self.on_refreshButton_clicked()
+    
+    def __procFinished(self, exitCode, exitStatus):
+        """
+        Private slot connected to the finished signal.
+        
+        @param exitCode exit code of the process (integer)
+        @param exitStatus exit status of the process (QProcess.ExitStatus)
+        """
+        self.__processOutput(self.__buffer)
+        self.__finish()
+    
+    def __readStdout(self):
+        """
+        Private slot to handle the readyReadStandardOutput signal.
+        
+        It reads the output of the process, formats it and inserts it into
+        the contents pane.
+        """
+        if self.process is not None:
+            self.process.setReadChannel(QProcess.StandardOutput)
+            
+            while self.process.canReadLine():
+                line = str(self.process.readLine(),
+                        Preferences.getSystem("IOEncoding"),
+                        'replace')
+                self.__buffer.append(line)
+    
+    def __readStderr(self):
+        """
+        Private slot to handle the readyReadStandardError signal.
+        
+        It reads the error output of the process and inserts it into the
+        error pane.
+        """
+        if self.process is not None:
+            s = str(self.process.readAllStandardError(),
+                    Preferences.getSystem("IOEncoding"),
+                    'replace')
+            self.__showError(s)
+    
+    def __showError(self, out):
+        """
+        Private slot to show some error.
+        
+        @param out error to be shown (string)
+        """
+        self.errorGroup.show()
+        self.errors.insertPlainText(out)
+        self.errors.ensureCursorVisible()
+    
+    @pyqtSlot()
+    def on_refreshButton_clicked(self):
+        """
+        Private slot to refresh the status display.
+        """
+        self.refreshButton.setEnabled(False)
+        self.summary.clear()
+        
+        self.start(self.__path, mq=self.__mq)
+    
+    def __committed(self):
+        """
+        Private slot called after the commit has finished.
+        """
+        if self.isVisible():
+            self.on_refreshButton_clicked()
+    
+    def __processOutput(self, output):
+        """
+        Private method to process the output into nice readable text.
+        
+        @param output output from the summary command (string)
+        """
+        infoDict = {}
+        
+        # step 1: parse the output
+        while output:
+            line = output.pop(0)
+            name, value = line.split(": ", 1)
+            value = value.strip()
+            
+            if name == "parent":
+                if " " in value:
+                    parent, tags = value.split(" ", 1)
+                else:
+                    parent = value
+                    tags = ""
+                rev, node = parent.split(":")
+                
+                remarks = []
+                if tags:
+                    if " (empty repository)" in tags:
+                        remarks.append("@EMPTY@")
+                        tags = tags.replace(" (empty repository)", "")
+                    if " (no revision checked out)" in tags:
+                        remarks.append("@NO_REVISION@")
+                        tags = tags.replace(" (no revision checked out)", "")
+                else:
+                    tags = None
+                
+                value = infoDict.get(name, [])
+                
+                if rev == "-1":
+                    value.append((int(rev), node, tags, None, remarks))
+                else:
+                    message = output.pop(0).strip()
+                    value.append((int(rev), node, tags, message, remarks))
+            elif name == "branch":
+                pass
+            elif name == "bookmarks":
+                pass
+            elif name == "commit":
+                stateDict = {}
+                if "(" in value:
+                    if value.startswith("("):
+                        states = ""
+                        remark = value[1:-1]
+                    else:
+                        states, remark = value.rsplit(" (", 1)
+                        remark = remark[:-1]
+                else:
+                    states = value
+                    remark = ""
+                states = states.split(", ")
+                for state in states:
+                    if state:
+                        count, category = state.split(" ")
+                        stateDict[category] = count
+                value = (stateDict, remark)
+            elif name == "update":
+                if value.endswith("(current)"):
+                    value = ("@CURRENT@", 0, 0)
+                elif value.endswith("(update)"):
+                    value = ("@UPDATE@", value.split(" ", 1)[0], 0)
+                elif value.endswith("(merge)"):
+                    parts = value.split(", ")
+                    value = ("@MERGE@", parts[0].split(" ", 1)[0],
+                             parts[1].split(" ", 1)[0])
+                else:
+                    value = ("@UNKNOWN@", 0, 0)
+            elif name == "remote":
+                if value == "(synced)":
+                    value = (0, 0, 0, 0)
+                else:
+                    inc = incb = outg = outgb = 0
+                    for val in value.split(", "):
+                        count, category = val.split(" ", 1)
+                        if category == "outgoing":
+                            outg = int(count)
+                        elif category.endswith("incoming"):
+                            inc = int(count)
+                        elif category == "incoming bookmarks":
+                            incb = int(count)
+                        elif category == "outgoing bookmarks":
+                            outgb = int(count)
+                    value = (inc, outg, incb, outgb)
+            elif name == "mq":
+                if value == "(empty queue)":
+                    value = (0, 0)
+                else:
+                    applied = unapplied = 0
+                    for val in value.split(", "):
+                        count, category = val.split(" ", 1)
+                        if category == "applied":
+                            applied = int(count)
+                        elif category == "unapplied":
+                            unapplied = int(count)
+                    value = (applied, unapplied)
+            else:
+                # ignore unknown entries
+                continue
+            
+            infoDict[name] = value
+        
+        # step 2: build the output
+        if infoDict:
+            info = ["<table>"]
+            pindex = 0
+            for rev, node, tags, message, remarks in infoDict["parent"]:
+                pindex += 1
+                changeset = "{0}:{1}".format(rev, node)
+                if len(infoDict["parent"]) > 1:
+                    info.append(
+                        self.trUtf8("<tr><td><b>Parent #{0}</b></td><td>{1}</td></tr>")
+                        .format(pindex, changeset))
+                else:
+                    info.append(
+                        self.trUtf8("<tr><td><b>Parent</b></td><td>{0}</td></tr>")
+                        .format(changeset))
+                if tags:
+                    info.append(self.trUtf8("<tr><td><b>Tags</b></td><td>{0}</td></tr>")
+                                .format('<br/>'.join(tags.split())))
+                if message:
+                    info.append(
+                        self.trUtf8("<tr><td><b>Commit Message</b></td><td>{0}</td></tr>")
+                        .format(message))
+                if remarks:
+                    rem = []
+                    if "@EMPTY@" in remarks:
+                        rem.append(self.trUtf8("empty repository"))
+                    if "@NO_REVISION@" in remarks:
+                        rem.append(self.trUtf8("no revision checked out"))
+                    info.append(
+                        self.trUtf8("<tr><td><b>Remarks</b></td><td>{0}</td></tr>")
+                        .format(", ".join(rem)))
+            if "branch" in infoDict:
+                info.append(self.trUtf8("<tr><td><b>Branch</b></td><td>{0}</td></tr>")
+                            .format(infoDict["branch"]))
+            if "bookmarks" in infoDict:
+                bookmarks = infoDict["bookmarks"].split()
+                for i in range(len(bookmarks)):
+                    if bookmarks[i].startswith("*"):
+                        bookmarks[i] = "<b>{0}</b>".format(bookmarks[i])
+                info.append(self.trUtf8("<tr><td><b>Bookmarks</b></td><td>{0}</td></tr>")
+                            .format('<br/>'.join(bookmarks)))
+            if "commit" in infoDict:
+                cinfo = []
+                for category, count in infoDict["commit"][0].items():
+                    if category == "modified":
+                        cinfo.append(self.trUtf8("{0} modified").format(count))
+                    elif category == "added":
+                        cinfo.append(self.trUtf8("{0} added").format(count))
+                    elif category == "removed":
+                        cinfo.append(self.trUtf8("{0} removed").format(count))
+                    elif category == "renamed":
+                        cinfo.append(self.trUtf8("{0} renamed").format(count))
+                    elif category == "copied":
+                        cinfo.append(self.trUtf8("{0} copied").format(count))
+                    elif category == "deleted":
+                        cinfo.append(self.trUtf8("{0} deleted").format(count))
+                    elif category == "unknown":
+                        cinfo.append(self.trUtf8("{0} unknown").format(count))
+                    elif category == "ignored":
+                        cinfo.append(self.trUtf8("{0} ignored").format(count))
+                    elif category == "unresolved":
+                        cinfo.append(self.trUtf8("{0} unresolved").format(count))
+                    elif category == "subrepos":
+                        cinfo.append(self.trUtf8("{0} subrepos").format(count))
+                remark = infoDict["commit"][1]
+                if remark == "merge":
+                    cinfo.append(self.trUtf8("Merge needed"))
+                elif remark == "new branch":
+                    cinfo.append(self.trUtf8("New Branch"))
+                elif remark == "head closed":
+                    cinfo.append(self.trUtf8("Head is closed"))
+                elif remark == "clean":
+                    cinfo.append(self.trUtf8("No commit required"))
+                elif remark == "new branch head":
+                    cinfo.append(self.trUtf8("New Branch Head"))
+                info.append(
+                    self.trUtf8("<tr><td><b>Commit Status</b></td><td>{0}</td></tr>")
+                    .format("<br/>".join(cinfo)))
+            if "update" in infoDict:
+                if infoDict["update"][0] == "@CURRENT@":
+                    uinfo = self.trUtf8("current")
+                elif infoDict["update"][0] == "@UPDATE@":
+                    uinfo = self.trUtf8("%n new changeset(s)<br/>Update required", "",
+                        infoDict["update"][1])
+                elif infoDict["update"][0] == "@MERGE@":
+                    uinfo1 = self.trUtf8("%n new changeset(s)", "", infoDict["update"][1])
+                    uinfo2 = self.trUtf8("%n branch head(s)", "", infoDict["update"][2])
+                    uinfo = self.trUtf8("{0}<br/>{1}<br/>Merge required",
+                        "0 is changesets, 1 is branch heads")\
+                        .format(uinfo1, uinfo2)
+                else:
+                    uinfo = self.trUtf8("unknown status")
+                info.append(
+                    self.trUtf8("<tr><td><b>Update Status</b></td><td>{0}</td></tr>")
+                    .format(uinfo))
+            if "remote" in infoDict:
+                if infoDict["remote"] == (0, 0, 0, 0):
+                    rinfo = self.trUtf8("synched")
+                else:
+                    l = []
+                    if infoDict["remote"][0]:
+                        l.append(self.trUtf8("1 or more incoming"))
+                    if infoDict["remote"][1]:
+                        l.append(self.trUtf8("{0} outgoing")\
+                            .format(infoDict["remote"][1]))
+                    if infoDict["remote"][2]:
+                        l.append(self.trUtf8("%n incoming bookmark(s)", "",
+                                 infoDict["remote"][2]))
+                    if infoDict["remote"][3]:
+                        l.append(self.trUtf8("%n outgoing bookmark(s)", "",
+                                 infoDict["remote"][3]))
+                    rinfo = "<br/>".join(l)
+                info.append(
+                    self.trUtf8("<tr><td><b>Remote Status</b></td><td>{0}</td></tr>")
+                    .format(rinfo))
+            if "mq" in infoDict:
+                if infoDict["mq"] == (0, 0):
+                    qinfo = self.trUtf8("empty queue")
+                else:
+                    l = []
+                    if infoDict["mq"][0]:
+                        l.append(self.trUtf8("{0} applied").format(infoDict["mq"][0]))
+                    if infoDict["mq"][1]:
+                        l.append(self.trUtf8("{0} unapplied").format(infoDict["mq"][1]))
+                    qinfo = "<br/>".join(l)
+                info.append(
+                    self.trUtf8("<tr><td><b>Queues Status</b></td><td>{0}</td></tr>")
+                    .format(qinfo))
+            info.append("</table>")
+        else:
+            info = [self.trUtf8("<p>No status information available.</p>")]
+        
+        self.summary.insertHtml("\n".join(info))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/VcsPlugins/vcsMercurial/HgSummaryDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>HgSummaryDialog</class>
+ <widget class="QDialog" name="HgSummaryDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>600</width>
+    <height>500</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Summary Information</string>
+  </property>
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QTextEdit" name="summary">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>2</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="readOnly">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="errorGroup">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>1</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>Errors</string>
+     </property>
+     <layout class="QVBoxLayout">
+      <item>
+       <widget class="QTextEdit" name="errors">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="readOnly">
+         <bool>true</bool>
+        </property>
+        <property name="acceptRichText">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Close</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>summary</tabstop>
+  <tabstop>errors</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>HgSummaryDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>HgSummaryDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
--- a/Plugins/VcsPlugins/vcsMercurial/HgUtilities.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/HgUtilities.py	Mon Aug 12 22:21:53 2013 +0200
@@ -11,6 +11,8 @@
 
 import os
 
+from PyQt4.QtCore import QProcessEnvironment
+
 import Utilities
 
 
@@ -26,3 +28,25 @@
     else:
         homedir = Utilities.getHomeDir()
         return os.path.join(homedir, ".hgrc")
+
+
+def prepareProcess(proc, encoding="", language=""):
+    """
+    Public method to prepare the given process.
+    
+    @param proc reference to the proces to be prepared (QProcess)
+    @param encoding encoding to be used by the process (string)
+    @param language language to be set (string)
+    """
+    env = QProcessEnvironment.systemEnvironment()
+    env.insert("HGPLAIN", '1')
+    
+    # set the encoding for the process
+    if encoding:
+        env.insert("HGENCODING", encoding)
+    
+    # set the language for the process
+    if language:
+        env.insert("LANGUAGE", language)
+    
+    proc.setProcessEnvironment(env)
--- a/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/ProjectBrowserHelper.py	Mon Aug 12 22:21:53 2013 +0200
@@ -231,10 +231,17 @@
         act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"),
             self.trUtf8('Show difference'), self._VCSDiff)
         self.vcsMenuActions.append(act)
+        act = menu.addAction(UI.PixmapCache.getIcon("vcsSbsDiff.png"),
+            self.trUtf8('Show difference side-by-side'), self.__HgSbsDiff)
+        self.vcsMenuActions.append(act)
         act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"),
             self.trUtf8('Show difference (extended)'),
             self.__HgExtendedDiff)
         self.vcsMenuActions.append(act)
+        act = menu.addAction(UI.PixmapCache.getIcon("vcsSbsDiff.png"),
+            self.trUtf8('Show difference side-by-side (extended)'),
+            self.__HgSbsExtendedDiff)
+        self.vcsMenuActions.append(act)
         self.annotateAct = menu.addAction(self.trUtf8('Show annotated file'),
             self.__HgAnnotate)
         self.vcsMenuActions.append(self.annotateAct)
@@ -569,6 +576,24 @@
                 names.append(itm.dirName())
         self.vcs.hgExtendedDiff(names)
     
+    def __HgSbsDiff(self):
+        """
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side.
+        """
+        itm = self.browser.currentItem()
+        fn = itm.fileName()
+        self.vcs.hgSbsDiff(fn)
+    
+    def __HgSbsExtendedDiff(self):
+        """
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side allowing the selection of revisions to compare.
+        """
+        itm = self.browser.currentItem()
+        fn = itm.fileName()
+        self.vcs.hgSbsDiff(fn, extended=True)
+    
     def __HgAnnotate(self):
         """
         Private slot called by the context menu to show the annotations of a file.
@@ -584,9 +609,11 @@
         itm = self.browser.currentItem()
         try:
             fn = itm.fileName()
+            isFile = True
         except AttributeError:
             fn = itm.dirName()
-        self.vcs.hgLogBrowser(fn)
+            isFile = False
+        self.vcs.hgLogBrowser(fn, isFile=isFile)
     
     def __HgResolve(self):
         """
--- a/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/ProjectHelper.py	Mon Aug 12 22:21:53 2013 +0200
@@ -217,7 +217,7 @@
         self.vcsExportAct = E5Action(self.trUtf8('Export from repository'),
                 UI.PixmapCache.getIcon("vcsExport.png"),
                 self.trUtf8('&Export from repository...'),
-                0, 0, self, 'subversion_export')
+                0, 0, self, 'mercurial_export_repo')
         self.vcsExportAct.setStatusTip(self.trUtf8(
             'Export a project from the repository'
         ))
@@ -288,7 +288,7 @@
         
         self.vcsStatusAct = E5Action(self.trUtf8('Show status'),
                 UI.PixmapCache.getIcon("vcsStatus.png"),
-                self.trUtf8('Show &status'),
+                self.trUtf8('Show &status...'),
                 0, 0, self, 'mercurial_status')
         self.vcsStatusAct.setStatusTip(self.trUtf8(
             'Show the status of the local project'
@@ -300,6 +300,22 @@
         self.vcsStatusAct.triggered[()].connect(self._vcsStatus)
         self.actions.append(self.vcsStatusAct)
         
+        self.hgSummaryAct = E5Action(
+                self.trUtf8('Show Summary'),
+                UI.PixmapCache.getIcon("vcsSummary.png"),
+                self.trUtf8('Show summary...'),
+                0, 0, self, 'mercurial_summary')
+        self.hgSummaryAct.setStatusTip(self.trUtf8(
+            'Show summary information of the working directory status'
+        ))
+        self.hgSummaryAct.setWhatsThis(self.trUtf8(
+            """<b>Show summary</b>"""
+            """<p>This shows some summary information of the working"""
+            """ directory status.</p>"""
+        ))
+        self.hgSummaryAct.triggered[()].connect(self.__hgSummary)
+        self.actions.append(self.hgSummaryAct)
+        
         self.hgHeadsAct = E5Action(self.trUtf8('Show heads'),
                 self.trUtf8('Show heads'),
                 0, 0, self, 'mercurial_heads')
@@ -903,6 +919,20 @@
         ))
         self.hgRemoveSubreposAct.triggered[()].connect(self.__hgRemoveSubrepositories)
         self.actions.append(self.hgRemoveSubreposAct)
+        
+        self.hgArchiveAct = E5Action(self.trUtf8('Create unversioned archive'),
+                UI.PixmapCache.getIcon("vcsExport.png"),
+                self.trUtf8('Create unversioned archive...'),
+                0, 0, self, 'mercurial_archive')
+        self.hgArchiveAct.setStatusTip(self.trUtf8(
+            'Create an unversioned archive from the repository'
+        ))
+        self.hgArchiveAct.setWhatsThis(self.trUtf8(
+            """<b>Create unversioned archive...</b>"""
+            """<p>This creates an unversioned archive from the repository.</p>"""
+        ))
+        self.hgArchiveAct.triggered[()].connect(self.__hgArchive)
+        self.actions.append(self.hgArchiveAct)
     
     def initMenu(self, menu):
         """
@@ -939,6 +969,8 @@
         
         specialsMenu = QMenu(self.trUtf8("Specials"), menu)
         specialsMenu.setTearOffEnabled(True)
+        specialsMenu.addAction(self.hgArchiveAct)
+        specialsMenu.addSeparator()
         specialsMenu.addAction(self.hgPushForcedAct)
         specialsMenu.addSeparator()
         specialsMenu.addAction(self.hgServeAct)
@@ -1033,6 +1065,7 @@
         menu.addAction(self.hgLogBrowserAct)
         menu.addSeparator()
         menu.addAction(self.vcsStatusAct)
+        menu.addAction(self.hgSummaryAct)
         menu.addSeparator()
         menu.addAction(self.vcsDiffAct)
         menu.addAction(self.hgExtDiffAct)
@@ -1411,3 +1444,15 @@
         Private slot used to remove sub-repositories.
         """
         self.vcs.hgRemoveSubrepositories()
+    
+    def __hgSummary(self):
+        """
+        Private slot to show a working directory summary.
+        """
+        self.vcs.hgSummary()
+    
+    def __hgArchive(self):
+        """
+        Private slot to create an unversioned archive from the repository.
+        """
+        self.vcs.hgArchive()
--- a/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/ProjectHelper.py	Mon Aug 12 22:21:53 2013 +0200
@@ -33,6 +33,34 @@
         """
         Public method to generate the action objects.
         """
+        self.hgQueueInitAct = E5Action(self.trUtf8('Init Queue Repository'),
+                self.trUtf8('Init Queue Repository'),
+                0, 0, self, 'mercurial_queues_init')
+        self.hgQueueInitAct.setStatusTip(self.trUtf8(
+            'Initialize a new versioned queue repository'
+        ))
+        self.hgQueueInitAct.setWhatsThis(self.trUtf8(
+            """<b>Init Queue Repository</b>"""
+            """<p>This initializes a new versioned queue repository inside the"""
+            """ current repository.</p>"""
+        ))
+        self.hgQueueInitAct.triggered[()].connect(self.__hgQueueInit)
+        self.actions.append(self.hgQueueInitAct)
+        
+        self.hgQueueCommitAct = E5Action(
+                self.trUtf8('Commit changes'),
+                self.trUtf8('Commit changes...'),
+                0, 0, self, 'mercurial_queues_commit')
+        self.hgQueueCommitAct.setStatusTip(self.trUtf8(
+            'Commit changes in the queue repository'
+        ))
+        self.hgQueueCommitAct.setWhatsThis(self.trUtf8(
+            """<b>Commit changes...</b>"""
+            """<p>This commits changes in the queue repository.</p>"""
+        ))
+        self.hgQueueCommitAct.triggered[()].connect(self.__hgQueueCommit)
+        self.actions.append(self.hgQueueCommitAct)
+        
         self.hgQueueNewAct = E5Action(self.trUtf8('New Patch'),
                 self.trUtf8('New Patch...'),
                 0, 0, self, 'mercurial_queues_new')
@@ -169,6 +197,19 @@
         self.hgQueueFoldAct.triggered[()].connect(self.__hgQueueFoldUnappliedPatches)
         self.actions.append(self.hgQueueFoldAct)
         
+        self.hgQueueStatusAct = E5Action(self.trUtf8('Show Status'),
+                self.trUtf8('Show &Status...'),
+                0, 0, self, 'mercurial_queues_status')
+        self.hgQueueStatusAct.setStatusTip(self.trUtf8(
+            'Show the status of the queue repository'
+        ))
+        self.hgQueueStatusAct.setWhatsThis(self.trUtf8(
+            """<b>Show Status</b>"""
+            """<p>This shows the status of the queue repository.</p>"""
+        ))
+        self.hgQueueStatusAct.triggered[()].connect(self.__hgQueueStatus)
+        self.actions.append(self.hgQueueStatusAct)
+        
         self.__initPushPopActions()
         self.__initPushPopForceActions()
         self.__initGuardsActions()
@@ -624,11 +665,16 @@
         queuesMenu.addSeparator()
         queuesMenu.addAction(self.hgQueueListQueuesAct)
         
+        menu.addAction(self.hgQueueInitAct)
+        menu.addAction(self.hgQueueCommitAct)
+        menu.addSeparator()
         menu.addAction(self.hgQueueNewAct)
         menu.addAction(self.hgQueueRefreshAct)
         menu.addAction(self.hgQueueRefreshMessageAct)
         menu.addAction(self.hgQueueFinishAct)
         menu.addSeparator()
+        menu.addAction(self.hgQueueStatusAct)
+        menu.addSeparator()
         menu.addAction(self.hgQueueDiffAct)
         menu.addAction(self.hgQueueHeaderAct)
         menu.addSeparator()
@@ -953,3 +999,23 @@
         """
         self.vcs.getExtensionObject("mq")\
             .hgQueueListQueues(self.project.getProjectPath())
+    
+    def __hgQueueInit(self):
+        """
+        Private slot to initialize a new queue repository.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueInit(self.project.getProjectPath())
+    
+    def __hgQueueCommit(self):
+        """
+        Private slot to commit changes in the queue repository.
+        """
+        self.vcs.vcsCommit(self.project.getProjectPath(), "", mq=True)
+    
+    def __hgQueueStatus(self):
+        """
+        Private slot to show the status of the queue repository.
+        """
+        self.vcs.getExtensionObject("mq")\
+            .hgQueueStatus(self.project.getProjectPath())
--- a/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/QueuesExtension/queues.py	Mon Aug 12 22:21:53 2013 +0200
@@ -57,6 +57,7 @@
         self.queuesListAllGuardsDialog = None
         self.queuesDefineGuardsDialog = None
         self.queuesListQueuesDialog = None
+        self.queueStatusDialog = None
     
     def shutdown(self):
         """
@@ -76,6 +77,8 @@
             self.queuesDefineGuardsDialog.close()
         if self.queuesListQueuesDialog is not None:
             self.queuesListQueuesDialog.close()
+        if self.queueStatusDialog is not None:
+            self.queueStatusDialog.close()
     
     def __getPatchesList(self, repodir, listType, withSummary=False):
         """
@@ -898,3 +901,37 @@
             self.trUtf8("Available Queues"),
             False, repodir, self.vcs)
         self.queuesListQueuesDialog.show()
+    
+    def hgQueueInit(self, name):
+        """
+        Public method to initialize a new queue repository.
+        
+        @param name directory name (string)
+        """
+        # find the root of the repo
+        repodir = self.vcs.splitPath(name)[0]
+        while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
+            repodir = os.path.dirname(repodir)
+            if os.path.splitdrive(repodir)[1] == os.sep:
+                return
+        
+        args = []
+        args.append('init')
+        args.append('--mq')
+        args.append(repodir)
+        # init is not possible with the command server
+        dia = HgDialog(self.trUtf8('Initializing new queue repository'), self.vcs)
+        res = dia.startProcess(args)
+        if res:
+            dia.exec_()
+    
+    def hgQueueStatus(self, name):
+        """
+        Public method used to view the status of a queue repository.
+        
+        @param name directory name (string)
+        """
+        from ..HgStatusDialog import HgStatusDialog
+        self.queueStatusDialog = HgStatusDialog(self.vcs, mq=True)
+        self.queueStatusDialog.show()
+        self.queueStatusDialog.start(name)
--- a/Plugins/VcsPlugins/vcsMercurial/hg.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/hg.py	Mon Aug 12 22:21:53 2013 +0200
@@ -97,7 +97,9 @@
         self.log = None
         self.logBrowser = None
         self.diff = None
+        self.sbsDiff = None
         self.status = None
+        self.summary = None
         self.tagbranchList = None
         self.annotate = None
         self.repoEditor = None
@@ -161,8 +163,12 @@
             self.logBrowser.close()
         if self.diff is not None:
             self.diff.close()
+        if self.sbsDiff is not None:
+            self.sbsDiff.close()
         if self.status is not None:
             self.status.close()
+        if self.summary is not None:
+            self.summary.close()
         if self.tagbranchList is not None:
             self.tagbranchList.close()
         if self.annotate is not None:
@@ -368,7 +374,7 @@
             os.remove(os.path.join(projectDir, '.hgignore'))
         return status
     
-    def vcsCommit(self, name, message, noDialog=False, closeBranch=False):
+    def vcsCommit(self, name, message, noDialog=False, closeBranch=False, mq=False):
         """
         Public method used to make the change of a file/directory permanent in the
         Mercurial repository.
@@ -377,14 +383,19 @@
         @param message message for this operation (string)
         @param noDialog flag indicating quiet operations
         @keyparam closeBranch flag indicating a close branch commit (boolean)
+        @keyparam mq flag indicating a queue commit (boolean)
         """
         msg = message
         
+        if mq:
+            # ensure dialog is shown for a queue commit
+            noDialog = False
+        
         if not noDialog and not msg:
             # call CommitDialog and get message from there
             if self.__commitDialog is None:
                 from .HgCommitDialog import HgCommitDialog
-                self.__commitDialog = HgCommitDialog(self, self.__ui)
+                self.__commitDialog = HgCommitDialog(self, mq, self.__ui)
                 self.__commitDialog.accepted.connect(self.__vcsCommit_Step2)
             self.__commitDialog.show()
             self.__commitDialog.raise_()
@@ -394,6 +405,7 @@
         self.__commitData["msg"] = msg
         self.__commitData["noDialog"] = noDialog
         self.__commitData["closeBranch"] = closeBranch
+        self.__commitData["mq"] = mq
         
         if noDialog:
             self.__vcsCommit_Step2()
@@ -406,6 +418,7 @@
         msg = self.__commitData["msg"]
         noDialog = self.__commitData["noDialog"]
         closeBranch = self.__commitData["closeBranch"]
+        mq = self.__commitData["mq"]
         
         if not noDialog:
             # check, if there are unsaved changes, that should be committed
@@ -442,7 +455,6 @@
             msg = self.__commitDialog.logMessage()
             amend = self.__commitDialog.amend()
             commitSubrepositories = self.__commitDialog.commitSubrepositories()
-##            self.__commitDialog.accepted.disconnect(self.__vcsCommit_Step2)
             self.__commitDialog.deleteLater()
             self.__commitDialog = None
         else:
@@ -457,12 +469,15 @@
         self.addArguments(args, self.options['global'])
         self.addArguments(args, self.options['commit'])
         args.append("-v")
-        if closeBranch:
-            args.append("--close-branch")
-        if amend:
-            args.append("--amend")
-        if commitSubrepositories:
-            args.append("--subrepos")
+        if mq:
+            args.append("--mq")
+        else:
+            if closeBranch:
+                args.append("--close-branch")
+            if amend:
+                args.append("--amend")
+            if commitSubrepositories:
+                args.append("--subrepos")
         if msg:
             args.append("--message")
             args.append(msg)
@@ -753,6 +768,7 @@
         @param name file/directory name to show the log of (string)
         """
         dname, fname = self.splitPath(name)
+        isFile = os.path.isfile(name)
         
         # find the root of the repo
         repodir = dname
@@ -778,7 +794,7 @@
         if dlg.exec_() == QDialog.Accepted:
             revs, noEntries = dlg.getRevisions()
             from .HgLogDialog import HgLogDialog
-            self.log = HgLogDialog(self)
+            self.log = HgLogDialog(self, isFile=isFile)
             self.log.show()
             self.log.start(name, noEntries=noEntries, revisions=revs)
     
@@ -825,6 +841,18 @@
         self.status.show()
         self.status.start(name)
     
+    def hgSummary(self, mq=False):
+        """
+        Public method used to show some summary information of the
+        working directory state.
+        
+        @param mq flag indicating to show the queue status as well (boolean)
+        """
+        from .HgSummaryDialog import HgSummaryDialog
+        self.summary = HgSummaryDialog(self)
+        self.summary.show()
+        self.summary.start(self.__projectHelper.getProject().getProjectPath(), mq=mq)
+    
     def vcsTag(self, name):
         """
         Public method used to set the tag in the Mercurial repository.
@@ -1254,8 +1282,6 @@
         @param ppath local path to get the repository infos (string)
         @return string with ready formated info for display (string)
         """
-        info = []
-        
         args = []
         args.append('parents')
         args.append('--template')
@@ -1276,13 +1302,14 @@
         else:
             output, error = self.__client.runcommand(args)
         
+        infoBlock = []
         if output:
             index = 0
             for line in output.splitlines():
                 index += 1
                 changeset, tags, author, date, branches, bookmarks = line.split("@@@")
                 cdate, ctime = date.split()[:2]
-                info.append("""<p><table>""")
+                info = []
                 info.append(QApplication.translate("mercurial",
                     """<tr><td><b>Parent #{0}</b></td><td></td></tr>\n"""
                     """<tr><td><b>Changeset</b></td><td>{1}</td></tr>""")\
@@ -1304,7 +1331,11 @@
                     """<tr><td><b>Committed date</b></td><td>{1}</td></tr>\n"""
                     """<tr><td><b>Committed time</b></td><td>{2}</td></tr>""")\
                     .format(author, cdate, ctime))
-                info.append("""</table></p>""")
+                infoBlock.append("\n".join(info))
+        if infoBlock:
+            infoStr = """<tr></tr>{0}""".format("<tr></tr>".join(infoBlock))
+        else:
+            infoStr = ""
         
         url = ""
         args = []
@@ -1335,9 +1366,9 @@
             """<tr><td><b>Mercurial V.</b></td><td>{0}</td></tr>\n"""
             """<tr></tr>\n"""
             """<tr><td><b>URL</b></td><td>{1}</td></tr>\n"""
+            """{2}"""
             """</table></p>\n"""
-            """{2}"""
-            ).format(self.versionStr, url, "\n".join(info))
+            ).format(self.versionStr, url, infoStr)
 
     ############################################################################
     ## Private Mercurial specific methods are below.
@@ -1605,15 +1636,137 @@
             self.diff.show()
             self.diff.start(name, revisions)
     
-    def hgLogBrowser(self, path):
+    def __hgGetFileForRevision(self, name, rev=""):
+        """
+        Private method to get a file for a specific revision from the repository.
+        
+        @param name file name to get from the repository (string)
+        @keyparam rev revision to retrieve (string)
+        @return contents of the file (string) and an error message (string)
+        """
+        args = []
+        args.append("cat")
+        if rev:
+            args.append("--rev")
+            args.append(rev)
+        args.append(name)
+        
+        if self.__client is None:
+            output = ""
+            error = ""
+            
+            # find the root of the repo
+            repodir = self.splitPath(name)[0]
+            while not os.path.isdir(os.path.join(repodir, self.adminDir)):
+                repodir = os.path.dirname(repodir)
+                if os.path.splitdrive(repodir)[1] == os.sep:
+                    return
+            
+            process = QProcess()
+            process.setWorkingDirectory(repodir)
+            process.start('hg', args)
+            procStarted = process.waitForStarted(5000)
+            if procStarted:
+                finished = process.waitForFinished(30000)
+                if finished:
+                    if process.exitCode() == 0:
+                        output = str(process.readAllStandardOutput(),
+                            Preferences.getSystem("IOEncoding"), 'replace')
+                    else:
+                        error = str(process.readAllStandardError(),
+                            Preferences.getSystem("IOEncoding"), 'replace')
+                else:
+                    error = self.trUtf8("The hg process did not finish within 30s.")
+            else:
+                error = self.trUtf8('The process {0} could not be started. '
+                    'Ensure, that it is in the search path.').format('hg')
+        else:
+            output, error = self.__client.runcommand(args)
+        
+        return output, error
+    
+    def hgSbsDiff(self, name, extended=False, revisions=None):
+        """
+        Public method used to view the difference of a file to the Mercurial repository
+        side-by-side.
+        
+        @param name file name to be diffed (string)
+        @keyparam extended flag indicating the extended variant (boolean)
+        @keyparam revisions tuple of two revisions (tuple of strings)
+        """
+        if isinstance(name, list):
+            raise ValueError("Wrong parameter type")
+        
+        if extended:
+            # find the root of the repo
+            repodir = self.splitPath(name)[0]
+            while not os.path.isdir(os.path.join(repodir, self.adminDir)):
+                repodir = os.path.dirname(repodir)
+                if os.path.splitdrive(repodir)[1] == os.sep:
+                    return
+            
+            if self.isExtensionActive("bookmarks"):
+                bookmarksList = \
+                    self.getExtensionObject("bookmarks").hgGetBookmarksList(repodir)
+            else:
+                bookmarksList = None
+            
+            from .HgRevisionsSelectionDialog import HgRevisionsSelectionDialog
+            dlg = HgRevisionsSelectionDialog(self.hgGetTagsList(repodir),
+                                             self.hgGetBranchesList(repodir),
+                                             bookmarksList)
+            if dlg.exec_() == QDialog.Accepted:
+                rev1, rev2 = dlg.getRevisions()
+        elif revisions:
+            rev1, rev2 = revisions[0], revisions[1]
+        else:
+            rev1, rev2 = "", ""
+        
+        output1, error = self.__hgGetFileForRevision(name, rev=rev1)
+        if error:
+            E5MessageBox.critical(self.__ui,
+                self.trUtf8("Mercurial Side-by-Side Difference"),
+                error)
+            return
+        name1 = "{0} (rev. {1})".format(name, rev1 and rev1 or ".")
+        
+        if rev2:
+            output2, error = self.__hgGetFileForRevision(name, rev=rev2)
+            if error:
+                E5MessageBox.critical(self.__ui,
+                    self.trUtf8("Mercurial Side-by-Side Difference"),
+                    error)
+                return
+            name2 = "{0} (rev. {1})".format(name, rev2)
+        else:
+            try:
+                f1 = open(name, "r", encoding="utf-8")
+                output2 = f1.read()
+                f1.close()
+                name2 = name
+            except IOError:
+                E5MessageBox.critical(self.__ui,
+                    self.trUtf8("Mercurial Side-by-Side Difference"),
+                    self.trUtf8("""<p>The file <b>{0}</b> could not be read.</p>""")
+                        .format(name))
+                return
+        
+        if self.sbsDiff is None:
+            from UI.CompareDialog import CompareDialog
+            self.sbsDiff = CompareDialog()
+        self.sbsDiff.show()
+        self.sbsDiff.compare(output1, output2, name1, name2)
+    
+    def hgLogBrowser(self, path, isFile=False):
         """
         Public method used to browse the log of a file/directory from the
         Mercurial repository.
         
         @param path file/directory name to show the log of (string)
+        @keyparam isFile flag indicating log for a file is to be shown (boolean)
         """
         from .HgLogBrowserDialog import HgLogBrowserDialog
-        self.logBrowser = HgLogBrowserDialog(self)
+        self.logBrowser = HgLogBrowserDialog(self, isFile=isFile)
         self.logBrowser.show()
         self.logBrowser.start(path)
     
@@ -2716,6 +2869,39 @@
             self.checkVCSStatus()
         return res
     
+    def hgArchive(self):
+        """
+        Public method to create an unversioned archive from the repository.
+        """
+        # find the root of the repo
+        repodir = self.__projectHelper.getProject().getProjectPath()
+        while not os.path.isdir(os.path.join(repodir, self.adminDir)):
+            repodir = os.path.dirname(repodir)
+            if os.path.splitdrive(repodir)[1] == os.sep:
+                return
+        
+        from .HgArchiveDialog import HgArchiveDialog
+        dlg = HgArchiveDialog(self)
+        if dlg.exec_() == QDialog.Accepted:
+            archive, type_, prefix, subrepos = dlg.getData()
+            
+            args = []
+            args.append("archive")
+            if type_:
+                args.append("--type")
+                args.append(type_)
+            if prefix:
+                args.append("--prefix")
+                args.append(prefix)
+            if subrepos:
+                args.append("--subrepos")
+            args.append(archive)
+            
+            dia = HgDialog(self.trUtf8("Create Unversioned Archive"), self)
+            res = dia.startProcess(args, repodir)
+            if res:
+                dia.exec_()
+    
     ############################################################################
     ## Methods to deal with subrepositories are below.
     ############################################################################
--- a/Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/ProjectBrowserHelper.py	Mon Aug 12 22:21:53 2013 +0200
@@ -259,10 +259,17 @@
         act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"),
             self.trUtf8('Show difference'), self._VCSDiff)
         self.vcsMenuActions.append(act)
+        act = menu.addAction(UI.PixmapCache.getIcon("vcsSbsDiff.png"),
+            self.trUtf8('Show difference side-by-side'), self.__SVNSbsDiff)
+        self.vcsMenuActions.append(act)
         act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"),
             self.trUtf8('Show difference (extended)'),
             self.__SVNExtendedDiff)
         self.vcsMenuActions.append(act)
+        act = menu.addAction(UI.PixmapCache.getIcon("vcsSbsDiff.png"),
+            self.trUtf8('Show difference side-by-side (extended)'),
+            self.__SVNSbsExtendedDiff)
+        self.vcsMenuActions.append(act)
         act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"),
             self.trUtf8('Show difference (URLs)'),
             self.__SVNUrlDiff)
@@ -769,6 +776,24 @@
                 names.append(itm.dirName())
         self.vcs.svnUrlDiff(names)
         
+    def __SVNSbsDiff(self):
+        """
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side.
+        """
+        itm = self.browser.currentItem()
+        fn = itm.fileName()
+        self.vcs.svnSbsDiff(fn)
+    
+    def __SVNSbsExtendedDiff(self):
+        """
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side allowing the selection of revisions to compare.
+        """
+        itm = self.browser.currentItem()
+        fn = itm.fileName()
+        self.vcs.svnSbsDiff(fn, extended=True)
+    
     def __SVNLogBrowser(self):
         """
         Private slot called by the context menu to show the log browser for a file.
@@ -776,9 +801,11 @@
         itm = self.browser.currentItem()
         try:
             fn = itm.fileName()
+            isFile = True
         except AttributeError:
             fn = itm.dirName()
-        self.vcs.svnLogBrowser(fn)
+            isFile = False
+        self.vcs.svnLogBrowser(fn, isFile=isFile)
         
     def __SVNBlame(self):
         """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -29,11 +29,12 @@
     """
     Class implementing a dialog to browse the log history.
     """
-    def __init__(self, vcs, parent=None):
+    def __init__(self, vcs, isFile=False, parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
+        @param isFile flag indicating log for a file is to be shown (boolean)
         @param parent parent widget (QWidget)
         """
         super(SvnLogBrowserDialog, self).__init__(parent)
@@ -46,6 +47,8 @@
         self.filesTree.headerItem().setText(self.filesTree.columnCount(), "")
         self.filesTree.header().setSortIndicator(0, Qt.AscendingOrder)
         
+        self.sbsCheckBox.setEnabled(isFile)
+        
         self.vcs = vcs
         
         self.__maxDate = QDate()
@@ -318,13 +321,16 @@
         @param rev2 second revision number (integer)
         @param peg_rev revision number to use as a reference (integer)
         """
-        if self.diff is None:
-            from .SvnDiffDialog import SvnDiffDialog
-            self.diff = SvnDiffDialog(self.vcs)
-        self.diff.show()
-        self.diff.raise_()
-        QApplication.processEvents()
-        self.diff.start(self.filename, [rev1, rev2], pegRev=peg_rev)
+        if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked():
+            self.vcs.svnSbsDiff(self.filename, revisions=(str(rev1), str(rev2)))
+        else:
+            if self.diff is None:
+                from .SvnDiffDialog import SvnDiffDialog
+                self.diff = SvnDiffDialog(self.vcs)
+            self.diff.show()
+            self.diff.raise_()
+            QApplication.processEvents()
+            self.diff.start(self.filename, [rev1, rev2], pegRev=peg_rev)
     
     def on_buttonBox_clicked(self, button):
         """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -16,7 +16,7 @@
   <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QVBoxLayout">
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <layout class="QHBoxLayout">
      <item>
@@ -191,8 +191,8 @@
     </widget>
    </item>
    <item>
-    <layout class="QHBoxLayout">
-     <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
       <widget class="QPushButton" name="nextButton">
        <property name="toolTip">
         <string>Press to get the next bunch of log entries</string>
@@ -202,7 +202,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="1">
       <widget class="QSpinBox" name="limitSpinBox">
        <property name="toolTip">
         <string>Enter the limit of entries to fetch</string>
@@ -217,11 +217,11 @@
         <number>10000</number>
        </property>
        <property name="value">
-        <number>100</number>
+        <number>20</number>
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="2">
       <widget class="QCheckBox" name="stopCheckBox">
        <property name="toolTip">
         <string>Select to stop listing log messages at a copy or move</string>
@@ -231,14 +231,14 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="3" rowspan="2">
       <widget class="Line" name="line">
        <property name="orientation">
         <enum>Qt::Vertical</enum>
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="4">
       <widget class="QPushButton" name="diffPreviousButton">
        <property name="toolTip">
         <string>Press to generate a diff to the previous revision</string>
@@ -248,7 +248,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="5">
       <widget class="QPushButton" name="diffRevisionsButton">
        <property name="toolTip">
         <string>Press to compare two revisions</string>
@@ -258,19 +258,29 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="6">
       <spacer>
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
-         <width>91</width>
+         <width>38</width>
          <height>29</height>
         </size>
        </property>
       </spacer>
      </item>
+     <item row="1" column="4" colspan="3">
+      <widget class="QCheckBox" name="sbsCheckBox">
+       <property name="toolTip">
+        <string>Select to show differences side-by-side</string>
+       </property>
+       <property name="text">
+        <string>Show differences side-by-side</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>
@@ -305,6 +315,7 @@
   <tabstop>stopCheckBox</tabstop>
   <tabstop>diffPreviousButton</tabstop>
   <tabstop>diffRevisionsButton</tabstop>
+  <tabstop>sbsCheckBox</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
  <resources/>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -31,11 +31,12 @@
     The dialog is nonmodal. Clicking a link in the upper text pane shows
     a diff of the versions.
     """
-    def __init__(self, vcs, parent=None):
+    def __init__(self, vcs, isFile=False, parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
+        @param isFile flag indicating log for a file is to be shown (boolean)
         @param parent parent widget (QWidget)
         """
         super(SvnLogDialog, self).__init__(parent)
@@ -61,6 +62,8 @@
         self.revString = self.trUtf8('revision')
         self.diff = None
         
+        self.sbsCheckBox.setEnabled(isFile)
+        
         self.client = self.vcs.getClient()
         self.client.callback_cancel = \
             self._clientCancelCallback
@@ -228,11 +231,14 @@
             return
         self.contents.scrollToAnchor(ver)
         
-        if self.diff is None:
-            from .SvnDiffDialog import SvnDiffDialog
-            self.diff = SvnDiffDialog(self.vcs)
-        self.diff.show()
-        self.diff.start(filename, [v1, v2], pegRev=self.__pegRev)
+        if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked():
+            self.vcs.svnSbsDiff(filename, revisions=(v1, v2))
+        else:
+            if self.diff is None:
+                from .SvnDiffDialog import SvnDiffDialog
+                self.diff = SvnDiffDialog(self.vcs)
+            self.diff.show()
+            self.diff.start(filename, [v1, v2], pegRev=self.__pegRev)
         
     def __showError(self, msg):
         """
--- a/Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnLogDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -13,7 +13,7 @@
   <property name="windowTitle">
    <string>Subversion Log</string>
   </property>
-  <layout class="QVBoxLayout">
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QGroupBox" name="contentsGroup">
      <property name="sizePolicy">
@@ -37,6 +37,16 @@
     </widget>
    </item>
    <item>
+    <widget class="QCheckBox" name="sbsCheckBox">
+     <property name="toolTip">
+      <string>Select to show differences side-by-side</string>
+     </property>
+     <property name="text">
+      <string>Show differences side-by-side</string>
+     </property>
+    </widget>
+   </item>
+   <item>
     <widget class="QGroupBox" name="errorGroup">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
@@ -78,6 +88,7 @@
  </widget>
  <tabstops>
   <tabstop>contents</tabstop>
+  <tabstop>sbsCheckBox</tabstop>
   <tabstop>errors</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnRevisionSelectionDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -1,137 +1,141 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>SvnRevisionSelectionDialog</class>
- <widget class="QDialog" name="SvnRevisionSelectionDialog" >
-  <property name="geometry" >
+ <widget class="QDialog" name="SvnRevisionSelectionDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>339</width>
+    <width>399</width>
     <height>519</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Subversion Diff</string>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QVBoxLayout" >
+  <layout class="QVBoxLayout">
    <item>
-    <widget class="QGroupBox" name="rev1GroupBox" >
-     <property name="title" >
+    <widget class="QGroupBox" name="rev1GroupBox">
+     <property name="title">
       <string>Revision &amp;1</string>
      </property>
-     <layout class="QGridLayout" >
-      <item row="6" column="0" >
-       <widget class="QRadioButton" name="prev1Button" >
-        <property name="toolTip" >
+     <layout class="QGridLayout">
+      <item row="6" column="0">
+       <widget class="QRadioButton" name="prev1Button">
+        <property name="toolTip">
          <string>Select revision before last commit</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>PREV</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="0" >
-       <widget class="QRadioButton" name="committed1Button" >
-        <property name="toolTip" >
+      <item row="5" column="0">
+       <widget class="QRadioButton" name="committed1Button">
+        <property name="toolTip">
          <string>Select last committed revision</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>COMMITTED</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="0" >
-       <widget class="QRadioButton" name="base1Button" >
-        <property name="toolTip" >
+      <item row="4" column="0">
+       <widget class="QRadioButton" name="base1Button">
+        <property name="toolTip">
          <string>Select base revision</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>BASE</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QRadioButton" name="head1Button" >
-        <property name="toolTip" >
+      <item row="2" column="0">
+       <widget class="QRadioButton" name="head1Button">
+        <property name="toolTip">
          <string>Select head revision of repository</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>HEAD</string>
         </property>
-       </widget>
-      </item>
-      <item row="3" column="0" >
-       <widget class="QRadioButton" name="working1Button" >
-        <property name="toolTip" >
-         <string>Select working revision</string>
-        </property>
-        <property name="text" >
-         <string>WORKING</string>
-        </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QSpinBox" name="number1SpinBox" >
-        <property name="enabled" >
+      <item row="3" column="0">
+       <widget class="QRadioButton" name="working1Button">
+        <property name="toolTip">
+         <string>Select working revision</string>
+        </property>
+        <property name="text">
+         <string>WORKING</string>
+        </property>
+        <property name="checked">
          <bool>false</bool>
         </property>
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="number1SpinBox">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter a revision number</string>
         </property>
-        <property name="alignment" >
+        <property name="alignment">
          <set>Qt::AlignRight</set>
         </property>
-        <property name="minimum" >
+        <property name="minimum">
          <number>1</number>
         </property>
-        <property name="maximum" >
+        <property name="maximum">
          <number>999999999</number>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QTimeEdit" name="time1Edit" >
-        <property name="enabled" >
+      <item row="1" column="2">
+       <widget class="QTimeEdit" name="time1Edit">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter time of revision</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDateEdit" name="date1Edit" >
-        <property name="enabled" >
+      <item row="1" column="1">
+       <widget class="QDateEdit" name="date1Edit">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter date of revision</string>
         </property>
-        <property name="displayFormat" >
+        <property name="displayFormat">
          <string>yyyy-MM-dd</string>
         </property>
-        <property name="calendarPopup" >
+        <property name="calendarPopup">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
+      <item row="0" column="2">
        <spacer>
-        <property name="orientation" >
+        <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
-        <property name="sizeHint" stdset="0" >
+        <property name="sizeHint" stdset="0">
          <size>
           <width>40</width>
           <height>20</height>
@@ -139,22 +143,22 @@
         </property>
        </spacer>
       </item>
-      <item row="0" column="0" >
-       <widget class="QRadioButton" name="number1Button" >
-        <property name="toolTip" >
+      <item row="0" column="0">
+       <widget class="QRadioButton" name="number1Button">
+        <property name="toolTip">
          <string>Select to specify a revision by number</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Number</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QRadioButton" name="date1Button" >
-        <property name="toolTip" >
+      <item row="1" column="0">
+       <widget class="QRadioButton" name="date1Button">
+        <property name="toolTip">
          <string>Select to specify a revision by date and time</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Date</string>
         </property>
        </widget>
@@ -163,121 +167,124 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="rev2GroupBox" >
-     <property name="title" >
+    <widget class="QGroupBox" name="rev2GroupBox">
+     <property name="title">
       <string>Revision &amp;2</string>
      </property>
-     <layout class="QGridLayout" >
-      <item row="6" column="0" >
-       <widget class="QRadioButton" name="prev2Button" >
-        <property name="toolTip" >
+     <layout class="QGridLayout">
+      <item row="6" column="0">
+       <widget class="QRadioButton" name="prev2Button">
+        <property name="toolTip">
          <string>Select revision before last commit</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>PREV</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="0" >
-       <widget class="QRadioButton" name="committed2Button" >
-        <property name="toolTip" >
+      <item row="5" column="0">
+       <widget class="QRadioButton" name="committed2Button">
+        <property name="toolTip">
          <string>Select last committed revision</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>COMMITTED</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="0" >
-       <widget class="QRadioButton" name="base2Button" >
-        <property name="toolTip" >
+      <item row="4" column="0">
+       <widget class="QRadioButton" name="base2Button">
+        <property name="toolTip">
          <string>Select base revision</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>BASE</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QRadioButton" name="head2Button" >
-        <property name="toolTip" >
+      <item row="2" column="0">
+       <widget class="QRadioButton" name="head2Button">
+        <property name="toolTip">
          <string>Select head revision of repository</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>HEAD</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QRadioButton" name="working2Button">
+        <property name="toolTip">
+         <string>Select working revision</string>
+        </property>
+        <property name="text">
+         <string>WORKING</string>
+        </property>
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="3" column="0" >
-       <widget class="QRadioButton" name="working2Button" >
-        <property name="toolTip" >
-         <string>Select working revision</string>
-        </property>
-        <property name="text" >
-         <string>WORKING</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <widget class="QSpinBox" name="number2SpinBox" >
-        <property name="enabled" >
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="number2SpinBox">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter a revision number</string>
         </property>
-        <property name="alignment" >
+        <property name="alignment">
          <set>Qt::AlignRight</set>
         </property>
-        <property name="minimum" >
+        <property name="minimum">
          <number>1</number>
         </property>
-        <property name="maximum" >
+        <property name="maximum">
          <number>999999999</number>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QTimeEdit" name="time2Edit" >
-        <property name="enabled" >
+      <item row="1" column="2">
+       <widget class="QTimeEdit" name="time2Edit">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter time of revision</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDateEdit" name="date2Edit" >
-        <property name="enabled" >
+      <item row="1" column="1">
+       <widget class="QDateEdit" name="date2Edit">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter date of revision</string>
         </property>
-        <property name="displayFormat" >
+        <property name="displayFormat">
          <string>yyyy-MM-dd</string>
         </property>
-        <property name="calendarPopup" >
+        <property name="calendarPopup">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
+      <item row="0" column="2">
        <spacer>
-        <property name="orientation" >
+        <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
-        <property name="sizeHint" stdset="0" >
+        <property name="sizeHint" stdset="0">
          <size>
           <width>40</width>
           <height>20</height>
@@ -285,22 +292,22 @@
         </property>
        </spacer>
       </item>
-      <item row="0" column="0" >
-       <widget class="QRadioButton" name="number2Button" >
-        <property name="toolTip" >
+      <item row="0" column="0">
+       <widget class="QRadioButton" name="number2Button">
+        <property name="toolTip">
          <string>Select to specify a revision by number</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Number</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QRadioButton" name="date2Button" >
-        <property name="toolTip" >
+      <item row="1" column="0">
+       <widget class="QRadioButton" name="date2Button">
+        <property name="toolTip">
          <string>Select to specify a revision by date and time</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Date</string>
         </property>
        </widget>
@@ -309,18 +316,18 @@
     </widget>
    </item>
    <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
+     <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
+ <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>number1Button</tabstop>
@@ -353,11 +360,11 @@
    <receiver>SvnRevisionSelectionDialog</receiver>
    <slot>accept()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>27</x>
      <y>512</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>21</x>
      <y>143</y>
     </hint>
@@ -369,11 +376,11 @@
    <receiver>SvnRevisionSelectionDialog</receiver>
    <slot>reject()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>79</x>
      <y>512</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>73</x>
      <y>140</y>
     </hint>
@@ -385,11 +392,11 @@
    <receiver>number1SpinBox</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>62</x>
      <y>45</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>148</x>
      <y>43</y>
     </hint>
@@ -401,11 +408,11 @@
    <receiver>date1Edit</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>70</x>
      <y>77</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>136</x>
      <y>74</y>
     </hint>
@@ -417,11 +424,11 @@
    <receiver>time1Edit</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>16</x>
      <y>74</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>257</x>
      <y>74</y>
     </hint>
@@ -433,11 +440,11 @@
    <receiver>number2SpinBox</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>32</x>
      <y>281</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>128</x>
      <y>283</y>
     </hint>
@@ -449,11 +456,11 @@
    <receiver>date2Edit</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>49</x>
      <y>310</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>134</x>
      <y>310</y>
     </hint>
@@ -465,11 +472,11 @@
    <receiver>time2Edit</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>55</x>
      <y>322</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>264</x>
      <y>320</y>
     </hint>
--- a/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -91,6 +91,8 @@
         self.menuactions.append(self.menu.addAction(
             self.trUtf8("Show differences"), self.__diff))
         self.menuactions.append(self.menu.addAction(
+            self.trUtf8("Show differences side-by-side"), self.__sbsDiff))
+        self.menuactions.append(self.menu.addAction(
             self.trUtf8("Revert changes"), self.__revert))
         self.menuactions.append(self.menu.addAction(
             self.trUtf8("Restore missing"), self.__restoreMissing))
@@ -266,6 +268,7 @@
         self.addButton.setEnabled(False)
         self.commitButton.setEnabled(False)
         self.diffButton.setEnabled(False)
+        self.sbsDiffButton.setEnabled(False)
         self.revertButton.setEnabled(False)
         self.restoreButton.setEnabled(False)
 
@@ -486,6 +489,7 @@
 
         self.addButton.setEnabled(unversioned)
         self.diffButton.setEnabled(modified)
+        self.sbsDiffButton.setEnabled(modified == 1)
         self.revertButton.setEnabled(modified)
         self.restoreButton.setEnabled(missing)
     
@@ -552,6 +556,13 @@
         self.__diff()
     
     @pyqtSlot()
+    def on_sbsDiffButton_clicked(self):
+        """
+        Private slot to handle the press of the Side-by-Side Diff button.
+        """
+        self.__sbsDiff()
+    
+    @pyqtSlot()
     def on_revertButton_clicked(self):
         """
         Private slot to handle the press of the Revert button.
@@ -696,7 +707,28 @@
         self.diff.show()
         QApplication.processEvents()
         self.diff.start(names)
+    
+    def __sbsDiff(self):
+        """
+        Private slot to handle the Side-by-Side Diff context menu entry.
+        """
+        names = [os.path.join(self.dname, itm.text(self.__pathColumn))
+                 for itm in self.__getModifiedItems()]
+        if not names:
+            E5MessageBox.information(self,
+                self.trUtf8("Side-by-Side Diff"),
+                self.trUtf8("""There are no uncommitted changes"""
+                            """ available/selected."""))
+            return
+        elif len(names) > 1:
+            E5MessageBox.information(self,
+                self.trUtf8("Side-by-Side Diff"),
+                self.trUtf8("""Only one file with uncommitted changes"""
+                            """ must be selected."""))
+            return
         
+        self.vcs.svnSbsDiff(names[0])
+    
     def __lock(self):
         """
         Private slot to handle the Lock context menu entry.
--- a/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/SvnStatusDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -185,6 +185,16 @@
       </widget>
      </item>
      <item>
+      <widget class="QPushButton" name="sbsDiffButton">
+       <property name="toolTip">
+        <string>Show differences of the selected entry to the repository in a side-by-side manner</string>
+       </property>
+       <property name="text">
+        <string>Side-b&amp;y-Side Diff</string>
+       </property>
+      </widget>
+     </item>
+     <item>
       <widget class="QPushButton" name="revertButton">
        <property name="toolTip">
         <string>Revert the selected entries to the last revision in the repository</string>
@@ -264,6 +274,7 @@
   <tabstop>commitButton</tabstop>
   <tabstop>addButton</tabstop>
   <tabstop>diffButton</tabstop>
+  <tabstop>sbsDiffButton</tabstop>
   <tabstop>revertButton</tabstop>
   <tabstop>restoreButton</tabstop>
   <tabstop>errors</tabstop>
--- a/Plugins/VcsPlugins/vcsPySvn/subversion.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsPySvn/subversion.py	Mon Aug 12 22:21:53 2013 +0200
@@ -11,12 +11,10 @@
 
 import os
 import shutil
-import urllib.request
 import urllib.parse
-import urllib.error
 import time
 
-from PyQt4.QtCore import QMutexLocker, pyqtSignal, QRegExp
+from PyQt4.QtCore import Qt, QMutexLocker, pyqtSignal, QRegExp, QDateTime
 from PyQt4.QtGui import QLineEdit, QDialog, QInputDialog, QApplication
 
 from E5Gui.E5Application import e5App
@@ -94,6 +92,7 @@
         
         self.log = None
         self.diff = None
+        self.sbsDiff = None
         self.status = None
         self.propList = None
         self.tagbranchList = None
@@ -148,6 +147,8 @@
             self.log.close()
         if self.diff is not None:
             self.diff.close()
+        if self.sbsDiff is not None:
+            self.sbsDiff.close()
         if self.status is not None:
             self.status.close()
         if self.propList is not None:
@@ -929,6 +930,7 @@
         
         @param name file/directory name to show the log of (string)
         """
+        isFile = os.path.isfile(name)
         noEntries, ok = QInputDialog.getInt(
             None,
             self.trUtf8("Subversion Log"),
@@ -936,7 +938,7 @@
             self.getPlugin().getPreferences("LogLimit"), 1, 999999, 1)
         if ok:
             from .SvnLogDialog import SvnLogDialog
-            self.log = SvnLogDialog(self)
+            self.log = SvnLogDialog(self, isFile=isFile)
             self.log.show()
             QApplication.processEvents()
             self.log.start(name, noEntries)
@@ -1997,15 +1999,118 @@
             QApplication.processEvents()
             self.diff.start(name, urls=urls, summary=summary)
         
-    def svnLogBrowser(self, path):
+    def __svnGetFileForRevision(self, name, rev=""):
+        """
+        Private method to get a file for a specific revision from the repository.
+        
+        @param name file name to get from the repository (string)
+        @keyparam rev revision to retrieve (integer or string)
+        @return contents of the file (string) and an error message (string)
+        """
+        output = ""
+        error = ""
+        
+        client = self.getClient()
+        try:
+            if rev:
+                if isinstance(rev, int) or rev.isdecimal():
+                    rev = pysvn.Revision(pysvn.opt_revision_kind.number, int(rev))
+                elif rev.startswith("{"):
+                    dateStr = rev[1:-1]
+                    secs = QDateTime.fromString(dateStr, Qt.ISODate).toTime_t()
+                    rev = pysvn.Revision(pysvn.opt_revision_kind.date, secs)
+                elif rev == "HEAD":
+                    rev = pysvn.Revision(pysvn.opt_revision_kind.head)
+                elif rev == "COMMITTED":
+                    rev = pysvn.Revision(pysvn.opt_revision_kind.committed)
+                elif rev == "BASE":
+                    rev = pysvn.Revision(pysvn.opt_revision_kind.base)
+                elif rev == "WORKING":
+                    rev = pysvn.Revision(pysvn.opt_revision_kind.working)
+                elif rev == "PREV":
+                    rev = pysvn.Revision(pysvn.opt_revision_kind.previous)
+                else:
+                    rev = pysvn.Revision(pysvn.opt_revision_kind.unspecified)
+                output = client.cat(name, revision=rev)
+            else:
+                output = client.cat(name)
+            output = output.decode()
+        except pysvn.ClientError as e:
+            error = str(e)
+        
+        return output, error
+    
+    def svnSbsDiff(self, name, extended=False, revisions=None):
+        """
+        Public method used to view the difference of a file to the Mercurial repository
+        side-by-side.
+        
+        @param name file name to be diffed (string)
+        @keyparam extended flag indicating the extended variant (boolean)
+        @keyparam revisions tuple of two revisions (tuple of strings)
+        """
+        if isinstance(name, list):
+            raise ValueError("Wrong parameter type")
+        
+        if extended:
+            from .SvnRevisionSelectionDialog import SvnRevisionSelectionDialog
+            dlg = SvnRevisionSelectionDialog()
+            if dlg.exec_() == QDialog.Accepted:
+                rev1, rev2 = dlg.getRevisions()
+                if rev1 == "WORKING":
+                    rev1 = ""
+                if rev2 == "WORKING":
+                    rev2 = ""
+        elif revisions:
+            rev1, rev2 = revisions[0], revisions[1]
+        else:
+            rev1, rev2 = "", ""
+        
+        output1, error = self.__svnGetFileForRevision(name, rev=rev1)
+        if error:
+            E5MessageBox.critical(self.__ui,
+                self.trUtf8("Subversion Side-by-Side Difference"),
+                error)
+            return
+        name1 = "{0} (rev. {1})".format(name, rev1 and rev1 or ".")
+        
+        if rev2:
+            output2, error = self.__svnGetFileForRevision(name, rev=rev2)
+            if error:
+                E5MessageBox.critical(self.__ui,
+                    self.trUtf8("Subversion Side-by-Side Difference"),
+                    error)
+                return
+            name2 = "{0} (rev. {1})".format(name, rev2)
+        else:
+            try:
+                f1 = open(name, "r", encoding="utf-8")
+                output2 = f1.read()
+                f1.close()
+                name2 = name
+            except IOError:
+                E5MessageBox.critical(self.__ui,
+                    self.trUtf8("Subversion Side-by-Side Difference"),
+                    self.trUtf8("""<p>The file <b>{0}</b> could not be read.</p>""")
+                        .format(name))
+                return
+        
+        if self.sbsDiff is None:
+            from UI.CompareDialog import CompareDialog
+            self.sbsDiff = CompareDialog()
+        self.sbsDiff.show()
+        self.sbsDiff.compare(output1, output2, name1, name2)
+    
+    def svnLogBrowser(self, path, isFile=False):
         """
         Public method used to browse the log of a file/directory from the
         Subversion repository.
         
         @param path file/directory name to show the log of (string)
+        @param isFile flag indicating log for a file is to be shown (boolean)
         """
         from .SvnLogBrowserDialog import SvnLogBrowserDialog
-        self.logBrowser = SvnLogBrowserDialog(self)
+        self.logBrowser = SvnLogBrowserDialog(self, isFile=isFile)
         self.logBrowser.show()
         QApplication.processEvents()
         self.logBrowser.start(path)
--- a/Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/ProjectBrowserHelper.py	Mon Aug 12 22:21:53 2013 +0200
@@ -254,10 +254,17 @@
         act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"),
             self.trUtf8('Show difference'), self._VCSDiff)
         self.vcsMenuActions.append(act)
+        act = menu.addAction(UI.PixmapCache.getIcon("vcsSbsDiff.png"),
+            self.trUtf8('Show difference side-by-side'), self.__SVNSbsDiff)
+        self.vcsMenuActions.append(act)
         act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"),
             self.trUtf8('Show difference (extended)'),
             self.__SVNExtendedDiff)
         self.vcsMenuActions.append(act)
+        act = menu.addAction(UI.PixmapCache.getIcon("vcsSbsDiff.png"),
+            self.trUtf8('Show difference side-by-side (extended)'),
+            self.__SVNSbsExtendedDiff)
+        self.vcsMenuActions.append(act)
         act = menu.addAction(UI.PixmapCache.getIcon("vcsDiff.png"),
             self.trUtf8('Show difference (URLs)'),
             self.__SVNUrlDiff)
@@ -763,6 +770,24 @@
                 names.append(itm.dirName())
         self.vcs.svnUrlDiff(names)
         
+    def __SVNSbsDiff(self):
+        """
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side.
+        """
+        itm = self.browser.currentItem()
+        fn = itm.fileName()
+        self.vcs.svnSbsDiff(fn)
+    
+    def __SVNSbsExtendedDiff(self):
+        """
+        Private slot called by the context menu to show the difference of a file to
+        the repository side-by-side allowing the selection of revisions to compare.
+        """
+        itm = self.browser.currentItem()
+        fn = itm.fileName()
+        self.vcs.svnSbsDiff(fn, extended=True)
+    
     def __SVNLogBrowser(self):
         """
         Private slot called by the context menu to show the log browser for a file.
@@ -770,9 +795,11 @@
         itm = self.browser.currentItem()
         try:
             fn = itm.fileName()
+            isFile = True
         except AttributeError:
             fn = itm.dirName()
-        self.vcs.svnLogBrowser(fn)
+            isFile = False
+        self.vcs.svnLogBrowser(fn, isFile=isFile)
         
     def __SVNBlame(self):
         """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -30,11 +30,12 @@
     """
     Class implementing a dialog to browse the log history.
     """
-    def __init__(self, vcs, parent=None):
+    def __init__(self, vcs, isFile=False, parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
+        @param isFile flag indicating log for a file is to be shown (boolean)
         @param parent parent widget (QWidget)
         """
         super(SvnLogBrowserDialog, self).__init__(parent)
@@ -46,6 +47,8 @@
         self.filesTree.headerItem().setText(self.filesTree.columnCount(), "")
         self.filesTree.header().setSortIndicator(0, Qt.AscendingOrder)
         
+        self.sbsCheckBox.setEnabled(isFile)
+        
         self.vcs = vcs
         
         self.__maxDate = QDate()
@@ -417,12 +420,15 @@
         @param rev1 first revision number (integer)
         @param rev2 second revision number (integer)
         """
-        if self.diff is None:
-            from .SvnDiffDialog import SvnDiffDialog
-            self.diff = SvnDiffDialog(self.vcs)
-        self.diff.show()
-        self.diff.raise_()
-        self.diff.start(self.filename, [rev1, rev2])
+        if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked():
+            self.vcs.svnSbsDiff(self.filename, revisions=(str(rev1), str(rev2)))
+        else:
+            if self.diff is None:
+                from .SvnDiffDialog import SvnDiffDialog
+                self.diff = SvnDiffDialog(self.vcs)
+            self.diff.show()
+            self.diff.raise_()
+            self.diff.start(self.filename, [rev1, rev2])
     
     def on_buttonBox_clicked(self, button):
         """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogBrowserDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -16,7 +16,7 @@
   <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QVBoxLayout">
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <layout class="QHBoxLayout">
      <item>
@@ -191,8 +191,8 @@
     </widget>
    </item>
    <item>
-    <layout class="QHBoxLayout">
-     <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
       <widget class="QPushButton" name="nextButton">
        <property name="toolTip">
         <string>Press to get the next bunch of log entries</string>
@@ -202,7 +202,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="1">
       <widget class="QSpinBox" name="limitSpinBox">
        <property name="toolTip">
         <string>Enter the limit of entries to fetch</string>
@@ -217,11 +217,11 @@
         <number>10000</number>
        </property>
        <property name="value">
-        <number>100</number>
+        <number>20</number>
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="2">
       <widget class="QCheckBox" name="stopCheckBox">
        <property name="toolTip">
         <string>Select to stop listing log messages at a copy or move</string>
@@ -231,14 +231,14 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="3" rowspan="2">
       <widget class="Line" name="line">
        <property name="orientation">
         <enum>Qt::Vertical</enum>
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="4">
       <widget class="QPushButton" name="diffPreviousButton">
        <property name="toolTip">
         <string>Press to generate a diff to the previous revision</string>
@@ -248,7 +248,7 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="5">
       <widget class="QPushButton" name="diffRevisionsButton">
        <property name="toolTip">
         <string>Press to compare two revisions</string>
@@ -258,19 +258,29 @@
        </property>
       </widget>
      </item>
-     <item>
+     <item row="0" column="6">
       <spacer>
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
        <property name="sizeHint" stdset="0">
         <size>
-         <width>81</width>
-         <height>29</height>
+         <width>39</width>
+         <height>26</height>
         </size>
        </property>
       </spacer>
      </item>
+     <item row="1" column="4" colspan="3">
+      <widget class="QCheckBox" name="sbsCheckBox">
+       <property name="toolTip">
+        <string>Select to show differences side-by-side</string>
+       </property>
+       <property name="text">
+        <string>Show differences side-by-side</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>
@@ -391,6 +401,7 @@
   <tabstop>stopCheckBox</tabstop>
   <tabstop>diffPreviousButton</tabstop>
   <tabstop>diffRevisionsButton</tabstop>
+  <tabstop>sbsCheckBox</tabstop>
   <tabstop>errors</tabstop>
   <tabstop>input</tabstop>
   <tabstop>passwordCheckBox</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -33,11 +33,12 @@
     The dialog is nonmodal. Clicking a link in the upper text pane shows
     a diff of the versions.
     """
-    def __init__(self, vcs, parent=None):
+    def __init__(self, vcs, isFile=False, parent=None):
         """
         Constructor
         
         @param vcs reference to the vcs object
+        @param isFile flag indicating log for a file is to be shown (boolean)
         @param parent parent widget (QWidget)
         """
         super(SvnLogDialog, self).__init__(parent)
@@ -83,6 +84,8 @@
         self.buf = []        # buffer for stdout
         self.diff = None
         
+        self.sbsCheckBox.setEnabled(isFile)
+        
     def closeEvent(self, e):
         """
         Private slot implementing a close event handler.
@@ -272,11 +275,14 @@
             return
         self.contents.scrollToAnchor(ver)
         
-        if self.diff is None:
-            from .SvnDiffDialog import SvnDiffDialog
-            self.diff = SvnDiffDialog(self.vcs)
-        self.diff.show()
-        self.diff.start(filename, [v1, v2])
+        if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked():
+            self.vcs.svnSbsDiff(filename, revisions=(v1, v2))
+        else:
+            if self.diff is None:
+                from .SvnDiffDialog import SvnDiffDialog
+                self.diff = SvnDiffDialog(self.vcs)
+            self.diff.show()
+            self.diff.start(filename, [v1, v2])
         
     def on_passwordCheckBox_toggled(self, isOn):
         """
--- a/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnLogDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -13,7 +13,7 @@
   <property name="windowTitle">
    <string>Subversion Log</string>
   </property>
-  <layout class="QVBoxLayout">
+  <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QGroupBox" name="contentsGroup">
      <property name="sizePolicy">
@@ -37,6 +37,16 @@
     </widget>
    </item>
    <item>
+    <widget class="QCheckBox" name="sbsCheckBox">
+     <property name="toolTip">
+      <string>Select to show differences side-by-side</string>
+     </property>
+     <property name="text">
+      <string>Show differences side-by-side</string>
+     </property>
+    </widget>
+   </item>
+   <item>
     <widget class="QGroupBox" name="errorGroup">
      <property name="sizePolicy">
       <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
@@ -136,6 +146,7 @@
  </widget>
  <tabstops>
   <tabstop>contents</tabstop>
+  <tabstop>sbsCheckBox</tabstop>
   <tabstop>errors</tabstop>
   <tabstop>input</tabstop>
   <tabstop>passwordCheckBox</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnRevisionSelectionDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -1,137 +1,141 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
  <class>SvnRevisionSelectionDialog</class>
- <widget class="QDialog" name="SvnRevisionSelectionDialog" >
-  <property name="geometry" >
+ <widget class="QDialog" name="SvnRevisionSelectionDialog">
+  <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>339</width>
+    <width>399</width>
     <height>519</height>
    </rect>
   </property>
-  <property name="windowTitle" >
+  <property name="windowTitle">
    <string>Subversion Diff</string>
   </property>
-  <property name="sizeGripEnabled" >
+  <property name="sizeGripEnabled">
    <bool>true</bool>
   </property>
-  <layout class="QVBoxLayout" >
+  <layout class="QVBoxLayout">
    <item>
-    <widget class="QGroupBox" name="rev1GroupBox" >
-     <property name="title" >
+    <widget class="QGroupBox" name="rev1GroupBox">
+     <property name="title">
       <string>Revision &amp;1</string>
      </property>
-     <layout class="QGridLayout" >
-      <item row="6" column="0" >
-       <widget class="QRadioButton" name="prev1Button" >
-        <property name="toolTip" >
+     <layout class="QGridLayout">
+      <item row="6" column="0">
+       <widget class="QRadioButton" name="prev1Button">
+        <property name="toolTip">
          <string>Select revision before last commit</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>PREV</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="0" >
-       <widget class="QRadioButton" name="committed1Button" >
-        <property name="toolTip" >
+      <item row="5" column="0">
+       <widget class="QRadioButton" name="committed1Button">
+        <property name="toolTip">
          <string>Select last committed revision</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>COMMITTED</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="0" >
-       <widget class="QRadioButton" name="base1Button" >
-        <property name="toolTip" >
+      <item row="4" column="0">
+       <widget class="QRadioButton" name="base1Button">
+        <property name="toolTip">
          <string>Select base revision</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>BASE</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QRadioButton" name="head1Button" >
-        <property name="toolTip" >
+      <item row="2" column="0">
+       <widget class="QRadioButton" name="head1Button">
+        <property name="toolTip">
          <string>Select head revision of repository</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>HEAD</string>
         </property>
-       </widget>
-      </item>
-      <item row="3" column="0" >
-       <widget class="QRadioButton" name="working1Button" >
-        <property name="toolTip" >
-         <string>Select working revision</string>
-        </property>
-        <property name="text" >
-         <string>WORKING</string>
-        </property>
-        <property name="checked" >
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="1" >
-       <widget class="QSpinBox" name="number1SpinBox" >
-        <property name="enabled" >
+      <item row="3" column="0">
+       <widget class="QRadioButton" name="working1Button">
+        <property name="toolTip">
+         <string>Select working revision</string>
+        </property>
+        <property name="text">
+         <string>WORKING</string>
+        </property>
+        <property name="checked">
          <bool>false</bool>
         </property>
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="number1SpinBox">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter a revision number</string>
         </property>
-        <property name="alignment" >
+        <property name="alignment">
          <set>Qt::AlignRight</set>
         </property>
-        <property name="minimum" >
+        <property name="minimum">
          <number>1</number>
         </property>
-        <property name="maximum" >
+        <property name="maximum">
          <number>999999999</number>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QTimeEdit" name="time1Edit" >
-        <property name="enabled" >
+      <item row="1" column="2">
+       <widget class="QTimeEdit" name="time1Edit">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter time of revision</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDateEdit" name="date1Edit" >
-        <property name="enabled" >
+      <item row="1" column="1">
+       <widget class="QDateEdit" name="date1Edit">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter date of revision</string>
         </property>
-        <property name="displayFormat" >
+        <property name="displayFormat">
          <string>yyyy-MM-dd</string>
         </property>
-        <property name="calendarPopup" >
+        <property name="calendarPopup">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
+      <item row="0" column="2">
        <spacer>
-        <property name="orientation" >
+        <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
-        <property name="sizeHint" stdset="0" >
+        <property name="sizeHint" stdset="0">
          <size>
           <width>40</width>
           <height>20</height>
@@ -139,22 +143,22 @@
         </property>
        </spacer>
       </item>
-      <item row="0" column="0" >
-       <widget class="QRadioButton" name="number1Button" >
-        <property name="toolTip" >
+      <item row="0" column="0">
+       <widget class="QRadioButton" name="number1Button">
+        <property name="toolTip">
          <string>Select to specify a revision by number</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Number</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QRadioButton" name="date1Button" >
-        <property name="toolTip" >
+      <item row="1" column="0">
+       <widget class="QRadioButton" name="date1Button">
+        <property name="toolTip">
          <string>Select to specify a revision by date and time</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Date</string>
         </property>
        </widget>
@@ -163,121 +167,124 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="rev2GroupBox" >
-     <property name="title" >
+    <widget class="QGroupBox" name="rev2GroupBox">
+     <property name="title">
       <string>Revision &amp;2</string>
      </property>
-     <layout class="QGridLayout" >
-      <item row="6" column="0" >
-       <widget class="QRadioButton" name="prev2Button" >
-        <property name="toolTip" >
+     <layout class="QGridLayout">
+      <item row="6" column="0">
+       <widget class="QRadioButton" name="prev2Button">
+        <property name="toolTip">
          <string>Select revision before last commit</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>PREV</string>
         </property>
        </widget>
       </item>
-      <item row="5" column="0" >
-       <widget class="QRadioButton" name="committed2Button" >
-        <property name="toolTip" >
+      <item row="5" column="0">
+       <widget class="QRadioButton" name="committed2Button">
+        <property name="toolTip">
          <string>Select last committed revision</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>COMMITTED</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="0" >
-       <widget class="QRadioButton" name="base2Button" >
-        <property name="toolTip" >
+      <item row="4" column="0">
+       <widget class="QRadioButton" name="base2Button">
+        <property name="toolTip">
          <string>Select base revision</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>BASE</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QRadioButton" name="head2Button" >
-        <property name="toolTip" >
+      <item row="2" column="0">
+       <widget class="QRadioButton" name="head2Button">
+        <property name="toolTip">
          <string>Select head revision of repository</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>HEAD</string>
         </property>
-        <property name="checked" >
+        <property name="checked">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0">
+       <widget class="QRadioButton" name="working2Button">
+        <property name="toolTip">
+         <string>Select working revision</string>
+        </property>
+        <property name="text">
+         <string>WORKING</string>
+        </property>
+        <property name="checked">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="3" column="0" >
-       <widget class="QRadioButton" name="working2Button" >
-        <property name="toolTip" >
-         <string>Select working revision</string>
-        </property>
-        <property name="text" >
-         <string>WORKING</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1" >
-       <widget class="QSpinBox" name="number2SpinBox" >
-        <property name="enabled" >
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="number2SpinBox">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
           <horstretch>0</horstretch>
           <verstretch>0</verstretch>
          </sizepolicy>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter a revision number</string>
         </property>
-        <property name="alignment" >
+        <property name="alignment">
          <set>Qt::AlignRight</set>
         </property>
-        <property name="minimum" >
+        <property name="minimum">
          <number>1</number>
         </property>
-        <property name="maximum" >
+        <property name="maximum">
          <number>999999999</number>
         </property>
        </widget>
       </item>
-      <item row="1" column="2" >
-       <widget class="QTimeEdit" name="time2Edit" >
-        <property name="enabled" >
+      <item row="1" column="2">
+       <widget class="QTimeEdit" name="time2Edit">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter time of revision</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QDateEdit" name="date2Edit" >
-        <property name="enabled" >
+      <item row="1" column="1">
+       <widget class="QDateEdit" name="date2Edit">
+        <property name="enabled">
          <bool>false</bool>
         </property>
-        <property name="toolTip" >
+        <property name="toolTip">
          <string>Enter date of revision</string>
         </property>
-        <property name="displayFormat" >
+        <property name="displayFormat">
          <string>yyyy-MM-dd</string>
         </property>
-        <property name="calendarPopup" >
+        <property name="calendarPopup">
          <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="2" >
+      <item row="0" column="2">
        <spacer>
-        <property name="orientation" >
+        <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
-        <property name="sizeHint" stdset="0" >
+        <property name="sizeHint" stdset="0">
          <size>
           <width>40</width>
           <height>20</height>
@@ -285,22 +292,22 @@
         </property>
        </spacer>
       </item>
-      <item row="0" column="0" >
-       <widget class="QRadioButton" name="number2Button" >
-        <property name="toolTip" >
+      <item row="0" column="0">
+       <widget class="QRadioButton" name="number2Button">
+        <property name="toolTip">
          <string>Select to specify a revision by number</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Number</string>
         </property>
        </widget>
       </item>
-      <item row="1" column="0" >
-       <widget class="QRadioButton" name="date2Button" >
-        <property name="toolTip" >
+      <item row="1" column="0">
+       <widget class="QRadioButton" name="date2Button">
+        <property name="toolTip">
          <string>Select to specify a revision by date and time</string>
         </property>
-        <property name="text" >
+        <property name="text">
          <string>Date</string>
         </property>
        </widget>
@@ -309,18 +316,18 @@
     </widget>
    </item>
    <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
-     <property name="standardButtons" >
+     <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
- <layoutdefault spacing="6" margin="6" />
+ <layoutdefault spacing="6" margin="6"/>
  <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
  <tabstops>
   <tabstop>number1Button</tabstop>
@@ -353,11 +360,11 @@
    <receiver>SvnRevisionSelectionDialog</receiver>
    <slot>accept()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>27</x>
      <y>512</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>21</x>
      <y>143</y>
     </hint>
@@ -369,11 +376,11 @@
    <receiver>SvnRevisionSelectionDialog</receiver>
    <slot>reject()</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>79</x>
      <y>512</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>73</x>
      <y>140</y>
     </hint>
@@ -385,11 +392,11 @@
    <receiver>number1SpinBox</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>62</x>
      <y>45</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>148</x>
      <y>43</y>
     </hint>
@@ -401,11 +408,11 @@
    <receiver>date1Edit</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>70</x>
      <y>77</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>136</x>
      <y>74</y>
     </hint>
@@ -417,11 +424,11 @@
    <receiver>time1Edit</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>16</x>
      <y>74</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>257</x>
      <y>74</y>
     </hint>
@@ -433,11 +440,11 @@
    <receiver>number2SpinBox</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>32</x>
      <y>281</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>128</x>
      <y>283</y>
     </hint>
@@ -449,11 +456,11 @@
    <receiver>date2Edit</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>49</x>
      <y>310</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>134</x>
      <y>310</y>
     </hint>
@@ -465,11 +472,11 @@
    <receiver>time2Edit</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
-    <hint type="sourcelabel" >
+    <hint type="sourcelabel">
      <x>55</x>
      <y>322</y>
     </hint>
-    <hint type="destinationlabel" >
+    <hint type="destinationlabel">
      <x>264</x>
      <y>320</y>
     </hint>
--- a/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -89,6 +89,8 @@
         self.menuactions.append(self.menu.addAction(
             self.trUtf8("Show differences"), self.__diff))
         self.menuactions.append(self.menu.addAction(
+            self.trUtf8("Show differences side-by-side"), self.__sbsDiff))
+        self.menuactions.append(self.menu.addAction(
             self.trUtf8("Revert changes"), self.__revert))
         self.menuactions.append(self.menu.addAction(
             self.trUtf8("Restore missing"), self.__restoreMissing))
@@ -339,6 +341,7 @@
         self.addButton.setEnabled(False)
         self.commitButton.setEnabled(False)
         self.diffButton.setEnabled(False)
+        self.sbsDiffButton.setEnabled(False)
         self.revertButton.setEnabled(False)
         self.restoreButton.setEnabled(False)
         
@@ -601,6 +604,7 @@
 
         self.addButton.setEnabled(unversioned)
         self.diffButton.setEnabled(modified)
+        self.sbsDiffButton.setEnabled(modified == 1)
         self.revertButton.setEnabled(modified)
         self.restoreButton.setEnabled(missing)
     
@@ -667,6 +671,13 @@
         self.__diff()
     
     @pyqtSlot()
+    def on_sbsDiffButton_clicked(self):
+        """
+        Private slot to handle the press of the Side-by-Side Diff button.
+        """
+        self.__sbsDiff()
+    
+    @pyqtSlot()
     def on_revertButton_clicked(self):
         """
         Private slot to handle the press of the Revert button.
@@ -811,7 +822,28 @@
         self.diff.show()
         QApplication.processEvents()
         self.diff.start(names)
+    
+    def __sbsDiff(self):
+        """
+        Private slot to handle the Side-by-Side Diff context menu entry.
+        """
+        names = [os.path.join(self.dname, itm.text(self.__pathColumn))
+                 for itm in self.__getModifiedItems()]
+        if not names:
+            E5MessageBox.information(self,
+                self.trUtf8("Side-by-Side Diff"),
+                self.trUtf8("""There are no uncommitted changes"""
+                            """ available/selected."""))
+            return
+        elif len(names) > 1:
+            E5MessageBox.information(self,
+                self.trUtf8("Side-by-Side Diff"),
+                self.trUtf8("""Only one file with uncommitted changes"""
+                            """ must be selected."""))
+            return
         
+        self.vcs.svnSbsDiff(names[0])
+    
     def __lock(self):
         """
         Private slot to handle the Lock context menu entry.
--- a/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.ui	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/SvnStatusDialog.ui	Mon Aug 12 22:21:53 2013 +0200
@@ -182,6 +182,16 @@
       </widget>
      </item>
      <item>
+      <widget class="QPushButton" name="sbsDiffButton">
+       <property name="toolTip">
+        <string>Show differences of the selected entry to the repository in a side-by-side manner</string>
+       </property>
+       <property name="text">
+        <string>Side-b&amp;y-Side Diff</string>
+       </property>
+      </widget>
+     </item>
+     <item>
       <widget class="QPushButton" name="revertButton">
        <property name="toolTip">
         <string>Revert the selected entries to the last revision in the repository</string>
@@ -319,6 +329,7 @@
   <tabstop>commitButton</tabstop>
   <tabstop>addButton</tabstop>
   <tabstop>diffButton</tabstop>
+  <tabstop>sbsDiffButton</tabstop>
   <tabstop>revertButton</tabstop>
   <tabstop>restoreButton</tabstop>
   <tabstop>errors</tabstop>
--- a/Plugins/VcsPlugins/vcsSubversion/subversion.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/subversion.py	Mon Aug 12 22:21:53 2013 +0200
@@ -16,9 +16,7 @@
 import os
 import re
 import shutil
-import urllib.request
 import urllib.parse
-import urllib.error
 
 from PyQt4.QtCore import pyqtSignal, QProcess, QRegExp
 from PyQt4.QtGui import QLineEdit, QDialog, QInputDialog, QApplication
@@ -97,6 +95,7 @@
         
         self.log = None
         self.diff = None
+        self.sbsDiff = None
         self.status = None
         self.propList = None
         self.tagbranchList = None
@@ -129,6 +128,8 @@
             self.log.close()
         if self.diff is not None:
             self.diff.close()
+        if self.sbsDiff is not None:
+            self.sbsDiff.close()
         if self.status is not None:
             self.status.close()
         if self.propList is not None:
@@ -839,6 +840,7 @@
         
         @param name file/directory name to show the log of (string)
         """
+        isFile = os.path.isfile(name)
         noEntries, ok = QInputDialog.getInt(
             None,
             self.trUtf8("Subversion Log"),
@@ -846,7 +848,7 @@
             self.getPlugin().getPreferences("LogLimit"), 1, 999999, 1)
         if ok:
             from .SvnLogDialog import SvnLogDialog
-            self.log = SvnLogDialog(self)
+            self.log = SvnLogDialog(self, isFile=isFile)
             self.log.show()
             self.log.start(name, noEntries)
         
@@ -1839,15 +1841,115 @@
             QApplication.processEvents()
             self.diff.start(name, urls=urls, summary=summary)
         
-    def svnLogBrowser(self, path):
+    def __svnGetFileForRevision(self, name, rev=""):
+        """
+        Private method to get a file for a specific revision from the repository.
+        
+        @param name file name to get from the repository (string)
+        @keyparam rev revision to retrieve (integer or string)
+        @return contents of the file (string) and an error message (string)
+        """
+        args = []
+        args.append("cat")
+        if rev:
+            args.append("--revision")
+            args.append(str(rev))
+        args.append(name)
+        
+        output = ""
+        error = ""
+        
+        process = QProcess()
+        process.start('svn', args)
+        procStarted = process.waitForStarted(5000)
+        if procStarted:
+            finished = process.waitForFinished(30000)
+            if finished:
+                if process.exitCode() == 0:
+                    output = str(process.readAllStandardOutput(),
+                        Preferences.getSystem("IOEncoding"), 'replace')
+                else:
+                    error = str(process.readAllStandardError(),
+                        Preferences.getSystem("IOEncoding"), 'replace')
+            else:
+                error = self.trUtf8("The svn process did not finish within 30s.")
+        else:
+            error = self.trUtf8('The process {0} could not be started. '
+                    'Ensure, that it is in the search path.').format('svn')
+        
+        return output, error
+    
+    def svnSbsDiff(self, name, extended=False, revisions=None):
+        """
+        Public method used to view the difference of a file to the Mercurial repository
+        side-by-side.
+        
+        @param name file name to be diffed (string)
+        @keyparam extended flag indicating the extended variant (boolean)
+        @keyparam revisions tuple of two revisions (tuple of strings)
+        """
+        if isinstance(name, list):
+            raise ValueError("Wrong parameter type")
+        
+        if extended:
+            from .SvnRevisionSelectionDialog import SvnRevisionSelectionDialog
+            dlg = SvnRevisionSelectionDialog()
+            if dlg.exec_() == QDialog.Accepted:
+                rev1, rev2 = dlg.getRevisions()
+                if rev1 == "WORKING":
+                    rev1 = ""
+                if rev2 == "WORKING":
+                    rev2 = ""
+        elif revisions:
+            rev1, rev2 = revisions[0], revisions[1]
+        else:
+            rev1, rev2 = "", ""
+        
+        output1, error = self.__svnGetFileForRevision(name, rev=rev1)
+        if error:
+            E5MessageBox.critical(self.__ui,
+                self.trUtf8("Subversion Side-by-Side Difference"),
+                error)
+            return
+        name1 = "{0} (rev. {1})".format(name, rev1 and rev1 or ".")
+        
+        if rev2:
+            output2, error = self.__svnGetFileForRevision(name, rev=rev2)
+            if error:
+                E5MessageBox.critical(self.__ui,
+                    self.trUtf8("Subversion Side-by-Side Difference"),
+                    error)
+                return
+            name2 = "{0} (rev. {1})".format(name, rev2)
+        else:
+            try:
+                f1 = open(name, "r", encoding="utf-8")
+                output2 = f1.read()
+                f1.close()
+                name2 = name
+            except IOError:
+                E5MessageBox.critical(self.__ui,
+                    self.trUtf8("Subversion Side-by-Side Difference"),
+                    self.trUtf8("""<p>The file <b>{0}</b> could not be read.</p>""")
+                        .format(name))
+                return
+        
+        if self.sbsDiff is None:
+            from UI.CompareDialog import CompareDialog
+            self.sbsDiff = CompareDialog()
+        self.sbsDiff.show()
+        self.sbsDiff.compare(output1, output2, name1, name2)
+    
+    def svnLogBrowser(self, path, isFile=False):
         """
         Public method used to browse the log of a file/directory from the
         Subversion repository.
         
         @param path file/directory name to show the log of (string)
+        @param isFile flag indicating log for a file is to be shown (boolean)
         """
         from .SvnLogBrowserDialog import SvnLogBrowserDialog
-        self.logBrowser = SvnLogBrowserDialog(self)
+        self.logBrowser = SvnLogBrowserDialog(self, isFile=isFile)
         self.logBrowser.show()
         self.logBrowser.start(path)
         
--- a/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Mon Aug 12 22:21:53 2013 +0200
@@ -178,7 +178,7 @@
         
         self.rightCornerWidget = QWidget(self)
         self.rightCornerWidgetLayout = QHBoxLayout(self.rightCornerWidget)
-        self.rightCornerWidgetLayout.setMargin(0)
+        self.rightCornerWidgetLayout.setContentsMargins(0, 0, 0, 0)
         self.rightCornerWidgetLayout.setSpacing(0)
         
         self.__navigationMenu = QMenu(self)
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardCharactersDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -61,7 +61,7 @@
         self.singlesBoxLayout = QVBoxLayout(self.singlesBox)
         self.singlesBoxLayout.setObjectName("singlesBoxLayout")
         self.singlesBoxLayout.setSpacing(6)
-        self.singlesBoxLayout.setMargin(6)
+        self.singlesBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.singlesBox.setLayout(self.singlesBoxLayout)
         self.singlesView = QScrollArea(self.singlesBox)
         self.singlesView.setObjectName("singlesView")
@@ -71,14 +71,14 @@
         self.singlesView.setWidget(self.singlesItemsBox)
         self.singlesItemsBox.setObjectName("singlesItemsBox")
         self.singlesItemsBoxLayout = QVBoxLayout(self.singlesItemsBox)
-        self.singlesItemsBoxLayout.setMargin(6)
+        self.singlesItemsBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.singlesItemsBoxLayout.setSpacing(6)
         self.singlesItemsBox.setLayout(self.singlesItemsBoxLayout)
         self.singlesEntries = []
         self.__addSinglesLine()
         
         hlayout0 = QHBoxLayout()
-        hlayout0.setMargin(0)
+        hlayout0.setContentsMargins(0, 0, 0, 0)
         hlayout0.setSpacing(6)
         hlayout0.setObjectName("hlayout0")
         self.moreSinglesButton = QPushButton(self.trUtf8("Additional Entries"),
@@ -94,7 +94,7 @@
         self.rangesBoxLayout = QVBoxLayout(self.rangesBox)
         self.rangesBoxLayout.setObjectName("rangesBoxLayout")
         self.rangesBoxLayout.setSpacing(6)
-        self.rangesBoxLayout.setMargin(6)
+        self.rangesBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.rangesBox.setLayout(self.rangesBoxLayout)
         self.rangesView = QScrollArea(self.rangesBox)
         self.rangesView.setObjectName("rangesView")
@@ -104,14 +104,14 @@
         self.rangesView.setWidget(self.rangesItemsBox)
         self.rangesItemsBox.setObjectName("rangesItemsBox")
         self.rangesItemsBoxLayout = QVBoxLayout(self.rangesItemsBox)
-        self.rangesItemsBoxLayout.setMargin(6)
+        self.rangesItemsBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.rangesItemsBoxLayout.setSpacing(6)
         self.rangesItemsBox.setLayout(self.rangesItemsBoxLayout)
         self.rangesEntries = []
         self.__addRangesLine()
         
         hlayout1 = QHBoxLayout()
-        hlayout1.setMargin(0)
+        hlayout1.setContentsMargins(0, 0, 0, 0)
         hlayout1.setSpacing(6)
         hlayout1.setObjectName("hlayout1")
         self.moreRangesButton = QPushButton(self.trUtf8("Additional Entries"),
@@ -129,7 +129,7 @@
         """
         hbox = QWidget(self.singlesItemsBox)
         hboxLayout = QHBoxLayout(hbox)
-        hboxLayout.setMargin(0)
+        hboxLayout.setContentsMargins(0, 0, 0, 0)
         hboxLayout.setSpacing(6)
         hbox.setLayout(hboxLayout)
         cb1 = QComboBox(hbox)
@@ -165,7 +165,7 @@
         """
         hbox = QWidget(self.rangesItemsBox)
         hboxLayout = QHBoxLayout(hbox)
-        hboxLayout.setMargin(0)
+        hboxLayout.setContentsMargins(0, 0, 0, 0)
         hboxLayout.setSpacing(6)
         hbox.setLayout(hboxLayout)
         cb1 = QComboBox(hbox)
--- a/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/WizardPlugins/PyRegExpWizard/PyRegExpWizardDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -651,7 +651,7 @@
         self.setSizeGripEnabled(True)
         
         self.__layout = QVBoxLayout(self)
-        self.__layout.setMargin(0)
+        self.__layout.setContentsMargins(0, 0, 0, 0)
         self.setLayout(self.__layout)
         
         self.cw = PyRegExpWizardWidget(self, fromEric)
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardCharactersDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -87,7 +87,7 @@
         self.singlesBoxLayout = QVBoxLayout(self.singlesBox)
         self.singlesBoxLayout.setObjectName("singlesBoxLayout")
         self.singlesBoxLayout.setSpacing(6)
-        self.singlesBoxLayout.setMargin(6)
+        self.singlesBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.singlesBox.setLayout(self.singlesBoxLayout)
         self.singlesView = QScrollArea(self.singlesBox)
         self.singlesView.setObjectName("singlesView")
@@ -98,14 +98,14 @@
         self.singlesItemsBox.setObjectName("singlesItemsBox")
         self.singlesItemsBox.setMinimumWidth(1000)
         self.singlesItemsBoxLayout = QVBoxLayout(self.singlesItemsBox)
-        self.singlesItemsBoxLayout.setMargin(6)
+        self.singlesItemsBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.singlesItemsBoxLayout.setSpacing(6)
         self.singlesItemsBox.setLayout(self.singlesItemsBoxLayout)
         self.singlesEntries = []
         self.__addSinglesLine()
         
         hlayout0 = QHBoxLayout()
-        hlayout0.setMargin(0)
+        hlayout0.setContentsMargins(0, 0, 0, 0)
         hlayout0.setSpacing(6)
         hlayout0.setObjectName("hlayout0")
         self.moreSinglesButton = QPushButton(self.trUtf8("Additional Entries"),
@@ -121,7 +121,7 @@
         self.rangesBoxLayout = QVBoxLayout(self.rangesBox)
         self.rangesBoxLayout.setObjectName("rangesBoxLayout")
         self.rangesBoxLayout.setSpacing(6)
-        self.rangesBoxLayout.setMargin(6)
+        self.rangesBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.rangesBox.setLayout(self.rangesBoxLayout)
         self.rangesView = QScrollArea(self.rangesBox)
         self.rangesView.setObjectName("rangesView")
@@ -132,14 +132,14 @@
         self.rangesItemsBox.setObjectName("rangesItemsBox")
         self.rangesItemsBox.setMinimumWidth(1000)
         self.rangesItemsBoxLayout = QVBoxLayout(self.rangesItemsBox)
-        self.rangesItemsBoxLayout.setMargin(6)
+        self.rangesItemsBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.rangesItemsBoxLayout.setSpacing(6)
         self.rangesItemsBox.setLayout(self.rangesItemsBoxLayout)
         self.rangesEntries = []
         self.__addRangesLine()
         
         hlayout1 = QHBoxLayout()
-        hlayout1.setMargin(0)
+        hlayout1.setContentsMargins(0, 0, 0, 0)
         hlayout1.setSpacing(6)
         hlayout1.setObjectName("hlayout1")
         self.moreRangesButton = QPushButton(self.trUtf8("Additional Entries"),
@@ -403,7 +403,7 @@
         """
         hbox = QWidget(self.singlesItemsBox)
         hboxLayout = QHBoxLayout(hbox)
-        hboxLayout.setMargin(0)
+        hboxLayout.setContentsMargins(0, 0, 0, 0)
         hboxLayout.setSpacing(6)
         hbox.setLayout(hboxLayout)
         cb1 = QComboBox(hbox)
@@ -447,7 +447,7 @@
         """
         hbox = QWidget(self.rangesItemsBox)
         hboxLayout = QHBoxLayout(hbox)
-        hboxLayout.setMargin(0)
+        hboxLayout.setContentsMargins(0, 0, 0, 0)
         hboxLayout.setSpacing(6)
         hbox.setLayout(hboxLayout)
         cb1 = QComboBox(hbox)
--- a/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/WizardPlugins/QRegExpWizard/QRegExpWizardDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -632,7 +632,7 @@
         self.setSizeGripEnabled(True)
         
         self.__layout = QVBoxLayout(self)
-        self.__layout.setMargin(0)
+        self.__layout.setContentsMargins(0, 0, 0, 0)
         self.setLayout(self.__layout)
         
         self.cw = QRegExpWizardWidget(self, fromEric)
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardCharactersDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardCharactersDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -67,7 +67,7 @@
         self.singlesBoxLayout = QVBoxLayout(self.singlesBox)
         self.singlesBoxLayout.setObjectName("singlesBoxLayout")
         self.singlesBoxLayout.setSpacing(6)
-        self.singlesBoxLayout.setMargin(6)
+        self.singlesBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.singlesBox.setLayout(self.singlesBoxLayout)
         self.singlesView = QScrollArea(self.singlesBox)
         self.singlesView.setObjectName("singlesView")
@@ -78,14 +78,14 @@
         self.singlesItemsBox.setObjectName("singlesItemsBox")
         self.singlesItemsBox.setMinimumWidth(1000)
         self.singlesItemsBoxLayout = QVBoxLayout(self.singlesItemsBox)
-        self.singlesItemsBoxLayout.setMargin(6)
+        self.singlesItemsBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.singlesItemsBoxLayout.setSpacing(6)
         self.singlesItemsBox.setLayout(self.singlesItemsBoxLayout)
         self.singlesEntries = []
         self.__addSinglesLine()
         
         hlayout0 = QHBoxLayout()
-        hlayout0.setMargin(0)
+        hlayout0.setContentsMargins(0, 0, 0, 0)
         hlayout0.setSpacing(6)
         hlayout0.setObjectName("hlayout0")
         self.moreSinglesButton = QPushButton(self.trUtf8("Additional Entries"),
@@ -101,7 +101,7 @@
         self.rangesBoxLayout = QVBoxLayout(self.rangesBox)
         self.rangesBoxLayout.setObjectName("rangesBoxLayout")
         self.rangesBoxLayout.setSpacing(6)
-        self.rangesBoxLayout.setMargin(6)
+        self.rangesBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.rangesBox.setLayout(self.rangesBoxLayout)
         self.rangesView = QScrollArea(self.rangesBox)
         self.rangesView.setObjectName("rangesView")
@@ -112,14 +112,14 @@
         self.rangesItemsBox.setObjectName("rangesItemsBox")
         self.rangesItemsBox.setMinimumWidth(1000)
         self.rangesItemsBoxLayout = QVBoxLayout(self.rangesItemsBox)
-        self.rangesItemsBoxLayout.setMargin(6)
+        self.rangesItemsBoxLayout.setContentsMargins(6, 6, 6, 6)
         self.rangesItemsBoxLayout.setSpacing(6)
         self.rangesItemsBox.setLayout(self.rangesItemsBoxLayout)
         self.rangesEntries = []
         self.__addRangesLine()
         
         hlayout1 = QHBoxLayout()
-        hlayout1.setMargin(0)
+        hlayout1.setContentsMargins(0, 0, 0, 0)
         hlayout1.setSpacing(6)
         hlayout1.setObjectName("hlayout1")
         self.moreRangesButton = QPushButton(self.trUtf8("Additional Entries"),
@@ -329,7 +329,7 @@
         """
         hbox = QWidget(self.singlesItemsBox)
         hboxLayout = QHBoxLayout(hbox)
-        hboxLayout.setMargin(0)
+        hboxLayout.setContentsMargins(0, 0, 0, 0)
         hboxLayout.setSpacing(6)
         hbox.setLayout(hboxLayout)
         cb1 = QComboBox(hbox)
@@ -373,7 +373,7 @@
         """
         hbox = QWidget(self.rangesItemsBox)
         hboxLayout = QHBoxLayout(hbox)
-        hboxLayout.setMargin(0)
+        hboxLayout.setContentsMargins(0, 0, 0, 0)
         hboxLayout.setSpacing(6)
         hbox.setLayout(hboxLayout)
         cb1 = QComboBox(hbox)
--- a/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Plugins/WizardPlugins/QRegularExpressionWizard/QRegularExpressionWizardDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -718,7 +718,7 @@
         self.setSizeGripEnabled(True)
         
         self.__layout = QVBoxLayout(self)
-        self.__layout.setMargin(0)
+        self.__layout.setContentsMargins(0, 0, 0, 0)
         self.setLayout(self.__layout)
         
         self.cw = QRegularExpressionWizardWidget(self, fromEric)
--- a/Preferences/ConfigurationDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Preferences/ConfigurationDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -396,7 +396,7 @@
         self.resize(900, 650)
         self.verticalLayout_2 = QVBoxLayout(self)
         self.verticalLayout_2.setSpacing(6)
-        self.verticalLayout_2.setMargin(6)
+        self.verticalLayout_2.setContentsMargins(6, 6, 6, 6)
         self.verticalLayout_2.setObjectName("verticalLayout_2")
         
         self.configSplitter = QSplitter(self)
@@ -405,7 +405,7 @@
         
         self.configListWidget = QWidget(self.configSplitter)
         self.leftVBoxLayout = QVBoxLayout(self.configListWidget)
-        self.leftVBoxLayout.setMargin(0)
+        self.leftVBoxLayout.setContentsMargins(0, 0, 0, 0)
         self.leftVBoxLayout.setSpacing(0)
         self.leftVBoxLayout.setObjectName("leftVBoxLayout")
         self.configListFilter = E5ClearableLineEdit(self,
@@ -435,7 +435,7 @@
         self.emptyPage.setObjectName("emptyPage")
         self.vboxlayout = QVBoxLayout(self.emptyPage)
         self.vboxlayout.setSpacing(6)
-        self.vboxlayout.setMargin(6)
+        self.vboxlayout.setContentsMargins(6, 6, 6, 6)
         self.vboxlayout.setObjectName("vboxlayout")
         spacerItem = QSpacerItem(20, 20, QSizePolicy.Minimum, QSizePolicy.Expanding)
         self.vboxlayout.addItem(spacerItem)
@@ -752,7 +752,7 @@
             self.setObjectName(name)
         self.setModal(modal)
         self.layout = QVBoxLayout(self)
-        self.layout.setMargin(0)
+        self.layout.setContentsMargins(0, 0, 0, 0)
         self.layout.setSpacing(0)
         
         self.cw = ConfigurationWidget(self, fromEric=fromEric,
--- a/Project/Project.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Project/Project.py	Mon Aug 12 22:21:53 2013 +0200
@@ -4257,10 +4257,18 @@
                 return  # don't overwrite
         
         # build the list of entries
-        lst = []
+        lst_ = []
         for key in \
             ["SOURCES", "FORMS", "RESOURCES", "TRANSLATIONS", "INTERFACES", "OTHERS"]:
-            lst.extend(self.pdata[key])
+            lst_.extend(self.pdata[key])
+        lst = []
+        for entry in lst_:
+            if os.path.isdir(self.getAbsolutePath(entry)):
+                lst.extend([self.getRelativePath(p) for p in 
+                    Utilities.direntries(self.getAbsolutePath(entry), True)])
+                continue
+            else:
+                lst.append(entry)
         lst.sort()
         if "PKGLIST" in lst:
             lst.remove("PKGLIST")
@@ -4272,7 +4280,7 @@
             else:
                 newline = self.getEolString()
             pkglistFile = open(pkglist, "w", encoding="utf-8", newline=newline)
-            pkglistFile.write("\n".join(lst))
+            pkglistFile.write("\n".join([Utilities.fromNativeSeparators(f) for f in lst]))
             pkglistFile.write("\n")  # ensure the file ends with an empty line
             pkglistFile.close()
         except IOError as why:
--- a/Project/ProjectTranslationsBrowser.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Project/ProjectTranslationsBrowser.py	Mon Aug 12 22:21:53 2013 +0200
@@ -77,11 +77,11 @@
             """ project. Several actions can be executed via the context menu.</p>"""
         ))
         
-        self.lreleaseProc = None
+        self.__lreleaseProcesses = []
+        self.__pylupdateProcesses = []
         self.lreleaseProcRunning = False
-        self.pylupdateProc = None
         self.pylupdateProcRunning = False
-        self.tmpProject = []
+        self.__tmpProjects = []
         
     def _createPopupMenus(self):
         """
@@ -773,24 +773,26 @@
                                 list[0].replace(os.sep, '/'), "\n", "\n"))
                     
                 pf.close()
-                self.tmpProject.append(outFile)
+                self.__tmpProjects.append(outFile)
             except IOError:
                 E5MessageBox.critical(self,
                     self.trUtf8("Write temporary project file"),
                     self.trUtf8("<p>The temporary project file <b>{0}</b> could not"
                         " be written.</p>").format(outFile))
-                self.tmpProject = []
-                return False
+        
+        if len(self.__tmpProjects) == 0:
+            return False
             
         return True
-        
+    
     def __readStdoutLupdate(self):
         """
         Private slot to handle the readyReadStandardOutput signal of the
         pylupdate process.
         """
-        if self.pylupdateProc is not None:
-            self.__readStdout(self.pylupdateProc, '{0}: '.format(self.pylupdate))
+        proc = self.sender()
+        if proc is not None:
+            self.__readStdout(proc, '{0}: '.format(self.pylupdate))
         else:
             return
         
@@ -799,8 +801,9 @@
         Private slot to handle the readyReadStandardOutput signal of the
         lrelease process.
         """
-        if self.lreleaseProc is not None:
-            self.__readStdout(self.lreleaseProc, 'lrelease: ')
+        proc = self.sender()
+        if proc is not None:
+            self.__readStdout(proc, 'lrelease: ')
         else:
             return
         
@@ -825,8 +828,9 @@
         Private slot to handle the readyReadStandardError signal of the
         pylupdate process.
         """
-        if self.pylupdateProc is not None:
-            self.__readStderr(self.pylupdateProc, '{0}: '.format(self.pylupdate))
+        proc = self.sender()
+        if proc is not None:
+            self.__readStderr(proc, '{0}: '.format(self.pylupdate))
         else:
             return
         
@@ -835,8 +839,9 @@
         Private slot to handle the readyReadStandardError signal of the
         lrelease process.
         """
-        if self.lreleaseProc is not None:
-            self.__readStderr(self.lreleaseProc, 'lrelease: ')
+        proc = self.sender()
+        if proc is not None:
+            self.__readStderr(proc, 'lrelease: ')
         else:
             return
         
@@ -874,7 +879,6 @@
         @param exitCode exit code of the process (integer)
         @param exitStatus exit status of the process (QProcess.ExitStatus)
         """
-        self.pylupdateProcRunning = False
         if exitStatus == QProcess.NormalExit and exitCode == 0:
             ui = e5App().getObject("UserInterface")
             if ui.notificationsEnabled():
@@ -891,7 +895,20 @@
             E5MessageBox.critical(self,
                 self.trUtf8("Translation file generation"),
                 self.trUtf8("The generation of the translation files (*.ts) has failed."))
-        self.pylupdateProc = None
+        
+        proc = self.sender()
+        for index in range(len(self.__pylupdateProcesses)):
+            if proc == self.__pylupdateProcesses[index][0]:
+                try:
+                    self.__tmpProjects.remove(self.__pylupdateProcesses[index][1])
+                    os.remove(self.__pylupdateProcesses[index][1])
+                except EnvironmentError:
+                    pass
+                del self.__pylupdateProcesses[index]
+                break
+        if not self.__pylupdateProcesses:
+            # all done
+            self.pylupdateProcRunning = False
         
     def __generateTSFile(self, noobsolete=False, generateAll=True):
         """
@@ -933,6 +950,7 @@
                     return
         
         # generate a minimal temporary projectfile suitable for pylupdate
+        self.__tmpProjects = []
         if self.project.pdata["PROGLANGUAGE"][0] in ["Python", "Python2", "Python3"]:
             ok = self.__writeTempProjectFile(langs, [".py"])
         else:
@@ -953,8 +971,9 @@
         else:
             return
 
-        for tempProjectFile in self.tmpProject:
-            self.pylupdateProc = QProcess()
+        self.__pylupdateProcesses = []
+        for tempProjectFile in self.__tmpProjects[:]:
+            proc = QProcess()
             args = []
 
             if noobsolete:
@@ -963,16 +982,16 @@
             args.append('-verbose')
             path, filename = os.path.split(tempProjectFile)
             args.append(filename)
-            self.pylupdateProc.setWorkingDirectory(os.path.join(self.project.ppath, path))
-            self.pylupdateProc.finished.connect(self.__generateTSFileDone)
-            self.pylupdateProc.readyReadStandardOutput.connect(self.__readStdoutLupdate)
-            self.pylupdateProc.readyReadStandardError.connect(self.__readStderrLupdate)
+            proc.setWorkingDirectory(os.path.join(self.project.ppath, path))
+            proc.finished.connect(self.__generateTSFileDone)
+            proc.readyReadStandardOutput.connect(self.__readStdoutLupdate)
+            proc.readyReadStandardError.connect(self.__readStderrLupdate)
             
-            self.pylupdateProc.start(self.pylupdate, args)
-            procStarted = self.pylupdateProc.waitForStarted(5000)
+            proc.start(self.pylupdate, args)
+            procStarted = proc.waitForStarted()
             if procStarted:
                 self.pylupdateProcRunning = True
-                self.pylupdateProc.waitForFinished(10000)
+                self.__pylupdateProcesses.append((proc, tempProjectFile))
             else:
                 E5MessageBox.critical(self,
                     self.trUtf8('Process Generation Error'),
@@ -980,13 +999,12 @@
                         'Could not start {0}.<br>'
                         'Ensure that it is in the search path.'
                     ).format(self.pylupdate))
-        # cleanup
-        try:
-            for fn in self.tmpProject:
-                os.remove(fn)
-        except EnvironmentError:
-            pass
-        self.tmpProject = []
+                # cleanup
+                try:
+                    self.__tmpProjects.remove(tempProjectFile)
+                    os.remove(tempProjectFile)
+                except EnvironmentError:
+                    pass
         
     def __generateAll(self):
         """
@@ -1054,13 +1072,21 @@
             E5MessageBox.critical(self,
                 self.trUtf8("Translation file release"),
                 self.trUtf8("The release of the translation files (*.qm) has failed."))
-        self.lreleaseProc = None
-        try:
-            os.remove(self.tmpProject)
-        except EnvironmentError:
-            pass
-        self.tmpProject = None
-        self.project.checkLanguageFiles()
+        
+        proc = self.sender()
+        for index in range(len(self.__lreleaseProcesses)):
+            if proc == self.__lreleaseProcesses[index][0]:
+                try:
+                    self.__tmpProjects.remove(self.__lreleaseProcesses[index][1])
+                    os.remove(self.__lreleaseProcesses[index][1])
+                except EnvironmentError:
+                    pass
+                del self.__lreleaseProcesses[index]
+                break
+        if not self.__lreleaseProcesses:
+            # all done
+            self.lreleaseProcRunning = False
+            self.project.checkLanguageFiles()
         
     def __releaseTSFile(self, generateAll=False):
         """
@@ -1087,6 +1113,7 @@
                 return
         
         # generate a minimal temporary projectfile suitable for lrelease
+        self.__tmpProjects = []
         if self.project.pdata["PROGLANGUAGE"][0] in ["Python", "Python2", "Python3"]:
             ok = self.__writeTempProjectFile(langs, [".py"])
         else:
@@ -1094,9 +1121,6 @@
         if not ok:
             return
         
-        self.lreleaseProc = QProcess()
-        args = []
-        
         if self.project.getProjectType() in \
                 ["Qt4", "Qt4C", "PyQt5", "PyQt5C", "E4Plugin", "PySide", "PySideC"]:
             lrelease = os.path.join(
@@ -1107,24 +1131,38 @@
         if Utilities.isWindowsPlatform():
             lrelease = lrelease + '.exe'
         
-        args.append('-verbose')
-        args.append(self.tmpProject)
-        self.lreleaseProc.setWorkingDirectory(self.project.ppath)
-        self.lreleaseProc.finished.connect(self.__releaseTSFileDone)
-        self.lreleaseProc.readyReadStandardOutput.connect(self.__readStdoutLrelease)
-        self.lreleaseProc.readyReadStandardError.connect(self.__readStderrLrelease)
-        
-        self.lreleaseProc.start(lrelease, args)
-        procStarted = self.lreleaseProc.waitForStarted(5000)
-        if procStarted:
-            self.lreleaseProcRunning = True
-        else:
-            E5MessageBox.critical(self,
-                self.trUtf8('Process Generation Error'),
-                self.trUtf8(
-                    '<p>Could not start lrelease.<br>'
-                    'Ensure that it is available as <b>{0}</b>.</p>'
-                ).format(lrelease))
+        self.__lreleaseProcesses = []
+        for tempProjectFile in self.__tmpProjects[:]:
+            proc = QProcess()
+            args = []
+
+            args.append('-verbose')
+            path, filename = os.path.split(tempProjectFile)
+            args.append(filename)
+            proc.setWorkingDirectory(os.path.join(self.project.ppath, path))
+            proc.finished.connect(self.__releaseTSFileDone)
+            proc.readyReadStandardOutput.connect(self.__readStdoutLrelease)
+            proc.readyReadStandardError.connect(self.__readStderrLrelease)
+            
+            proc.start(lrelease, args)
+            procStarted = proc.waitForStarted()
+            if procStarted:
+                self.lreleaseProcRunning = True
+                self.__lreleaseProcesses.append((proc, tempProjectFile))
+            else:
+                E5MessageBox.critical(self,
+                    self.trUtf8('Process Generation Error'),
+                    self.trUtf8(
+                        '<p>Could not start lrelease.<br>'
+                        'Ensure that it is available as <b>{0}</b>.</p>'
+                    ).format(lrelease))
+                
+                # cleanup
+                try:
+                    self.__tmpProjects.remove(tempProjectFile)
+                    os.remove(tempProjectFile)
+                except EnvironmentError:
+                    pass
         
     def __releaseSelected(self):
         """
--- a/SqlBrowser/SqlConnectionWidget.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/SqlBrowser/SqlConnectionWidget.py	Mon Aug 12 22:21:53 2013 +0200
@@ -36,7 +36,7 @@
         super(SqlConnectionWidget, self).__init__(parent)
         
         layout = QVBoxLayout(self)
-        layout.setMargin(0)
+        layout.setContentsMargins(0, 0, 0, 0)
         
         self.__connectionTree = QTreeWidget(self)
         self.__connectionTree.setObjectName("connectionTree")
--- a/Templates/TemplateMultipleVariablesDialog.py	Mon Aug 12 19:41:53 2013 +0200
+++ b/Templates/TemplateMultipleVariablesDialog.py	Mon Aug 12 22:21:53 2013 +0200
@@ -28,7 +28,7 @@
         super(TemplateMultipleVariablesDialog, self).__init__(parent)
 
         self.TemplateMultipleVariablesDialogLayout = QVBoxLayout(self)
-        self.TemplateMultipleVariablesDialogLayout.setMargin(6)
+        self.TemplateMultipleVariablesDialogLayout.setContentsMargins(6, 6, 6, 6)
         self.TemplateMultipleVariablesDialogLayout.setSpacing(6)
         self.TemplateMultipleVariablesDialogLayout.setObjectName(
             "TemplateMultipleVariablesDialogLayout")
@@ -45,7 +45,7 @@
         self.top = QWidget(self)
         self.variablesView.setWidget(self.top)
         self.grid = QGridLayout(self.top)
-        self.grid.setMargin(0)
+        self.grid.setContentsMargins(0, 0, 0, 0)
         self.grid.setSpacing(6)
         self.top.setLayout