Mercurial > kallithea
comparison rhodecode/controllers/shortlog.py @ 3039:a520d542697e beta
Implemented file history page for showing detailed changelog for a given file
- fixed git detection of filenode history when executed on directory
- shortlog uses urlify_commit function now
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 28 Nov 2012 01:27:21 +0100 |
parents | a16f9a76c26f |
children | ec483ce69ad9 |
comparison
equal
deleted
inserted
replaced
3038:16456e7b2231 | 3039:a520d542697e |
---|---|
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. | 24 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
25 | 25 |
26 import logging | 26 import logging |
27 | 27 |
28 from pylons import tmpl_context as c, request, url | 28 from pylons import tmpl_context as c, request, url |
29 from pylons.i18n.translation import _ | |
29 | 30 |
31 from rhodecode.lib import helpers as h | |
30 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | 32 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
31 from rhodecode.lib.base import BaseRepoController, render | 33 from rhodecode.lib.base import BaseRepoController, render |
32 from rhodecode.lib.helpers import RepoPage | 34 from rhodecode.lib.helpers import RepoPage |
33 from pylons.controllers.util import redirect | 35 from pylons.controllers.util import redirect |
34 from rhodecode.lib.utils2 import safe_int | 36 from rhodecode.lib.utils2 import safe_int |
37 from rhodecode.lib.vcs.exceptions import NodeDoesNotExistError, ChangesetError,\ | |
38 RepositoryError | |
35 | 39 |
36 log = logging.getLogger(__name__) | 40 log = logging.getLogger(__name__) |
37 | 41 |
38 | 42 |
39 class ShortlogController(BaseRepoController): | 43 class ShortlogController(BaseRepoController): |
42 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', | 46 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', |
43 'repository.admin') | 47 'repository.admin') |
44 def __before__(self): | 48 def __before__(self): |
45 super(ShortlogController, self).__before__() | 49 super(ShortlogController, self).__before__() |
46 | 50 |
47 def index(self, repo_name): | 51 def __get_cs_or_redirect(self, rev, repo_name, redirect_after=True): |
52 """ | |
53 Safe way to get changeset if error occur it redirects to tip with | |
54 proper message | |
55 | |
56 :param rev: revision to fetch | |
57 :param repo_name: repo name to redirect after | |
58 """ | |
59 | |
60 try: | |
61 return c.rhodecode_repo.get_changeset(rev) | |
62 except RepositoryError, e: | |
63 h.flash(str(e), category='warning') | |
64 redirect(h.url('shortlog_home', repo_name=repo_name)) | |
65 | |
66 def index(self, repo_name, revision=None, f_path=None): | |
48 p = safe_int(request.params.get('page', 1), 1) | 67 p = safe_int(request.params.get('page', 1), 1) |
49 size = safe_int(request.params.get('size', 20), 20) | 68 size = safe_int(request.params.get('size', 20), 20) |
50 | 69 |
51 def url_generator(**kw): | 70 def url_generator(**kw): |
52 return url('shortlog_home', repo_name=repo_name, size=size, **kw) | 71 return url('shortlog_home', repo_name=repo_name, size=size, **kw) |
53 | 72 |
54 c.repo_changesets = RepoPage(c.rhodecode_repo, page=p, | 73 collection = c.rhodecode_repo |
74 c.file_history = f_path | |
75 if f_path: | |
76 f_path = f_path.lstrip('/') | |
77 # get the history for the file ! | |
78 tip_cs = c.rhodecode_repo.get_changeset() | |
79 try: | |
80 collection = tip_cs.get_file_history(f_path) | |
81 except (NodeDoesNotExistError, ChangesetError): | |
82 #this node is not present at tip ! | |
83 try: | |
84 cs = self.__get_cs_or_redirect(revision, repo_name) | |
85 collection = cs.get_file_history(f_path) | |
86 except RepositoryError, e: | |
87 h.flash(str(e), category='warning') | |
88 redirect(h.url('shortlog_home', repo_name=repo_name)) | |
89 collection = list(reversed(collection)) | |
90 | |
91 c.repo_changesets = RepoPage(collection, page=p, | |
55 items_per_page=size, url=url_generator) | 92 items_per_page=size, url=url_generator) |
56 page_revisions = [x.raw_id for x in list(c.repo_changesets)] | 93 page_revisions = [x.raw_id for x in list(collection)] |
57 c.statuses = c.rhodecode_db_repo.statuses(page_revisions) | 94 c.statuses = c.rhodecode_db_repo.statuses(page_revisions) |
58 | 95 |
59 if not c.repo_changesets: | 96 if not c.repo_changesets: |
97 h.flash(_('There are no changesets yet'), category='warning') | |
60 return redirect(url('summary_home', repo_name=repo_name)) | 98 return redirect(url('summary_home', repo_name=repo_name)) |
61 | 99 |
62 c.shortlog_data = render('shortlog/shortlog_data.html') | 100 c.shortlog_data = render('shortlog/shortlog_data.html') |
63 if request.environ.get('HTTP_X_PARTIAL_XHR'): | 101 if request.environ.get('HTTP_X_PARTIAL_XHR'): |
64 return c.shortlog_data | 102 return c.shortlog_data |