Files @ 32471bd1f4ee
Branch filter:

Location: kallithea/rhodecode/templates/changeset/changeset.html - annotation

Marcin Kuzminski
Implemented generation of changesets based
on whole diff instead of per file diff. That
can give a big speed improvement for large changesets in
repositories with large history.
- improved handling of binary files
- show renames of binary files
- implemented new diff limit functionality
- unify diff generation between hg and git
- Added binary indicators for changed files,
- added diff lib tests
1cecc7db3106
1cecc7db3106
1e757ac98988
1e757ac98988
1e757ac98988
76d156bef5a2
1e757ac98988
1e757ac98988
1e757ac98988
79818f546538
1e757ac98988
1e757ac98988
1e757ac98988
fe64fecda0fd
1e757ac98988
1e757ac98988
1e757ac98988
f91d3f9b7230
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
1e757ac98988
28524453bb76
1e757ac98988
0471cbe8b4a7
0471cbe8b4a7
0471cbe8b4a7
9bbde54232dc
44f328d6f209
0471cbe8b4a7
493e03a4d268
493e03a4d268
493e03a4d268
493e03a4d268
493e03a4d268
493e03a4d268
37b3c3244bbc
32471bd1f4ee
f467c75544af
e8c016815ab9
e8c016815ab9
37b3c3244bbc
83e4447077d3
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
3853e37db97c
1e757ac98988
1e757ac98988
1e757ac98988
1e757ac98988
b80c2f617d44
1e757ac98988
1e757ac98988
1e757ac98988
f91d3f9b7230
1e757ac98988
1e757ac98988
1e757ac98988
1cecc7db3106
1cecc7db3106
1cecc7db3106
f91d3f9b7230
f91d3f9b7230
f91d3f9b7230
f91d3f9b7230
f57aaf673743
1e757ac98988
c577e8211d69
c577e8211d69
c577e8211d69
1e757ac98988
1e757ac98988
f91d3f9b7230
f91d3f9b7230
f91d3f9b7230
1e757ac98988
0855c64c571f
0855c64c571f
0855c64c571f
2cfaf199a5a7
2cfaf199a5a7
2cfaf199a5a7
2cfaf199a5a7
2cfaf199a5a7
1e757ac98988
1e757ac98988
ffd07396d315
1e757ac98988
f91d3f9b7230
f91d3f9b7230
1e757ac98988
609ec28bd2d1
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
e8c016815ab9
32471bd1f4ee
32471bd1f4ee
1e757ac98988
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
f91d3f9b7230
1e757ac98988
f91d3f9b7230
1e757ac98988
32471bd1f4ee
f91d3f9b7230
d4a7b6c82efe
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
32471bd1f4ee
f91d3f9b7230
d4a7b6c82efe
d2de0c2f02cd
a0adf8db1416
f91d3f9b7230
58c529332e7e
58c529332e7e
58c529332e7e
58c529332e7e
ad19dfcdb1cc
ad19dfcdb1cc
ad19dfcdb1cc
a0adf8db1416
6f0143e5efe5
7276b170ce8b
d4a7b6c82efe
d4a7b6c82efe
d4a7b6c82efe
04aa0ea1ddd0
04aa0ea1ddd0
04aa0ea1ddd0
d4a7b6c82efe
d4a7b6c82efe
d4a7b6c82efe
d4a7b6c82efe
d4a7b6c82efe
f91d3f9b7230
d4a7b6c82efe
d4a7b6c82efe
d4a7b6c82efe
f91d3f9b7230
c83d3d42ab92
f91d3f9b7230
d4a7b6c82efe
f91d3f9b7230
7276b170ce8b
d4a7b6c82efe
04aa0ea1ddd0
04aa0ea1ddd0
04aa0ea1ddd0
d4a7b6c82efe
1f2ba96de73e
f91d3f9b7230
1f2ba96de73e
1f2ba96de73e
b61e540122f2
7276b170ce8b
f91d3f9b7230
f91d3f9b7230
f91d3f9b7230
d4a7b6c82efe
aaec08ad9daf
## -*- coding: utf-8 -*-

<%inherit file="/base/base.html"/>

<%def name="title()">
    ${_('%s Changeset') % c.repo_name} - r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)} - ${c.rhodecode_name}
</%def>

<%def name="breadcrumbs_links()">
    ${h.link_to(_(u'Home'),h.url('/'))}
    &raquo;
    ${h.link_to(c.repo_name,h.url('summary_home',repo_name=c.repo_name))}
    &raquo;
    ${_('Changeset')} - <span class='hash'>r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}</span>
</%def>

<%def name="page_nav()">
    ${self.menu('changelog')}
</%def>

