##// END OF EJS Templates
fixed vcs issue with last_changeset for filenodes...
marcink -
r2084:feb0fccd beta
parent child Browse files
Show More
@@ -317,7 +317,7 b' class ChangesetController(BaseRepoContro'
317 format='gitdiff').raw_diff()
317 format='gitdiff').raw_diff()
318
318
319 cs1 = None
319 cs1 = None
320 cs2 = node.last_changeset.raw_id
320 cs2 = node.changeset.raw_id
321 c.changes.append(('added', node, diff, cs1, cs2))
321 c.changes.append(('added', node, diff, cs1, cs2))
322
322
323 for node in c.changeset.changed:
323 for node in c.changeset.changed:
@@ -331,8 +331,8 b' class ChangesetController(BaseRepoContro'
331 diff = diffs.DiffProcessor(f_gitdiff,
331 diff = diffs.DiffProcessor(f_gitdiff,
332 format='gitdiff').raw_diff()
332 format='gitdiff').raw_diff()
333
333
334 cs1 = filenode_old.last_changeset.raw_id
334 cs1 = filenode_old.changeset.raw_id
335 cs2 = node.last_changeset.raw_id
335 cs2 = node.changeset.raw_id
336 c.changes.append(('changed', node, diff, cs1, cs2))
336 c.changes.append(('changed', node, diff, cs1, cs2))
337
337
338 response.content_type = 'text/plain'
338 response.content_type = 'text/plain'
@@ -83,8 +83,8 b' def wrapped_diff(filenode_old, filenode_'
83 if not diff:
83 if not diff:
84 diff = wrap_to_table(_('No changes detected'))
84 diff = wrap_to_table(_('No changes detected'))
85
85
86 cs1 = filenode_old.last_changeset.raw_id
86 cs1 = filenode_old.changeset.raw_id
87 cs2 = filenode_new.last_changeset.raw_id
87 cs2 = filenode_new.changeset.raw_id
88
88
89 return size, cs1, cs2, diff, stats
89 return size, cs1, cs2, diff, stats
90
90
@@ -187,9 +187,8 b' class MercurialChangeset(BaseChangeset):'
187 """
187 """
188 Returns last commit of the file at the given ``path``.
188 Returns last commit of the file at the given ``path``.
189 """
189 """
190 fctx = self._get_filectx(path)
190 node = self.get_node(path)
191 changeset = self.repository.get_changeset(fctx.linkrev())
191 return node.history[0]
192 return changeset
193
192
194 def get_file_history(self, path):
193 def get_file_history(self, path):
195 """
194 """
@@ -306,14 +306,14 b' class FileNode(Node):'
306 attribute to indicate that type should *NOT* be calculated).
306 attribute to indicate that type should *NOT* be calculated).
307 """
307 """
308 if hasattr(self, '_mimetype'):
308 if hasattr(self, '_mimetype'):
309 if (isinstance(self._mimetype,(tuple,list,)) and
309 if (isinstance(self._mimetype, (tuple, list,)) and
310 len(self._mimetype) == 2):
310 len(self._mimetype) == 2):
311 return self._mimetype
311 return self._mimetype
312 else:
312 else:
313 raise NodeError('given _mimetype attribute must be an 2 '
313 raise NodeError('given _mimetype attribute must be an 2 '
314 'element list or tuple')
314 'element list or tuple')
315
315
316 mtype,encoding = mimetypes.guess_type(self.name)
316 mtype, encoding = mimetypes.guess_type(self.name)
317
317
318 if mtype is None:
318 if mtype is None:
319 if self.is_binary:
319 if self.is_binary:
@@ -322,7 +322,7 b' class FileNode(Node):'
322 else:
322 else:
323 mtype = 'text/plain'
323 mtype = 'text/plain'
324 encoding = None
324 encoding = None
325 return mtype,encoding
325 return mtype, encoding
326
326
327 @LazyProperty
327 @LazyProperty
328 def mimetype(self):
328 def mimetype(self):
@@ -392,8 +392,8 b' class FileNode(Node):'
392 """
392 """
393 Returns True if file has binary content.
393 Returns True if file has binary content.
394 """
394 """
395 bin = '\0' in self.content
395 _bin = '\0' in self.content
396 return bin
396 return _bin
397
397
398 @LazyProperty
398 @LazyProperty
399 def extension(self):
399 def extension(self):
@@ -406,6 +406,10 b' class FileNode(Node):'
406 """
406 """
407 return bool(self.mode & stat.S_IXUSR)
407 return bool(self.mode & stat.S_IXUSR)
408
408
409 def __repr__(self):
410 return '<%s %r @ %s>' % (self.__class__.__name__, self.path,
411 self.changeset.short_id)
412
409
413
410 class RemovedFileNode(FileNode):
414 class RemovedFileNode(FileNode):
411 """
415 """
@@ -537,6 +541,10 b' class DirNode(Node):'
537
541
538 return size
542 return size
539
543
544 def __repr__(self):
545 return '<%s %r @ %s>' % (self.__class__.__name__, self.path,
546 self.changeset.short_id)
547
540
548
541 class RootNode(DirNode):
549 class RootNode(DirNode):
542 """
550 """
@@ -15,17 +15,17 b' from rhodecode.lib.vcs.exceptions import'
15 from rhodecode.lib.vcs.nodes import FileNode, NodeError
15 from rhodecode.lib.vcs.nodes import FileNode, NodeError
16
16
17
17
18 def get_udiff(filenode_old, filenode_new,show_whitespace=True):
18 def get_udiff(filenode_old, filenode_new, show_whitespace=True):
19 """
19 """
20 Returns unified diff between given ``filenode_old`` and ``filenode_new``.
20 Returns unified diff between given ``filenode_old`` and ``filenode_new``.
21 """
21 """
22 try:
22 try:
23 filenode_old_date = filenode_old.last_changeset.date
23 filenode_old_date = filenode_old.changeset.date
24 except NodeError:
24 except NodeError:
25 filenode_old_date = None
25 filenode_old_date = None
26
26
27 try:
27 try:
28 filenode_new_date = filenode_new.last_changeset.date
28 filenode_new_date = filenode_new.changeset.date
29 except NodeError:
29 except NodeError:
30 filenode_new_date = None
30 filenode_new_date = None
31
31
@@ -34,8 +34,8 b''
34 <dd>
34 <dd>
35 <div>
35 <div>
36 ${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')}
36 ${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')}
37 ${h.hidden('diff2',c.file.last_changeset.raw_id)}
37 ${h.hidden('diff2',c.file.changeset.raw_id)}
38 ${h.select('diff1',c.file.last_changeset.raw_id,c.file_history)}
38 ${h.select('diff1',c.file.changeset.raw_id,c.file_history)}
39 ${h.submit('diff','diff to revision',class_="ui-btn")}
39 ${h.submit('diff','diff to revision',class_="ui-btn")}
40 ${h.submit('show_rev','show at revision',class_="ui-btn")}
40 ${h.submit('show_rev','show at revision',class_="ui-btn")}
41 ${h.end_form()}
41 ${h.end_form()}
@@ -46,7 +46,7 b''
46 <div class="code-header">
46 <div class="code-header">
47 <div class="stats">
47 <div class="stats">
48 <div class="left"><img src="${h.url('/images/icons/file.png')}"/></div>
48 <div class="left"><img src="${h.url('/images/icons/file.png')}"/></div>
49 <div class="left item">${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))}</div>
49 <div class="left item">${h.link_to("r%s:%s" % (c.file.changeset.revision,h.short_id(c.file.changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id))}</div>
50 <div class="left item">${h.format_byte_size(c.file.size,binary=True)}</div>
50 <div class="left item">${h.format_byte_size(c.file.size,binary=True)}</div>
51 <div class="left item last">${c.file.mimetype}</div>
51 <div class="left item last">${c.file.mimetype}</div>
52 <div class="buttons">
52 <div class="buttons">
@@ -47,7 +47,7 b''
47 <th>${_('Name')}</th>
47 <th>${_('Name')}</th>
48 <th>${_('Size')}</th>
48 <th>${_('Size')}</th>
49 <th>${_('Mimetype')}</th>
49 <th>${_('Mimetype')}</th>
50 <th>${_('Revision')}</th>
50 <th>${_('Last Revision')}</th>
51 <th>${_('Last modified')}</th>
51 <th>${_('Last modified')}</th>
52 <th>${_('Last commiter')}</th>
52 <th>${_('Last commiter')}</th>
53 </tr>
53 </tr>
@@ -70,7 +70,7 b''
70 %for cnt,node in enumerate(c.file):
70 %for cnt,node in enumerate(c.file):
71 <tr class="parity${cnt%2}">
71 <tr class="parity${cnt%2}">
72 <td>
72 <td>
73 ${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=h.safe_unicode(node.path)),class_=file_class(node)+" ypjax-link")}
73 ${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=h.safe_unicode(node.path)),class_=file_class(node)+" ypjax-link")}
74 </td>
74 </td>
75 <td>
75 <td>
76 %if node.is_file():
76 %if node.is_file():
@@ -42,7 +42,7 b''
42 <div class="code-header">
42 <div class="code-header">
43 <div class="stats">
43 <div class="stats">
44 <div class="left"><img src="${h.url('/images/icons/file.png')}"/></div>
44 <div class="left"><img src="${h.url('/images/icons/file.png')}"/></div>
45 <div class="left item">${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))}</div>
45 <div class="left item">${h.link_to("r%s:%s" % (c.file.changeset.revision,h.short_id(c.file.changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id))}</div>
46 <div class="left item">${h.format_byte_size(c.file.size,binary=True)}</div>
46 <div class="left item">${h.format_byte_size(c.file.size,binary=True)}</div>
47 <div class="left item last">${c.file.mimetype}</div>
47 <div class="left item last">${c.file.mimetype}</div>
48 <div class="buttons">
48 <div class="buttons">
@@ -3,8 +3,8 b''
3 <dd>
3 <dd>
4 <div>
4 <div>
5 ${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')}
5 ${h.form(h.url('files_diff_home',repo_name=c.repo_name,f_path=c.f_path),method='get')}
6 ${h.hidden('diff2',c.file.last_changeset.raw_id)}
6 ${h.hidden('diff2',c.file.changeset.raw_id)}
7 ${h.select('diff1',c.file.last_changeset.raw_id,c.file_history)}
7 ${h.select('diff1',c.file.changeset.raw_id,c.file_history)}
8 ${h.submit('diff','diff to revision',class_="ui-btn")}
8 ${h.submit('diff','diff to revision',class_="ui-btn")}
9 ${h.submit('show_rev','show at revision',class_="ui-btn")}
9 ${h.submit('show_rev','show at revision',class_="ui-btn")}
10 ${h.end_form()}
10 ${h.end_form()}
@@ -16,27 +16,27 b''
16 <div class="code-header">
16 <div class="code-header">
17 <div class="stats">
17 <div class="stats">
18 <div class="left img"><img src="${h.url('/images/icons/file.png')}"/></div>
18 <div class="left img"><img src="${h.url('/images/icons/file.png')}"/></div>
19 <div class="left item"><pre>${h.link_to("r%s:%s" % (c.file.last_changeset.revision,h.short_id(c.file.last_changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id))}</pre></div>
19 <div class="left item"><pre>${h.link_to("r%s:%s" % (c.file.changeset.revision,h.short_id(c.file.changeset.raw_id)),h.url('changeset_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id))}</pre></div>
20 <div class="left item"><pre>${h.format_byte_size(c.file.size,binary=True)}</pre></div>
20 <div class="left item"><pre>${h.format_byte_size(c.file.size,binary=True)}</pre></div>
21 <div class="left item last"><pre>${c.file.mimetype}</pre></div>
21 <div class="left item last"><pre>${c.file.mimetype}</pre></div>
22 <div class="buttons">
22 <div class="buttons">
23 ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
23 ${h.link_to(_('show annotation'),h.url('files_annotate_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
24 ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
24 ${h.link_to(_('show as raw'),h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
25 ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
25 ${h.link_to(_('download as raw'),h.url('files_rawfile_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
26 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
26 % if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
27 % if not c.file.is_binary:
27 % if not c.file.is_binary:
28 ${h.link_to(_('edit'),h.url('files_edit_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
28 ${h.link_to(_('edit'),h.url('files_edit_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path),class_="ui-btn")}
29 % endif
29 % endif
30 % endif
30 % endif
31 </div>
31 </div>
32 </div>
32 </div>
33 <div class="author">
33 <div class="author">
34 <div class="gravatar">
34 <div class="gravatar">
35 <img alt="gravatar" src="${h.gravatar_url(h.email(c.file.last_changeset.author),16)}"/>
35 <img alt="gravatar" src="${h.gravatar_url(h.email(c.file.changeset.author),16)}"/>
36 </div>
36 </div>
37 <div title="${c.file.last_changeset.author}" class="user">${h.person(c.file.last_changeset.author)}</div>
37 <div title="${c.file.changeset.author}" class="user">${h.person(c.file.changeset.author)}</div>
38 </div>
38 </div>
39 <div class="commit">${h.urlify_commit(c.file.last_changeset.message,c.repo_name)}</div>
39 <div class="commit">${h.urlify_commit(c.file.changeset.message,c.repo_name)}</div>
40 </div>
40 </div>
41 <div class="code-body">
41 <div class="code-body">
42 %if c.file.is_binary:
42 %if c.file.is_binary:
@@ -46,7 +46,7 b''
46 ${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
46 ${h.pygmentize(c.file,linenos=True,anchorlinenos=True,lineanchors='L',cssclass="code-highlight")}
47 %else:
47 %else:
48 ${_('File is too big to display')} ${h.link_to(_('show as raw'),
48 ${_('File is too big to display')} ${h.link_to(_('show as raw'),
49 h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.last_changeset.raw_id,f_path=c.f_path))}
49 h.url('files_raw_home',repo_name=c.repo_name,revision=c.file.changeset.raw_id,f_path=c.f_path))}
50 %endif
50 %endif
51 <script type="text/javascript">
51 <script type="text/javascript">
52 function highlight_lines(lines){
52 function highlight_lines(lines){
General Comments 0
You need to be logged in to leave comments. Login now