--- a/Plugins/VcsPlugins/vcsMercurial/hg.py Sat May 17 16:53:00 2014 +0200 +++ b/Plugins/VcsPlugins/vcsMercurial/hg.py Sat May 17 18:18:06 2014 +0200 @@ -111,6 +111,7 @@ self.serveDlg = None self.bookmarksListDlg = None self.bookmarksInOutDlg = None + self.conflictsDlg = None self.bundleFile = None self.__lastChangeGroupPath = None @@ -206,6 +207,9 @@ if self.bookmarksInOutDlg is not None: self.bookmarksInOutDlg.close() + if self.conflictsDlg is not None: + self.conflictsDlg.close() + if self.bundleFile and os.path.exists(self.bundleFile): os.remove(self.bundleFile) @@ -1057,6 +1061,57 @@ dia.exec_() self.checkVCSStatus() + def hgReMerge(self, name): + """ + Public method used to merge a URL/revision into the local project. + + @param name file/directory name to be merged (string) + """ + args = self.initCommand("resolve") + if self.getPlugin().getPreferences("InternalMerge"): + args.append("--tool") + args.append("internal:merge") + if isinstance(name, list): + dname, fnames = self.splitPathList(name) + self.addArguments(args, name) + names = name[:] + else: + dname, fname = self.splitPath(name) + args.append(name) + names = [name] + + # find the root of the repo + repodir = dname + 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 + + project = e5App().getObject("Project") + names = [project.getRelativePath(nam) for nam in names] + if names[0]: + from UI.DeleteFilesConfirmationDialog import \ + DeleteFilesConfirmationDialog + dlg = DeleteFilesConfirmationDialog( + self.parent(), + self.tr("Re-Merge"), + self.tr( + "Do you really want to re-merge these files" + " or directories?"), + names) + yes = dlg.exec_() == QDialog.Accepted + else: + yes = E5MessageBox.yesNo( + None, + self.tr("Re-Merge"), + self.tr("""Do you really want to re-merge the project?""")) + if yes: + dia = HgDialog(self.tr('Re-Merging').format(name), self) + res = dia.startProcess(args, repodir) + if res: + dia.exec_() + self.checkVCSStatus() + def vcsSwitch(self, name): """ Public method used to switch a working directory to a different @@ -2055,15 +2110,31 @@ dlg = VcsRepositoryInfoDialog(None, "\n".join(info)) dlg.exec_() - # TODO: Add support for hg resolve -l displaying a dialog like log - def hgResolve(self, name): + def hgConflicts(self, name): + """ + Public method used to show a list of files containing. + + @param name file/directory name to be resolved (string) + """ + if self.conflictsDlg is None: + from .HgConflictsListDialog import HgConflictsListDialog + self.conflictsDlg = HgConflictsListDialog(self) + self.conflictsDlg.show() + self.conflictsDlg.start(name) + + def hgResolved(self, name, unresolve=False): """ Public method used to resolve conflicts of a file/directory. @param name file/directory name to be resolved (string) + @param unresolve flag indicating to mark the file/directory as + unresolved (boolean) """ args = self.initCommand("resolve") - args.append("--mark") + if unresolve: + args.append("--unmark") + else: + args.append("--mark") if isinstance(name, list): dname, fnames = self.splitPathList(name) @@ -2079,7 +2150,11 @@ if os.path.splitdrive(repodir)[1] == os.sep: return - dia = HgDialog(self.tr('Resolving files/directories'), self) + if unresolve: + title = self.tr("Marking as 'unresolved'") + else: + title = self.tr("Marking as 'resolved'") + dia = HgDialog(title, self) res = dia.startProcess(args, repodir) if res: dia.exec_()