# HG changeset patch # User Marcin Kuzminski # Date 2012-11-10 02:17:24 # Node ID ebe3e388bbb320926823ce0b24cccf25db9b7225 # Parent 32471bd1f4ee8f1dd30b3f051c503f734ad7ccdc new patch function, and urls schema. now rhodecode generates - diff - plain diff - patch files both for git and hg diff --git a/rhodecode/config/routing.py b/rhodecode/config/routing.py --- a/rhodecode/config/routing.py +++ b/rhodecode/config/routing.py @@ -421,6 +421,28 @@ def make_map(config): controller='changeset', revision='tip', conditions=dict(function=check_repo)) + #still working url for backward compat. + rmap.connect('raw_changeset_home_depraced', + '/{repo_name:.*?}/raw-changeset/{revision}', + controller='changeset', action='changeset_raw', + revision='tip', conditions=dict(function=check_repo)) + + ## new URLs + rmap.connect('changeset_raw_home', + '/{repo_name:.*?}/changeset-diff/{revision}', + controller='changeset', action='changeset_raw', + revision='tip', conditions=dict(function=check_repo)) + + rmap.connect('changeset_patch_home', + '/{repo_name:.*?}/changeset-patch/{revision}', + controller='changeset', action='changeset_patch', + revision='tip', conditions=dict(function=check_repo)) + + rmap.connect('changeset_download_home', + '/{repo_name:.*?}/changeset-download/{revision}', + controller='changeset', action='changeset_download', + revision='tip', conditions=dict(function=check_repo)) + rmap.connect('changeset_comment', '/{repo_name:.*?}/changeset/{revision}/comment', controller='changeset', revision='tip', action='comment', @@ -431,11 +453,6 @@ def make_map(config): controller='changeset', action='delete_comment', conditions=dict(function=check_repo, method=["DELETE"])) - rmap.connect('raw_changeset_home', - '/{repo_name:.*?}/raw-changeset/{revision}', - controller='changeset', action='raw_changeset', - revision='tip', conditions=dict(function=check_repo)) - rmap.connect('changeset_info', '/changeset_info/{repo_name:.*?}/{revision}', controller='changeset', action='changeset_info') diff --git a/rhodecode/controllers/changeset.py b/rhodecode/controllers/changeset.py --- a/rhodecode/controllers/changeset.py +++ b/rhodecode/controllers/changeset.py @@ -51,6 +51,7 @@ from rhodecode.lib.diffs import LimitedD from rhodecode.model.repo import RepoModel from rhodecode.lib.exceptions import StatusChangeOnClosedPullRequestError from rhodecode.lib.vcs.backends.base import EmptyChangeset +from rhodecode.lib.utils2 import safe_unicode log = logging.getLogger(__name__) @@ -179,12 +180,11 @@ class ChangesetController(BaseRepoContro c.users_array = repo_model.get_users_js() c.users_groups_array = repo_model.get_users_groups_js() - def index(self, revision): - method = request.GET.get('diff', 'show') + def index(self, revision, method='show'): c.anchor_url = anchor_url c.ignorews_url = _ignorews_url c.context_url = _context_url - limit_off = request.GET.get('fulldiff') + c.fulldiff = fulldiff = request.GET.get('fulldiff') #get ranges of revisions if preset rev_range = revision.split('...')[:2] enable_comments = True @@ -243,7 +243,7 @@ class ChangesetController(BaseRepoContro _diff = c.rhodecode_repo.get_diff(cs1, cs2, ignore_whitespace=ign_whitespace_lcl, context=context_lcl) - diff_limit = self.cut_off_limit if not limit_off else None + diff_limit = self.cut_off_limit if not fulldiff else None diff_processor = diffs.DiffProcessor(_diff, vcs=c.rhodecode_repo.alias, format='gitdiff', @@ -281,20 +281,30 @@ class ChangesetController(BaseRepoContro for x in c.changeset.parents]) if method == 'download': response.content_type = 'text/plain' - response.content_disposition = 'attachment; filename=%s.patch' \ - % revision - return render('changeset/raw_changeset.html') + response.content_disposition = 'attachment; filename=%s.diff' \ + % revision[:12] + return diff + elif method == 'patch': + response.content_type = 'text/plain' + c.diff = safe_unicode(diff) + return render('changeset/patch_changeset.html') elif method == 'raw': response.content_type = 'text/plain' - return render('changeset/raw_changeset.html') + return diff elif method == 'show': if len(c.cs_ranges) == 1: return render('changeset/changeset.html') else: return render('changeset/changeset_range.html') - def raw_changeset(self, revision): - return self.index(revision) + def changeset_raw(self, revision): + return self.index(revision, method='raw') + + def changeset_patch(self, revision): + return self.index(revision, method='patch') + + def changeset_download(self, revision): + return self.index(revision, method='download') @jsonify def comment(self, repo_name, revision): diff --git a/rhodecode/lib/diffs.py b/rhodecode/lib/diffs.py --- a/rhodecode/lib/diffs.py +++ b/rhodecode/lib/diffs.py @@ -262,7 +262,7 @@ class DiffProcessor(object): self.adds += 1 elif l.startswith('-') and not l.startswith('---'): self.removes += 1 - return l + return safe_unicode(l) def _highlight_line_difflib(self, line, next_): """ @@ -574,9 +574,10 @@ class DiffProcessor(object): def as_raw(self, diff_lines=None): """ - Returns raw string as udiff + Returns raw string diff """ - return u''.join(imap(self._line_counter, self._diff.splitlines(1))) + return self._diff + #return u''.join(imap(self._line_counter, self._diff.splitlines(1))) def as_html(self, table_class='code-difftable', line_class='line', new_lineno_class='lineno old', old_lineno_class='lineno new', diff --git a/rhodecode/templates/changelog/changelog.html b/rhodecode/templates/changelog/changelog.html --- a/rhodecode/templates/changelog/changelog.html +++ b/rhodecode/templates/changelog/changelog.html @@ -157,13 +157,14 @@ checked_checkboxes.push(checkboxes[pos]); } } - - if(checked_checkboxes.length>0){ - // modify open pull request to show we have selected cs - YUD.get('open_new_pr').innerHTML = _TM['Open new pull request for selected changesets']; - - }else{ - YUD.get('open_new_pr').innerHTML = _TM['Open new pull request']; + if(YUD.get('open_new_pr')){ + if(checked_checkboxes.length>0){ + // modify open pull request to show we have selected cs + YUD.get('open_new_pr').innerHTML = _TM['Open new pull request for selected changesets']; + + }else{ + YUD.get('open_new_pr').innerHTML = _TM['Open new pull request']; + } } if(checked_checkboxes.length>1){ diff --git a/rhodecode/templates/changeset/changeset.html b/rhodecode/templates/changeset/changeset.html --- a/rhodecode/templates/changeset/changeset.html +++ b/rhodecode/templates/changeset/changeset.html @@ -46,8 +46,9 @@ %endif
- - + + + ${c.ignorews_url(request.GET)} ${c.context_url(request.GET)}
@@ -68,7 +69,7 @@
- % if len(c.changeset.affected_files) <= c.affected_files_cut_off: + % if (len(c.changeset.affected_files) <= c.affected_files_cut_off) or c.fulldiff: ${len(c.changeset.removed)} ${len(c.changeset.changed)} ${len(c.changeset.added)} diff --git a/rhodecode/templates/changeset/diff_block.html b/rhodecode/templates/changeset/diff_block.html --- a/rhodecode/templates/changeset/diff_block.html +++ b/rhodecode/templates/changeset/diff_block.html @@ -16,9 +16,9 @@ revision=cs2,f_path=h.safe_unicode(path)))}
- + - + ${c.ignorews_url(request.GET, h.FID(cs2,path))} ${c.context_url(request.GET, h.FID(cs2,path))}
diff --git a/rhodecode/templates/changeset/raw_changeset.html b/rhodecode/templates/changeset/patch_changeset.html rename from rhodecode/templates/changeset/raw_changeset.html rename to rhodecode/templates/changeset/patch_changeset.html --- a/rhodecode/templates/changeset/raw_changeset.html +++ b/rhodecode/templates/changeset/patch_changeset.html @@ -5,7 +5,13 @@ # Node ID ${c.changeset.raw_id} ${c.parent_tmpl} ${c.changeset.message} + +%elif h.is_git(c.rhodecode_repo): +From 35d9475598be9f807cd800e51212b8f1efbeacd9 Mon Sep 17 00:00:00 2001 +From: ${c.changeset.author} +Date: ${c.changeset.date} +Subject: [PATCH] ${c.changeset.message} +--- + %endif -%for FID, (cs1, cs2, change, path, diff, stats) in c.changes[c.changeset.raw_id].iteritems(): -${diff|n} -%endfor +${c.diff|n}