示例#1
0
    def loaded_revision_props(self, rev):
        props = []
        if rev.timestamp is not None:
            props.append((gettext("Date:"), format_timestamp(rev.timestamp)))
        if rev.committer:
            props.append((gettext("Committer:"), htmlize(rev.committer)))

        authors = rev.properties.get('authors')
        if not authors:
            authors = rev.properties.get('author')
        if authors:
            props.append((gettext("Author:"), htmlize(authors)))

        branch_nick = rev.properties.get('branch-nick')
        if branch_nick:
            props.append((gettext("Branch:"), htmlize(branch_nick)))

        tags = self.get_tags(rev.revision_id)
        if tags:
            tags = list(map(quote_tag, tags))
            props.append((gettext("Tags:"), htmlencode(", ".join(tags))))

        bugs = []
        for bug in rev.properties.get('bugs', '').split('\n'):
            if bug:
                try:
                    url, status = bug.split(' ', 1)
                    bugs.append('<a href="%(url)s">%(url)s</a> %(status)s' % (dict(url=url, status=gettext(status))))
                except ValueError:
                    bugs.append(bug)  # show it "as is"
        if bugs:
            props.append((ngettext("Bug:", "Bugs:", len(bugs)), ", ".join(bugs)))

        foreign_attribs = None
        if isinstance(rev, foreign.ForeignRevision):
            foreign_attribs = rev.mapping.vcs.show_foreign_revid(rev.foreign_revid)
        elif b":" in rev.revision_id:
            try:
                foreign_revid, mapping = foreign.foreign_vcs_registry.parse_revision_id(rev.revision_id)
                foreign_attribs = mapping.vcs.show_foreign_revid(foreign_revid)
            except errors.InvalidRevisionId:
                pass

        if foreign_attribs:
            keys = list(foreign_attribs.keys())
            keys.sort()
            for key in keys:
                props.append((key + ":", foreign_attribs[key]))
        return props
示例#2
0
 def set_diff_title(self):
     rev1_title = get_title_for_tree(self.trees[0], self.branches[0], self.branches[1])
     rev2_title = get_title_for_tree(self.trees[1], self.branches[1], self.branches[0])
     title = [gettext("Diff"), "%s..%s" % (rev1_title, rev2_title)]
     if self.specific_files:
         nfiles = len(self.specific_files)
         if nfiles > 2:
             title.append(ngettext("%d file", "%d files", nfiles) % nfiles)
         else:
             title.append(", ".join(self.specific_files))
     else:
         if self.filter_options and not self.filter_options.is_all_enable():
             title.append(self.filter_options.to_str())
     self.set_title_and_icon(title)
     self.processEvents()
示例#3
0
    def refresh(self):
        cleanup = []
        try:
            old_rev = self.revision
            old_changes = self._get_change_dictionary()
            self.clear(clear_message=False)

            shelver, creator = self._create_shelver_and_creator()
            cleanup.append(shelver.finalize)
            cleanup.append(creator.finalize)

            file_list = shelver.file_list
            if file_list:
                nfiles = len(file_list)
                if nfiles > 2:
                    self.files_str = ngettext("%d file", "%d files",
                                              nfiles) % nfiles
                else:
                    self.files_str = ", ".join(file_list)

            self.trees = (shelver.target_tree, shelver.work_tree)
            branch = shelver.work_tree.branch  # current branch corresponding to working tree
            if self.initial_encoding is None:
                encoding = get_set_encoding(None, branch)
                self.initial_encoding = encoding  # save real encoding for the next time
                self.encoding_selector.encoding = encoding  # set encoding selector
            self.editor_available = (shelver.change_editor is not None)
            self.editor_button.setVisible(self.editor_available)
            tabwidth = get_set_tab_width_chars(branch)
            self.tabwidth_selector.setTabWidth(tabwidth)
            self._on_tabwidth_changed(tabwidth)
            self.revision = self.trees[0].get_revision_id()
            if self.revision != old_rev:
                old_changes = None
            for change in creator.iter_shelvable():
                item = self._create_item(change, shelver, self.trees,
                                         old_changes)
                self.file_view.addTopLevelItem(item)

        finally:
            for func in cleanup:
                func()

        if self.select_all:
            self.check_all(True)
            self.select_all = False

        self.loaded = True
