changeset 2996:ebe3e388bbb3 beta

new patch function, and urls schema. now rhodecode generates - diff - plain diff - patch files both for git and hg
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 10 Nov 2012 03:17:24 +0100
parents 32471bd1f4ee
children da3926d9e56e
files rhodecode/config/routing.py rhodecode/controllers/changeset.py rhodecode/lib/diffs.py rhodecode/templates/changelog/changelog.html rhodecode/templates/changeset/changeset.html rhodecode/templates/changeset/diff_block.html rhodecode/templates/changeset/patch_changeset.html rhodecode/templates/changeset/raw_changeset.html
diffstat 8 files changed, 77 insertions(+), 41 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/config/routing.py	Mon Nov 05 19:57:29 2012 +0100
+++ b/rhodecode/config/routing.py	Sat Nov 10 03:17:24 2012 +0100
@@ -421,6 +421,28 @@
                 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 @@
                 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')
 
--- a/rhodecode/controllers/changeset.py	Mon Nov 05 19:57:29 2012 +0100
+++ b/rhodecode/controllers/changeset.py	Sat Nov 10 03:17:24 2012 +0100
@@ -51,6 +51,7 @@
 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 @@
         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 @@
 
             _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 @@
                                      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):
--- a/rhodecode/lib/diffs.py	Mon Nov 05 19:57:29 2012 +0100
+++ b/rhodecode/lib/diffs.py	Sat Nov 10 03:17:24 2012 +0100
@@ -262,7 +262,7 @@
             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 @@
 
     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',
--- a/rhodecode/templates/changelog/changelog.html	Mon Nov 05 19:57:29 2012 +0100
+++ b/rhodecode/templates/changelog/changelog.html	Sat Nov 10 03:17:24 2012 +0100
@@ -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){
--- a/rhodecode/templates/changeset/changeset.html	Mon Nov 05 19:57:29 2012 +0100
+++ b/rhodecode/templates/changeset/changeset.html	Sat Nov 10 03:17:24 2012 +0100
@@ -46,8 +46,9 @@
                     %endif
                 </div>
                 <div class="diff-actions">
-                  <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='raw')}"  class="tooltip" title="${h.tooltip(_('raw diff'))}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
-                  <a href="${h.url('raw_changeset_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download')}"  class="tooltip" title="${h.tooltip(_('download diff'))}"><img class="icon" src="${h.url('/images/icons/page_white_get.png')}"/></a>
+                  <a href="${h.url('changeset_raw_home',repo_name=c.repo_name,revision=c.changeset.raw_id)}"  class="tooltip" title="${h.tooltip(_('raw diff'))}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
+                  <a href="${h.url('changeset_patch_home',repo_name=c.repo_name,revision=c.changeset.raw_id)}"  class="tooltip" title="${h.tooltip(_('patch diff'))}"><img class="icon" src="${h.url('/images/icons/page_add.png')}"/></a>
+                  <a href="${h.url('changeset_download_home',repo_name=c.repo_name,revision=c.changeset.raw_id,diff='download')}"  class="tooltip" title="${h.tooltip(_('download diff'))}"><img class="icon" src="${h.url('/images/icons/page_save.png')}"/></a>
                   ${c.ignorews_url(request.GET)}
                   ${c.context_url(request.GET)}
                 </div>
@@ -68,7 +69,7 @@
 	             </div>
 	             <div class="right">
 		             <div class="changes">
-                        % 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:
 		                 <span class="removed" title="${_('removed')}">${len(c.changeset.removed)}</span>
 		                 <span class="changed" title="${_('changed')}">${len(c.changeset.changed)}</span>
 		                 <span class="added" title="${_('added')}">${len(c.changeset.added)}</span>
--- a/rhodecode/templates/changeset/diff_block.html	Mon Nov 05 19:57:29 2012 +0100
+++ b/rhodecode/templates/changeset/diff_block.html	Sat Nov 10 03:17:24 2012 +0100
@@ -16,9 +16,9 @@
                     revision=cs2,f_path=h.safe_unicode(path)))}
                 </div>
                 <div class="diff-actions">
-                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='diff',fulldiff=1)}" class="tooltip" title="${h.tooltip(_('diff'))}"><img class="icon" src="${h.url('/images/icons/page_white_go.png')}"/></a>
+                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='diff',fulldiff=1)}" class="tooltip" title="${h.tooltip(_('show full diff for this file'))}"><img class="icon" src="${h.url('/images/icons/page_white_go.png')}"/></a>
                   <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='raw')}" class="tooltip" title="${h.tooltip(_('raw diff'))}"><img class="icon" src="${h.url('/images/icons/page_white.png')}"/></a>
-                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='download')}" class="tooltip" title="${h.tooltip(_('download diff'))}"><img class="icon" src="${h.url('/images/icons/page_white_get.png')}"/></a>
+                  <a href="${h.url('files_diff_home',repo_name=c.repo_name,f_path=h.safe_unicode(path),diff2=cs2,diff1=cs1,diff='download')}" class="tooltip" title="${h.tooltip(_('download diff'))}"><img class="icon" src="${h.url('/images/icons/page_save.png')}"/></a>
                   ${c.ignorews_url(request.GET, h.FID(cs2,path))}
                   ${c.context_url(request.GET, h.FID(cs2,path))}
                 </div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rhodecode/templates/changeset/patch_changeset.html	Sat Nov 10 03:17:24 2012 +0100
@@ -0,0 +1,17 @@
+%if h.is_hg(c.rhodecode_repo):
+# ${c.rhodecode_repo.alias.upper()} changeset patch
+# User ${c.changeset.author|n}
+# Date ${c.changeset.date}
+# 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
+${c.diff|n}
--- a/rhodecode/templates/changeset/raw_changeset.html	Mon Nov 05 19:57:29 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-%if h.is_hg(c.rhodecode_repo):
-# ${c.rhodecode_repo.alias.upper()} changeset patch
-# User ${c.changeset.author|n}
-# Date ${c.changeset.date}
-# Node ID ${c.changeset.raw_id}
-${c.parent_tmpl}
-${c.changeset.message}
-%endif
-%for FID, (cs1, cs2, change, path, diff, stats) in c.changes[c.changeset.raw_id].iteritems():
-${diff|n}
-%endfor