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
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()
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
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()
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()
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))