示例#4
0
 def auto_resolve(self):
     while self.wt is None:
         QtWidgets.QApplication.processEvents()
     un_resolved, resolved = self.wt.auto_resolve()
     if len(un_resolved) > 0:
         n = len(resolved)
         QtWidgets.QMessageBox.information(
             self, gettext('Conflicts'),
             ngettext('%d conflict auto-resolved.',
                      '%d conflicts auto-resolved.', n) % n, gettext('&OK'))
         QtCore.QTimer.singleShot(1, self.load)
     else:
         QtWidgets.QMessageBox.information(
             self, gettext('Conflicts'), gettext('All conflicts resolved.'),
             gettext('&OK'))
         self.close()
示例#5
0
    def do_shelve(self, destroy=False):
        change_dict = self._get_change_dictionary()
        if change_dict:
            nfiles = len(change_dict)
            if destroy:
                prompt = ngettext(
                    'Delete changes of %d file without shelving',
                    'Delete changes of %d files without shelving',
                    nfiles) % nfiles
                func = QtWidgets.QMessageBox.warning
            else:
                prompt = ngettext('Shelve changes of %d file',
                                  'Shelve changes of %d files',
                                  nfiles) % nfiles
                func = QtWidgets.QMessageBox.question
            ret = func(self, gettext('Shelve'), prompt,
                       QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.Cancel)
            if ret != QtWidgets.QMessageBox.Ok:
                return
        else:
            QtWidgets.QMessageBox.information(self, gettext('Shelve'),
                                              gettext('No changes selected.'),
                                              gettext('&OK'))
            return

        cleanup = []
        try:
            shelver, creator = self._create_shelver_and_creator(
                destroy=destroy)
            cleanup.append(shelver.finalize)
            cleanup.append(creator.finalize)
            trees = (shelver.target_tree, shelver.work_tree)
            if len(trees[1].get_parent_ids()) > 1:
                raise WorkingTreeHasPendingMarge
            if self.revision != trees[0].get_revision_id():
                raise WorkingTreeHasChanged

            changes = []
            for ch in creator.iter_shelvable():
                change = Change(ch, shelver, trees)
                key = (change.file_id, change.status)
                org_change = change_dict.get(key)
                if org_change is None:
                    continue
                if not change.is_same_change(org_change):
                    raise WorkingTreeHasChanged
                del (change_dict[key])
                changes.append(org_change)

            if change_dict:
                raise WorkingTreeHasChanged

            for change in changes:
                if change.status == 'modify text':
                    self.handle_modify_text(creator, change)
                elif change.status == 'modify binary':
                    creator.shelve_content_change(change.data[1])
                else:
                    creator.shelve_change(change.data)
            manager = shelver.work_tree.get_shelf_manager()
            message = str(
                self.message.toPlainText()).strip() or gettext('<no message>')
            if destroy:
                creator.transform()
                shelf_id = -1
            else:
                shelf_id = manager.shelve_changes(creator, message)

        except WorkingTreeHasPendingMarge:
            QtWidgets.QMessageBox.warning(
                self, gettext('Shelve'),
                gettext(
                    'Operation aborted because working tree has pending merges.'
                ), gettext('&OK'))
            return
        except WorkingTreeHasChanged:
            QtWidgets.QMessageBox.warning(
                self, gettext('Shelve'),
                gettext(
                    'Operation aborted because target files has been changed.'
                ), gettext('&OK'))
            return

        finally:
            while cleanup:
                cleanup.pop()()
        self.shelfCreated.emit(shelf_id)
        self.clear()
示例#6
0
 def test_ngettext(self):
     i18n.install()
     self.assertEqual('singular', i18n.ngettext('singular', 'plural', 1))
     self.assertEqual('plural', i18n.ngettext('singular', 'plural', 2))
     self.assertEqual('plural', i18n.ngettext('singular', 'plural', 0))