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. |
|
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. |
|
334 | cs1 = filenode_old.changeset.raw_id | |
335 |
cs2 = node. |
|
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. |
|
86 | cs1 = filenode_old.changeset.raw_id | |
87 |
cs2 = filenode_new. |
|
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 |
|
|
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. |
|
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. |
|
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. |
|
37 | ${h.hidden('diff2',c.file.changeset.raw_id)} | |
38 |
${h.select('diff1',c.file. |
|
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. |
|
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 |
|
|
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. |
|
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. |
|
6 | ${h.hidden('diff2',c.file.changeset.raw_id)} | |
7 |
${h.select('diff1',c.file. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
35 | <img alt="gravatar" src="${h.gravatar_url(h.email(c.file.changeset.author),16)}"/> | |
36 | </div> |
|
36 | </div> | |
37 |
<div title="${c.file. |
|
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. |
|
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. |
|
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