##// END OF EJS Templates
fixed wrong clone url for anonymous access
marcink -
r936:e1c9903d beta
parent child Browse files
Show More
@@ -1,147 +1,147 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.controllers.summary
4 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5 5
6 6 Summary controller for Rhodecode
7 7
8 8 :created_on: Apr 18, 2010
9 9 :author: marcink
10 10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 11 :license: GPLv3, see COPYING for more details.
12 12 """
13 13 # This program is free software; you can redistribute it and/or
14 14 # modify it under the terms of the GNU General Public License
15 15 # as published by the Free Software Foundation; version 2
16 16 # of the License or (at your opinion) any later version of the license.
17 17 #
18 18 # This program is distributed in the hope that it will be useful,
19 19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 21 # GNU General Public License for more details.
22 22 #
23 23 # You should have received a copy of the GNU General Public License
24 24 # along with this program; if not, write to the Free Software
25 25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
26 26 # MA 02110-1301, USA.
27 27
28 28 import calendar
29 29 import logging
30 30 from time import mktime
31 31 from datetime import datetime, timedelta
32 32
33 33 from vcs.exceptions import ChangesetError
34 34
35 35 from pylons import tmpl_context as c, request, url
36 36 from pylons.i18n.translation import _
37 37
38 38 from rhodecode.model.scm import ScmModel
39 39 from rhodecode.model.db import Statistics
40 40
41 41 from rhodecode.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
42 42 from rhodecode.lib.base import BaseController, render
43 43 from rhodecode.lib.utils import OrderedDict, EmptyChangeset
44 44
45 45 from rhodecode.lib.celerylib import run_task
46 46 from rhodecode.lib.celerylib.tasks import get_commits_stats
47 47
48 48 from webhelpers.paginate import Page
49 49
50 50 try:
51 51 import json
52 52 except ImportError:
53 53 #python 2.5 compatibility
54 54 import simplejson as json
55 55 log = logging.getLogger(__name__)
56 56
57 57 class SummaryController(BaseController):
58 58
59 59 @LoginRequired()
60 60 @HasRepoPermissionAnyDecorator('repository.read', 'repository.write',
61 61 'repository.admin')
62 62 def __before__(self):
63 63 super(SummaryController, self).__before__()
64 64
65 65 def index(self):
66 66 scm_model = ScmModel()
67 67 c.repo_info = scm_model.get_repo(c.repo_name)
68 68 c.following = scm_model.is_following_repo(c.repo_name,
69 69 c.rhodecode_user.user_id)
70 70 def url_generator(**kw):
71 71 return url('shortlog_home', repo_name=c.repo_name, **kw)
72 72
73 73 c.repo_changesets = Page(c.repo_info, page=1, items_per_page=10,
74 74 url=url_generator)
75 75
76 76 e = request.environ
77 77
78 78 if self.rhodecode_user.username == 'default':
79 79 #for default(anonymous) user we don't need to pass credentials
80 80 username = ''
81 81 password = ''
82 82 else:
83 83 username = str(c.rhodecode_user.username)
84 password = ''
84 password = '@'
85 85
86 uri = u'%(protocol)s://%(user)s%(password)s@%(host)s%(prefix)s/%(repo_name)s' % {
86 uri = u'%(protocol)s://%(user)s%(password)s%(host)s%(prefix)s/%(repo_name)s' % {
87 87 'protocol': e.get('wsgi.url_scheme'),
88 88 'user':username,
89 89 'password':password,
90 90 'host':e.get('HTTP_HOST'),
91 91 'prefix':e.get('SCRIPT_NAME'),
92 92 'repo_name':c.repo_name, }
93 93 c.clone_repo_url = uri
94 94 c.repo_tags = OrderedDict()
95 95 for name, hash in c.repo_info.tags.items()[:10]:
96 96 try:
97 97 c.repo_tags[name] = c.repo_info.get_changeset(hash)
98 98 except ChangesetError:
99 99 c.repo_tags[name] = EmptyChangeset(hash)
100 100
101 101 c.repo_branches = OrderedDict()
102 102 for name, hash in c.repo_info.branches.items()[:10]:
103 103 try:
104 104 c.repo_branches[name] = c.repo_info.get_changeset(hash)
105 105 except ChangesetError:
106 106 c.repo_branches[name] = EmptyChangeset(hash)
107 107
108 108 td = datetime.today() + timedelta(days=1)
109 109 y, m, d = td.year, td.month, td.day
110 110
111 111 ts_min_y = mktime((y - 1, (td - timedelta(days=calendar.mdays[m])).month,
112 112 d, 0, 0, 0, 0, 0, 0,))
113 113 ts_min_m = mktime((y, (td - timedelta(days=calendar.mdays[m])).month,
114 114 d, 0, 0, 0, 0, 0, 0,))
115 115
116 116 ts_max_y = mktime((y, m, d, 0, 0, 0, 0, 0, 0,))
117 117 if c.repo_info.dbrepo.enable_statistics:
118 118 c.no_data_msg = _('No data loaded yet')
119 119 run_task(get_commits_stats, c.repo_info.name, ts_min_y, ts_max_y)
120 120 else:
121 121 c.no_data_msg = _('Statistics update are disabled for this repository')
122 122 c.ts_min = ts_min_m
123 123 c.ts_max = ts_max_y
124 124
125 125 stats = self.sa.query(Statistics)\
126 126 .filter(Statistics.repository == c.repo_info.dbrepo)\
127 127 .scalar()
128 128
129 129
130 130 if stats and stats.languages:
131 131 c.no_data = False is c.repo_info.dbrepo.enable_statistics
132 132 lang_stats = json.loads(stats.languages)
133 133 c.commit_data = stats.commit_activity
134 134 c.overview_data = stats.commit_activity_combined
135 135 c.trending_languages = json.dumps(OrderedDict(
136 136 sorted(lang_stats.items(), reverse=True,
137 137 key=lambda k: k[1])[:10]
138 138 )
139 139 )
140 140 else:
141 141 c.commit_data = json.dumps({})
142 142 c.overview_data = json.dumps([[ts_min_y, 0], [ts_max_y, 10] ])
143 143 c.trending_languages = json.dumps({})
144 144 c.no_data = True
145 145
146 146 return render('summary/summary.html')
147 147
General Comments 0
You need to be logged in to leave comments. Login now