def _my_diff(self, old_content, new_content): # Determine the difference between two text items. if old_content != new_content: context = 0 if context < 0: context = None return hdf_diff(old_content.splitlines(), new_content.splitlines(), context, tabwidth=8, ignore_blank_lines=True, ignore_case=True, ignore_space_changes=True)
def _my_diff(self, old_content, new_content): # Determine the difference between two text items. if old_content != new_content: context = 0 if context < 0: context = None return hdf_diff( old_content.splitlines(), new_content.splitlines(), context, tabwidth=8, ignore_blank_lines=True, ignore_case=True, ignore_space_changes=True, )
def _diff_cr(self, req): add_stylesheet(req, 'common/css/diff.css') cs_id = req.args.get('id') old_version = req.args.get('old_version', 1) version = req.args.get('version', 1) db = self.env.get_db_cnx() cursor = db.cursor() try: version_author, version_status, newtext = self._get_version_record( cursor, cs_id, version) oldversion_author, oldversion_status, oldtext = self._get_version_record( cursor, cs_id, old_version) except ValueError: return pretty_err(req, 'Version Error') ctime = round(time.time(), 2) diff_style, diff_options = get_diff_options(req) context = 3 for option in diff_options: if option.startswith('-U'): context = int(option[2:]) break if context < 0: context = None changes = hdf_diff(oldtext.splitlines(), newtext.splitlines(), context=context, ignore_blank_lines='-B' in diff_options, ignore_case='-i' in diff_options, ignore_space_changes='-b' in diff_options) req.hdf['version.diff'] = changes req.hdf['version_author'] = version_author req.hdf['oldversion_author'] = oldversion_author req.hdf['version_status'] = status_str[version_status] req.hdf['oldversion_status'] = status_str[oldversion_status] req.hdf['ctime'] = time.ctime(ctime) req.hdf['old_version'] = old_version req.hdf['version'] = version req.hdf['rev'] = cs_id req.hdf['update.href'] = self.env.href.CodeReview(cs_id, action='diff') return 'codereviewdiff.cs', None
def _content_changes(old_node, new_node): """Returns the list of differences. The list is empty when no differences between comparable files are detected, but the return value is None for non-comparable files. """ old_content = old_node.get_content().read() if is_binary(old_content): return None new_content = new_node.get_content().read() if is_binary(new_content): return None mview = Mimeview(self.env) old_content = mview.to_unicode(old_content, old_node.content_type) new_content = mview.to_unicode(new_content, new_node.content_type) if old_content != new_content: context = 3 options = diff_options[1] for option in options: if option.startswith('-U'): context = int(option[2:]) break if context < 0: context = None tabwidth = self.config['diff'].getint('tab_width') or \ self.config['mimeviewer'].getint('tab_width', 8) return hdf_diff(old_content.splitlines(), new_content.splitlines(), context, tabwidth, ignore_blank_lines='-B' in options, ignore_case='-i' in options, ignore_space_changes='-b' in options) else: return []
def _diff_cr(self, req): add_stylesheet(req, 'common/css/diff.css') cs_id = req.args.get('id') old_version = req.args.get('old_version', 1) version = req.args.get('version', 1) db = self.env.get_db_cnx() cursor = db.cursor() try: version_author, version_status, newtext = self._get_version_record(cursor, cs_id, version) oldversion_author, oldversion_status, oldtext = self._get_version_record(cursor, cs_id, old_version) except ValueError: return pretty_err(req, 'Version Error') ctime = round(time.time(), 2) diff_style, diff_options = get_diff_options(req) context = 3 for option in diff_options: if option.startswith('-U'): context = int(option[2:]) break if context < 0: context = None changes = hdf_diff(oldtext.splitlines(), newtext.splitlines(), context=context, ignore_blank_lines='-B' in diff_options, ignore_case='-i' in diff_options, ignore_space_changes='-b' in diff_options) req.hdf['version.diff'] = changes req.hdf['version_author'] = version_author req.hdf['oldversion_author'] = oldversion_author req.hdf['version_status'] = status_str[version_status] req.hdf['oldversion_status'] = status_str[oldversion_status] req.hdf['ctime'] = time.ctime(ctime) req.hdf['old_version'] = old_version req.hdf['version'] = version req.hdf['rev'] = cs_id req.hdf['update.href'] = self.env.href.CodeReview(cs_id, action='diff') return 'codereviewdiff.cs', None
def _render_html(self, req, repos, chgset, diff_options): """HTML version""" req.hdf['title'] = '[%s]' % chgset.rev req.hdf['changeset'] = { 'revision': chgset.rev, 'time': time.strftime('%c', time.localtime(chgset.date)), 'author': util.escape(chgset.author or 'anonymous'), 'message': wiki_to_html(chgset.message or '--', self.env, req, escape_newlines=True) } oldest_rev = repos.oldest_rev if chgset.rev != oldest_rev: add_link(req, 'first', self.env.href.changeset(oldest_rev), 'Changeset %s' % oldest_rev) previous_rev = repos.previous_rev(chgset.rev) add_link(req, 'prev', self.env.href.changeset(previous_rev), 'Changeset %s' % previous_rev) youngest_rev = repos.youngest_rev if str(chgset.rev) != str(youngest_rev): next_rev = repos.next_rev(chgset.rev) add_link(req, 'next', self.env.href.changeset(next_rev), 'Changeset %s' % next_rev) add_link(req, 'last', self.env.href.changeset(youngest_rev), 'Changeset %s' % youngest_rev) edits = [] idx = 0 for path, kind, change, base_path, base_rev in chgset.get_changes(): info = {'change': change} if base_path: info['path.old'] = base_path info['rev.old'] = base_rev info['browser_href.old'] = self.env.href.browser(base_path, rev=base_rev) if path: info['path.new'] = path info['rev.new'] = chgset.rev info['browser_href.new'] = self.env.href.browser( path, rev=chgset.rev) if change in (Changeset.COPY, Changeset.EDIT, Changeset.MOVE): edits.append((idx, path, kind, base_path, base_rev)) req.hdf['changeset.changes.%d' % idx] = info idx += 1 hidden_properties = [ p.strip() for p in self.config.get('browser', 'hide_properties', 'svk:merge').split(',') ] for idx, path, kind, base_path, base_rev in edits: old_node = repos.get_node(base_path or path, base_rev) new_node = repos.get_node(path, chgset.rev) # Property changes old_props = old_node.get_properties() new_props = new_node.get_properties() changed_props = {} if old_props != new_props: for k, v in old_props.items(): if not k in new_props: changed_props[k] = {'old': v} elif v != new_props[k]: changed_props[k] = {'old': v, 'new': new_props[k]} for k, v in new_props.items(): if not k in old_props: changed_props[k] = {'new': v} for k in hidden_properties: if k in changed_props: del changed_props[k] req.hdf['changeset.changes.%d.props' % idx] = changed_props if kind == Node.DIRECTORY: continue # Content changes default_charset = self.config.get('trac', 'default_charset') old_content = old_node.get_content().read() if mimeview.is_binary(old_content): continue charset = mimeview.get_charset(old_node.content_type) or \ default_charset old_content = util.to_utf8(old_content, charset) new_content = new_node.get_content().read() if mimeview.is_binary(new_content): continue charset = mimeview.get_charset(new_node.content_type) or \ default_charset new_content = util.to_utf8(new_content, charset) if old_content != new_content: context = 3 for option in diff_options[1]: if option.startswith('-U'): context = int(option[2:]) break tabwidth = int( self.config.get('diff', 'tab_width', self.config.get('mimeviewer', 'tab_width'))) changes = hdf_diff(old_content.splitlines(), new_content.splitlines(), context, tabwidth, ignore_blank_lines='-B' in diff_options[1], ignore_case='-i' in diff_options[1], ignore_space_changes='-b' in diff_options[1]) req.hdf['changeset.changes.%d.diff' % idx] = changes
def _render_diff(self, req, db, page): req.perm.assert_permission('WIKI_VIEW') if not page.exists: raise TracError, "Version %s of page %s does not exist" \ % (req.args.get('version'), page.name) add_stylesheet(req, 'common/css/diff.css') req.hdf['title'] = escape(page.name) + ' (diff)' # Ask web spiders to not index old versions req.hdf['html.norobots'] = 1 old_version = req.args.get('old_version') if old_version: old_version = int(old_version) if old_version == page.version: old_version = None elif old_version > page.version: old_version, page = page.version, \ WikiPage(self.env, page.name, old_version) info = { 'version': page.version, 'history_href': escape(self.env.href.wiki(page.name, action='history')) } num_changes = 0 old_page = None for version, t, author, comment, ipnr in page.get_history(): if version == page.version: if t: info['time'] = format_datetime(t) info['time_delta'] = pretty_timedelta(t) info['author'] = escape(author or 'anonymous') info['comment'] = escape(comment or '--') info['ipnr'] = escape(ipnr or '') else: num_changes += 1 if version < page.version: if (old_version and version == old_version) or \ not old_version: old_page = WikiPage(self.env, page.name, version) info['num_changes'] = num_changes info['old_version'] = version break req.hdf['wiki'] = info diff_style, diff_options = get_diff_options(req) oldtext = old_page and old_page.text.splitlines() or [] newtext = page.text.splitlines() context = 3 for option in diff_options: if option.startswith('-U'): context = int(option[2:]) break if context < 0: context = None changes = hdf_diff(oldtext, newtext, context=context, ignore_blank_lines='-B' in diff_options, ignore_case='-i' in diff_options, ignore_space_changes='-b' in diff_options) req.hdf['wiki.diff'] = changes
def _render_diff(self, req, db, page): req.perm.assert_permission('WIKI_VIEW') if not page.exists: raise TracError("Version %s of page %s does not exist" % (req.args.get('version'), page.name)) add_stylesheet(req, 'common/css/diff.css') self._set_title(req, page, u'变化') # Ask web spiders to not index old versions req.hdf['html.norobots'] = 1 old_version = req.args.get('old_version') if old_version: old_version = int(old_version) if old_version == page.version: old_version = None elif old_version > page.version: # FIXME: what about reverse diffs? old_version, page = page.version, \ WikiPage(self.env, page.name, old_version) latest_page = WikiPage(self.env, page.name) new_version = int(page.version) info = { 'version': new_version, 'latest_version': latest_page.version, 'history_href': req.href.wiki(page.name, action='history') } num_changes = 0 old_page = None prev_version = next_version = None for version,t,author,comment,ipnr in latest_page.get_history(): if version == new_version: if t: info['time'] = format_datetime(t) info['time_delta'] = pretty_timedelta(t) info['author'] = author or 'anonymous' info['comment'] = wiki_to_html(comment or '--', self.env, req, db) info['ipnr'] = ipnr or '' else: if version < new_version: num_changes += 1 if not prev_version: prev_version = version if (old_version and version == old_version) or \ not old_version: old_page = WikiPage(self.env, page.name, version) info['num_changes'] = num_changes info['old_version'] = version break else: next_version = version req.hdf['wiki'] = info # -- prev/next links if prev_version: add_link(req, 'prev', req.href.wiki(page.name, action='diff', version=prev_version), 'Version %d' % prev_version) if next_version: add_link(req, 'next', req.href.wiki(page.name, action='diff', version=next_version), 'Version %d' % next_version) # -- text diffs diff_style, diff_options = get_diff_options(req) oldtext = old_page and old_page.text.splitlines() or [] newtext = page.text.splitlines() context = 3 for option in diff_options: if option.startswith('-U'): context = int(option[2:]) break if context < 0: context = None changes = hdf_diff(oldtext, newtext, context=context, ignore_blank_lines='-B' in diff_options, ignore_case='-i' in diff_options, ignore_space_changes='-b' in diff_options) req.hdf['wiki.diff'] = changes
def _render_diff(self, req, db, page): req.perm.assert_permission('WIKI_VIEW') if not page.exists: raise TracError("Version %s of page %s does not exist" % (req.args.get('version'), page.name)) add_stylesheet(req, 'common/css/diff.css') self._set_title(req, page, u'变化') # Ask web spiders to not index old versions req.hdf['html.norobots'] = 1 old_version = req.args.get('old_version') if old_version: old_version = int(old_version) if old_version == page.version: old_version = None elif old_version > page.version: # FIXME: what about reverse diffs? old_version, page = page.version, \ WikiPage(self.env, page.name, old_version) latest_page = WikiPage(self.env, page.name) new_version = int(page.version) info = { 'version': new_version, 'latest_version': latest_page.version, 'history_href': req.href.wiki(page.name, action='history') } num_changes = 0 old_page = None prev_version = next_version = None for version, t, author, comment, ipnr in latest_page.get_history(): if version == new_version: if t: info['time'] = format_datetime(t) info['time_delta'] = pretty_timedelta(t) info['author'] = author or 'anonymous' info['comment'] = wiki_to_html(comment or '--', self.env, req, db) info['ipnr'] = ipnr or '' else: if version < new_version: num_changes += 1 if not prev_version: prev_version = version if (old_version and version == old_version) or \ not old_version: old_page = WikiPage(self.env, page.name, version) info['num_changes'] = num_changes info['old_version'] = version break else: next_version = version req.hdf['wiki'] = info # -- prev/next links if prev_version: add_link( req, 'prev', req.href.wiki(page.name, action='diff', version=prev_version), 'Version %d' % prev_version) if next_version: add_link( req, 'next', req.href.wiki(page.name, action='diff', version=next_version), 'Version %d' % next_version) # -- text diffs diff_style, diff_options = get_diff_options(req) oldtext = old_page and old_page.text.splitlines() or [] newtext = page.text.splitlines() context = 3 for option in diff_options: if option.startswith('-U'): context = int(option[2:]) break if context < 0: context = None changes = hdf_diff(oldtext, newtext, context=context, ignore_blank_lines='-B' in diff_options, ignore_case='-i' in diff_options, ignore_space_changes='-b' in diff_options) req.hdf['wiki.diff'] = changes
def _render_diff(self, req, db, page): req.perm.assert_permission("WIKI_VIEW") if not page.exists: raise TracError, "Version %s of page %s does not exist" % (req.args.get("version"), page.name) add_stylesheet(req, "common/css/diff.css") req.hdf["title"] = page.name + " (diff)" # Ask web spiders to not index old versions req.hdf["html.norobots"] = 1 old_version = req.args.get("old_version") if old_version: old_version = int(old_version) if old_version == page.version: old_version = None elif old_version > page.version: old_version, page = page.version, WikiPage(self.env, page.name, old_version) info = {"version": page.version, "history_href": self.env.href.wiki(page.name, action="history")} num_changes = 0 old_page = None for version, t, author, comment, ipnr in page.get_history(): if version == page.version: if t: info["time"] = format_datetime(t) info["time_delta"] = pretty_timedelta(t) info["author"] = author or "anonymous" info["comment"] = comment or "--" info["ipnr"] = ipnr or "" else: num_changes += 1 if version < page.version: if (old_version and version == old_version) or not old_version: old_page = WikiPage(self.env, page.name, version) info["num_changes"] = num_changes info["old_version"] = version break req.hdf["wiki"] = info diff_style, diff_options = get_diff_options(req) oldtext = old_page and old_page.text.splitlines() or [] newtext = page.text.splitlines() context = 3 for option in diff_options: if option.startswith("-U"): context = int(option[2:]) break if context < 0: context = None changes = hdf_diff( oldtext, newtext, context=context, ignore_blank_lines="-B" in diff_options, ignore_case="-i" in diff_options, ignore_space_changes="-b" in diff_options, ) req.hdf["wiki.diff"] = changes