<%def name="main()">
<div class="box">
    <!-- box / title -->
    <div class="title">
        ${self.breadcrumbs()}
    </div>
    <script>
    var _USERS_AC_DATA = ${c.users_array|n};
    var _GROUPS_AC_DATA = ${c.users_groups_array|n};
    AJAX_COMMENT_URL = "${url('changeset_comment',repo_name=c.repo_name,revision=c.changeset.raw_id)}";
    AJAX_COMMENT_DELETE_URL = "${url('changeset_comment_delete',repo_name=c.repo_name,comment_id='__COMMENT_ID__')}";
    </script>
    <div class="table">
		<div class="diffblock">
			<div class="code-header">
                <div class="hash">
                 r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
                </div>
                <div class="date">
                  ${h.fmt_date(c.changeset.date)}
                </div>
                <div class="changeset-status-container">
                    %if c.statuses:
                      <div title="${_('Changeset status')}" class="changeset-status-lbl">[${h.changeset_status_lbl(c.statuses[0])}]</div>
                      <div class="changeset-status-ico"><img src="${h.url('/images/icons/flag_status_%s.png' % c.statuses[0])}" /></div>
                    %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>
                  ${c.ignorews_url(request.GET)}
                  ${c.context_url(request.GET)}
                </div>
                <div class="comments-number" style="float:right;padding-right:5px">${ungettext("%d comment", "%d comments", len(c.comments)) % len(c.comments)} ${ungettext("(%d inline)", "(%d inline)", c.inline_cnt) % c.inline_cnt}</div>
			</div>
		</div>
	    <div id="changeset_content">
			<div class="container">
	             <div class="left">
	                 <div class="author">
	                     <div class="gravatar">
	                         <img alt="gravatar" src="${h.gravatar_url(h.email_or_none(c.changeset.author),20)}"/>
	                     </div>
	                     <span>${h.person(c.changeset.author)}</span><br/>
	                     <span><a href="mailto:${h.email_or_none(c.changeset.author)}">${h.email_or_none(c.changeset.author)}</a></span><br/>
	                 </div>
	                 <div class="message">${h.urlify_commit(c.changeset.message, c.repo_name)}</div>
	             </div>
	             <div class="right">
		             <div class="changes">
                        % if len(c.changeset.affected_files) <= c.affected_files_cut_off:
		                 <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>
	                    % else:
                         <span class="removed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
                         <span class="changed" title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
                         <span class="added"   title="${_('affected %s files') % len(c.changeset.affected_files)}">!</span>
	                    % endif
		             </div>

		            %if c.changeset.parents:
		             %for p_cs in reversed(c.changeset.parents):
		                 <div class="parent">${_('Parent')}
                     <span class="changeset_id">${p_cs.revision}:<span class="changeset_hash">${h.link_to(h.short_id(p_cs.raw_id),
		                     h.url('changeset_home',repo_name=c.repo_name,revision=p_cs.raw_id),title=p_cs.message)}</span></span>
		                 </div>
		             %endfor
                    %else:
                        <div class="parent">${_('No parents')}</div>
                    %endif
		         <span class="logtags">
                 %if len(c.changeset.parents)>1:
                 <span class="merge">${_('merge')}</span>
                 %endif
		             %if c.changeset.branch:
                     <span class="branchtag" title="${'%s %s' % (_('branch'),c.changeset.branch)}">
		             ${h.link_to(c.changeset.branch,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}
                     </span>
                     %endif
		             %for tag in c.changeset.tags:
		                 <span class="tagtag"  title="${'%s %s' % (_('tag'),tag)}">
		                 ${h.link_to(tag,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id))}</span>
		             %endfor
		         </span>
	                </div>
	        </div>
	        <span>
            % if c.limited_diff:
            ${_('%s files affected:') % (len(c.changeset.affected_files))}
            % else:
	        ${_('%s files affected with %s insertions and %s deletions:') % (len(c.changeset.affected_files),c.lines_added,c.lines_deleted)}
	        %endif
            </span>
	        <div class="cs_files">
              %for FID, (cs1, cs2, change, path, diff, stats) in c.changes[c.changeset.raw_id].iteritems():
                  <div class="cs_${change}">
                        <div class="node">
                            <a href="#${FID}">${h.safe_unicode(path)}</a>
                        </div>
                    <div class="changes">${h.fancy_file_stats(stats)}</div>
                  </div>
              %endfor
              % if c.limited_diff:
                <h5>${_('Changeset was too big and was cut off...')}</h5>
              % endif
	        </div>
	    </div>

    </div>

    ## diff block
    <%namespace name="diff_block" file="/changeset/diff_block.html"/>
    ${diff_block.diff_block(c.changes[c.changeset.raw_id])}

    % if c.limited_diff:
      <h4>${_('Changeset was too big and was cut off...')}</h4>
    % endif

    ## template for inline comment form
    <%namespace name="comment" file="/changeset/changeset_file_comment.html"/>
    ${comment.comment_inline_form()}

    ## render comments and inlines
    ${comment.generate_comments()}

    ## main comment form and it status
    ${comment.comments(h.url('changeset_comment', repo_name=c.repo_name, revision=c.changeset.raw_id),
                       h.changeset_status(c.rhodecode_db_repo, c.changeset.raw_id))}

    ## FORM FOR MAKING JS ACTION AS CHANGESET COMMENTS
    <script type="text/javascript">
      YUE.onDOMReady(function(){
          YUE.on(YUQ('.show-inline-comments'),'change',function(e){
              var show = 'none';
              var target = e.currentTarget;
              if(target == null){
                  target = this;
              }
              if(target.checked){
                  var show = ''
              }
              var boxid = YUD.getAttribute(target,'id_for');
              var comments = YUQ('#{0} .inline-comments'.format(boxid));
              for(c in comments){
                 YUD.setStyle(comments[c],'display',show);
              }
              var btns = YUQ('#{0} .inline-comments-button'.format(boxid));
              for(c in btns){
                  YUD.setStyle(btns[c],'display',show);
               }
          })

          YUE.on(YUQ('.line'),'click',function(e){
              var tr = e.currentTarget;
              if(tr == null){
                  tr = this;
              }
              injectInlineForm(tr);
          });

          // inject comments into they proper positions
          var file_comments = YUQ('.inline-comment-placeholder');
          renderInlineComments(file_comments);
      })

    </script>

    </div>
</%def>