##// END OF EJS Templates
#551 show breadcrumbs in summary view for repositories inside a group
marcink -
r2811:b1467856 beta
parent child Browse files
Show More
@@ -1,744 +1,745 b''
1 .. _changelog:
1 .. _changelog:
2
2
3 =========
3 =========
4 Changelog
4 Changelog
5 =========
5 =========
6
6
7
7
8 1.4.1 (**2012-09-05**)
8 1.4.1 (**2012-09-05**)
9 ----------------------
9 ----------------------
10
10
11 :status: in-progress
11 :status: in-progress
12 :branch: beta
12 :branch: beta
13
13
14 news
14 news
15 ++++
15 ++++
16
16
17 - always put a comment about code-review status change even if user send
17 - always put a comment about code-review status change even if user send
18 empty data
18 empty data
19 - modified_on column saves repository update and it's going to be used
19 - modified_on column saves repository update and it's going to be used
20 later for light version of main page ref #500
20 later for light version of main page ref #500
21 - pull request notifications send much nicer emails with details about pull
21 - pull request notifications send much nicer emails with details about pull
22 request
22 request
23 - #551 show breadcrumbs in summary view for repositories inside a group
23
24
24 fixes
25 fixes
25 +++++
26 +++++
26
27
27 - fixed migrations of permissions that can lead to inconsistency.
28 - fixed migrations of permissions that can lead to inconsistency.
28 Some users sent feedback that after upgrading from older versions issues
29 Some users sent feedback that after upgrading from older versions issues
29 with updating default permissions occurred. RhodeCode detects that now and
30 with updating default permissions occurred. RhodeCode detects that now and
30 resets default user permission to initial state if there is a need for that.
31 resets default user permission to initial state if there is a need for that.
31 Also forces users to set the default value for new forking permission.
32 Also forces users to set the default value for new forking permission.
32 - #535 improved apache wsgi example configuration in docs
33 - #535 improved apache wsgi example configuration in docs
33 - fixes #550 mercurial repositories comparision failed when origin repo had
34 - fixes #550 mercurial repositories comparision failed when origin repo had
34 additional not-common changesets
35 additional not-common changesets
35 - fixed status of code-review in preview windows of pull request
36 - fixed status of code-review in preview windows of pull request
36 - git forks were not initialized at bare repos
37 - git forks were not initialized at bare repos
37 - fixes #555 fixes issues with comparing non-related repositories
38 - fixes #555 fixes issues with comparing non-related repositories
38
39
39 1.4.0 (**2012-09-03**)
40 1.4.0 (**2012-09-03**)
40 ----------------------
41 ----------------------
41
42
42 news
43 news
43 ++++
44 ++++
44
45
45 - new codereview system
46 - new codereview system
46 - email map, allowing users to have multiple email addresses mapped into
47 - email map, allowing users to have multiple email addresses mapped into
47 their accounts
48 their accounts
48 - improved git-hook system. Now all actions for git are logged into journal
49 - improved git-hook system. Now all actions for git are logged into journal
49 including pushed revisions, user and IP address
50 including pushed revisions, user and IP address
50 - changed setup-app into setup-rhodecode and added default options to it.
51 - changed setup-app into setup-rhodecode and added default options to it.
51 - new git repos are created as bare now by default
52 - new git repos are created as bare now by default
52 - #464 added links to groups in permission box
53 - #464 added links to groups in permission box
53 - #465 mentions autocomplete inside comments boxes
54 - #465 mentions autocomplete inside comments boxes
54 - #469 added --update-only option to whoosh to re-index only given list
55 - #469 added --update-only option to whoosh to re-index only given list
55 of repos in index
56 of repos in index
56 - rhodecode-api CLI client
57 - rhodecode-api CLI client
57 - new git http protocol replaced buggy dulwich implementation.
58 - new git http protocol replaced buggy dulwich implementation.
58 Now based on pygrack & gitweb
59 Now based on pygrack & gitweb
59 - Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and
60 - Improved RSS/ATOM feeds. Discoverable by browsers using proper headers, and
60 reformated based on user suggestions. Additional rss/atom feeds for user
61 reformated based on user suggestions. Additional rss/atom feeds for user
61 journal
62 journal
62 - various i18n improvements
63 - various i18n improvements
63 - #478 permissions overview for admin in user edit view
64 - #478 permissions overview for admin in user edit view
64 - File view now displays small gravatars off all authors of given file
65 - File view now displays small gravatars off all authors of given file
65 - Implemented landing revisions. Each repository will get landing_rev attribute
66 - Implemented landing revisions. Each repository will get landing_rev attribute
66 that defines 'default' revision/branch for generating readme files
67 that defines 'default' revision/branch for generating readme files
67 - Implemented #509, RhodeCode enforces SSL for push/pulling if requested at
68 - Implemented #509, RhodeCode enforces SSL for push/pulling if requested at
68 earliest possible call.
69 earliest possible call.
69 - Import remote svn repositories to mercurial using hgsubversion.
70 - Import remote svn repositories to mercurial using hgsubversion.
70 - Fixed #508 RhodeCode now has a option to explicitly set forking permissions
71 - Fixed #508 RhodeCode now has a option to explicitly set forking permissions
71 - RhodeCode can use alternative server for generating avatar icons
72 - RhodeCode can use alternative server for generating avatar icons
72 - implemented repositories locking. Pull locks, push unlocks. Also can be done
73 - implemented repositories locking. Pull locks, push unlocks. Also can be done
73 via API calls
74 via API calls
74 - #538 form for permissions can handle multiple users at once
75 - #538 form for permissions can handle multiple users at once
75
76
76 fixes
77 fixes
77 +++++
78 +++++
78
79
79 - improved translations
80 - improved translations
80 - fixes issue #455 Creating an archive generates an exception on Windows
81 - fixes issue #455 Creating an archive generates an exception on Windows
81 - fixes #448 Download ZIP archive keeps file in /tmp open and results
82 - fixes #448 Download ZIP archive keeps file in /tmp open and results
82 in out of disk space
83 in out of disk space
83 - fixes issue #454 Search results under Windows include proceeding
84 - fixes issue #454 Search results under Windows include proceeding
84 backslash
85 backslash
85 - fixed issue #450. Rhodecode no longer will crash when bad revision is
86 - fixed issue #450. Rhodecode no longer will crash when bad revision is
86 present in journal data.
87 present in journal data.
87 - fix for issue #417, git execution was broken on windows for certain
88 - fix for issue #417, git execution was broken on windows for certain
88 commands.
89 commands.
89 - fixed #413. Don't disable .git directory for bare repos on deleting
90 - fixed #413. Don't disable .git directory for bare repos on deleting
90 - fixed issue #459. Changed the way of obtaining logger in reindex task.
91 - fixed issue #459. Changed the way of obtaining logger in reindex task.
91 - fixed #453 added ID field in whoosh SCHEMA that solves the issue of
92 - fixed #453 added ID field in whoosh SCHEMA that solves the issue of
92 reindexing modified files
93 reindexing modified files
93 - fixed #481 rhodecode emails are sent without Date header
94 - fixed #481 rhodecode emails are sent without Date header
94 - fixed #458 wrong count when no repos are present
95 - fixed #458 wrong count when no repos are present
95 - fixed issue #492 missing `\ No newline at end of file` test at the end of
96 - fixed issue #492 missing `\ No newline at end of file` test at the end of
96 new chunk in html diff
97 new chunk in html diff
97 - full text search now works also for commit messages
98 - full text search now works also for commit messages
98
99
99 1.3.6 (**2012-05-17**)
100 1.3.6 (**2012-05-17**)
100 ----------------------
101 ----------------------
101
102
102 news
103 news
103 ++++
104 ++++
104
105
105 - chinese traditional translation
106 - chinese traditional translation
106 - changed setup-app into setup-rhodecode and added arguments for auto-setup
107 - changed setup-app into setup-rhodecode and added arguments for auto-setup
107 mode that doesn't need user interaction
108 mode that doesn't need user interaction
108
109
109 fixes
110 fixes
110 +++++
111 +++++
111
112
112 - fixed no scm found warning
113 - fixed no scm found warning
113 - fixed __future__ import error on rcextensions
114 - fixed __future__ import error on rcextensions
114 - made simplejson required lib for speedup on JSON encoding
115 - made simplejson required lib for speedup on JSON encoding
115 - fixes #449 bad regex could get more than revisions from parsing history
116 - fixes #449 bad regex could get more than revisions from parsing history
116 - don't clear DB session when CELERY_EAGER is turned ON
117 - don't clear DB session when CELERY_EAGER is turned ON
117
118
118 1.3.5 (**2012-05-10**)
119 1.3.5 (**2012-05-10**)
119 ----------------------
120 ----------------------
120
121
121 news
122 news
122 ++++
123 ++++
123
124
124 - use ext_json for json module
125 - use ext_json for json module
125 - unified annotation view with file source view
126 - unified annotation view with file source view
126 - notification improvements, better inbox + css
127 - notification improvements, better inbox + css
127 - #419 don't strip passwords for login forms, make rhodecode
128 - #419 don't strip passwords for login forms, make rhodecode
128 more compatible with LDAP servers
129 more compatible with LDAP servers
129 - Added HTTP_X_FORWARDED_FOR as another method of extracting
130 - Added HTTP_X_FORWARDED_FOR as another method of extracting
130 IP for pull/push logs. - moved all to base controller
131 IP for pull/push logs. - moved all to base controller
131 - #415: Adding comment to changeset causes reload.
132 - #415: Adding comment to changeset causes reload.
132 Comments are now added via ajax and doesn't reload the page
133 Comments are now added via ajax and doesn't reload the page
133 - #374 LDAP config is discarded when LDAP can't be activated
134 - #374 LDAP config is discarded when LDAP can't be activated
134 - limited push/pull operations are now logged for git in the journal
135 - limited push/pull operations are now logged for git in the journal
135 - bumped mercurial to 2.2.X series
136 - bumped mercurial to 2.2.X series
136 - added support for displaying submodules in file-browser
137 - added support for displaying submodules in file-browser
137 - #421 added bookmarks in changelog view
138 - #421 added bookmarks in changelog view
138
139
139 fixes
140 fixes
140 +++++
141 +++++
141
142
142 - fixed dev-version marker for stable when served from source codes
143 - fixed dev-version marker for stable when served from source codes
143 - fixed missing permission checks on show forks page
144 - fixed missing permission checks on show forks page
144 - #418 cast to unicode fixes in notification objects
145 - #418 cast to unicode fixes in notification objects
145 - #426 fixed mention extracting regex
146 - #426 fixed mention extracting regex
146 - fixed remote-pulling for git remotes remopositories
147 - fixed remote-pulling for git remotes remopositories
147 - fixed #434: Error when accessing files or changesets of a git repository
148 - fixed #434: Error when accessing files or changesets of a git repository
148 with submodules
149 with submodules
149 - fixed issue with empty APIKEYS for users after registration ref. #438
150 - fixed issue with empty APIKEYS for users after registration ref. #438
150 - fixed issue with getting README files from git repositories
151 - fixed issue with getting README files from git repositories
151
152
152 1.3.4 (**2012-03-28**)
153 1.3.4 (**2012-03-28**)
153 ----------------------
154 ----------------------
154
155
155 news
156 news
156 ++++
157 ++++
157
158
158 - Whoosh logging is now controlled by the .ini files logging setup
159 - Whoosh logging is now controlled by the .ini files logging setup
159 - added clone-url into edit form on /settings page
160 - added clone-url into edit form on /settings page
160 - added help text into repo add/edit forms
161 - added help text into repo add/edit forms
161 - created rcextensions module with additional mappings (ref #322) and
162 - created rcextensions module with additional mappings (ref #322) and
162 post push/pull/create repo hooks callbacks
163 post push/pull/create repo hooks callbacks
163 - implemented #377 Users view for his own permissions on account page
164 - implemented #377 Users view for his own permissions on account page
164 - #399 added inheritance of permissions for users group on repos groups
165 - #399 added inheritance of permissions for users group on repos groups
165 - #401 repository group is automatically pre-selected when adding repos
166 - #401 repository group is automatically pre-selected when adding repos
166 inside a repository group
167 inside a repository group
167 - added alternative HTTP 403 response when client failed to authenticate. Helps
168 - added alternative HTTP 403 response when client failed to authenticate. Helps
168 solving issues with Mercurial and LDAP
169 solving issues with Mercurial and LDAP
169 - #402 removed group prefix from repository name when listing repositories
170 - #402 removed group prefix from repository name when listing repositories
170 inside a group
171 inside a group
171 - added gravatars into permission view and permissions autocomplete
172 - added gravatars into permission view and permissions autocomplete
172 - #347 when running multiple RhodeCode instances, properly invalidates cache
173 - #347 when running multiple RhodeCode instances, properly invalidates cache
173 for all registered servers
174 for all registered servers
174
175
175 fixes
176 fixes
176 +++++
177 +++++
177
178
178 - fixed #390 cache invalidation problems on repos inside group
179 - fixed #390 cache invalidation problems on repos inside group
179 - fixed #385 clone by ID url was loosing proxy prefix in URL
180 - fixed #385 clone by ID url was loosing proxy prefix in URL
180 - fixed some unicode problems with waitress
181 - fixed some unicode problems with waitress
181 - fixed issue with escaping < and > in changeset commits
182 - fixed issue with escaping < and > in changeset commits
182 - fixed error occurring during recursive group creation in API
183 - fixed error occurring during recursive group creation in API
183 create_repo function
184 create_repo function
184 - fixed #393 py2.5 fixes for routes url generator
185 - fixed #393 py2.5 fixes for routes url generator
185 - fixed #397 Private repository groups shows up before login
186 - fixed #397 Private repository groups shows up before login
186 - fixed #396 fixed problems with revoking users in nested groups
187 - fixed #396 fixed problems with revoking users in nested groups
187 - fixed mysql unicode issues + specified InnoDB as default engine with
188 - fixed mysql unicode issues + specified InnoDB as default engine with
188 utf8 charset
189 utf8 charset
189 - #406 trim long branch/tag names in changelog to not break UI
190 - #406 trim long branch/tag names in changelog to not break UI
190
191
191 1.3.3 (**2012-03-02**)
192 1.3.3 (**2012-03-02**)
192 ----------------------
193 ----------------------
193
194
194 news
195 news
195 ++++
196 ++++
196
197
197
198
198 fixes
199 fixes
199 +++++
200 +++++
200
201
201 - fixed some python2.5 compatibility issues
202 - fixed some python2.5 compatibility issues
202 - fixed issues with removed repos was accidentally added as groups, after
203 - fixed issues with removed repos was accidentally added as groups, after
203 full rescan of paths
204 full rescan of paths
204 - fixes #376 Cannot edit user (using container auth)
205 - fixes #376 Cannot edit user (using container auth)
205 - fixes #378 Invalid image urls on changeset screen with proxy-prefix
206 - fixes #378 Invalid image urls on changeset screen with proxy-prefix
206 configuration
207 configuration
207 - fixed initial sorting of repos inside repo group
208 - fixed initial sorting of repos inside repo group
208 - fixes issue when user tried to resubmit same permission into user/user_groups
209 - fixes issue when user tried to resubmit same permission into user/user_groups
209 - bumped beaker version that fixes #375 leap error bug
210 - bumped beaker version that fixes #375 leap error bug
210 - fixed raw_changeset for git. It was generated with hg patch headers
211 - fixed raw_changeset for git. It was generated with hg patch headers
211 - fixed vcs issue with last_changeset for filenodes
212 - fixed vcs issue with last_changeset for filenodes
212 - fixed missing commit after hook delete
213 - fixed missing commit after hook delete
213 - fixed #372 issues with git operation detection that caused a security issue
214 - fixed #372 issues with git operation detection that caused a security issue
214 for git repos
215 for git repos
215
216
216 1.3.2 (**2012-02-28**)
217 1.3.2 (**2012-02-28**)
217 ----------------------
218 ----------------------
218
219
219 news
220 news
220 ++++
221 ++++
221
222
222
223
223 fixes
224 fixes
224 +++++
225 +++++
225
226
226 - fixed git protocol issues with repos-groups
227 - fixed git protocol issues with repos-groups
227 - fixed git remote repos validator that prevented from cloning remote git repos
228 - fixed git remote repos validator that prevented from cloning remote git repos
228 - fixes #370 ending slashes fixes for repo and groups
229 - fixes #370 ending slashes fixes for repo and groups
229 - fixes #368 improved git-protocol detection to handle other clients
230 - fixes #368 improved git-protocol detection to handle other clients
230 - fixes #366 When Setting Repository Group To Blank Repo Group Wont Be
231 - fixes #366 When Setting Repository Group To Blank Repo Group Wont Be
231 Moved To Root
232 Moved To Root
232 - fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
233 - fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
233 - fixed #373 missing cascade drop on user_group_to_perm table
234 - fixed #373 missing cascade drop on user_group_to_perm table
234
235
235 1.3.1 (**2012-02-27**)
236 1.3.1 (**2012-02-27**)
236 ----------------------
237 ----------------------
237
238
238 news
239 news
239 ++++
240 ++++
240
241
241
242
242 fixes
243 fixes
243 +++++
244 +++++
244
245
245 - redirection loop occurs when remember-me wasn't checked during login
246 - redirection loop occurs when remember-me wasn't checked during login
246 - fixes issues with git blob history generation
247 - fixes issues with git blob history generation
247 - don't fetch branch for git in file history dropdown. Causes unneeded slowness
248 - don't fetch branch for git in file history dropdown. Causes unneeded slowness
248
249
249 1.3.0 (**2012-02-26**)
250 1.3.0 (**2012-02-26**)
250 ----------------------
251 ----------------------
251
252
252 news
253 news
253 ++++
254 ++++
254
255
255 - code review, inspired by github code-comments
256 - code review, inspired by github code-comments
256 - #215 rst and markdown README files support
257 - #215 rst and markdown README files support
257 - #252 Container-based and proxy pass-through authentication support
258 - #252 Container-based and proxy pass-through authentication support
258 - #44 branch browser. Filtering of changelog by branches
259 - #44 branch browser. Filtering of changelog by branches
259 - mercurial bookmarks support
260 - mercurial bookmarks support
260 - new hover top menu, optimized to add maximum size for important views
261 - new hover top menu, optimized to add maximum size for important views
261 - configurable clone url template with possibility to specify protocol like
262 - configurable clone url template with possibility to specify protocol like
262 ssh:// or http:// and also manually alter other parts of clone_url.
263 ssh:// or http:// and also manually alter other parts of clone_url.
263 - enabled largefiles extension by default
264 - enabled largefiles extension by default
264 - optimized summary file pages and saved a lot of unused space in them
265 - optimized summary file pages and saved a lot of unused space in them
265 - #239 option to manually mark repository as fork
266 - #239 option to manually mark repository as fork
266 - #320 mapping of commit authors to RhodeCode users
267 - #320 mapping of commit authors to RhodeCode users
267 - #304 hashes are displayed using monospace font
268 - #304 hashes are displayed using monospace font
268 - diff configuration, toggle white lines and context lines
269 - diff configuration, toggle white lines and context lines
269 - #307 configurable diffs, whitespace toggle, increasing context lines
270 - #307 configurable diffs, whitespace toggle, increasing context lines
270 - sorting on branches, tags and bookmarks using YUI datatable
271 - sorting on branches, tags and bookmarks using YUI datatable
271 - improved file filter on files page
272 - improved file filter on files page
272 - implements #330 api method for listing nodes ar particular revision
273 - implements #330 api method for listing nodes ar particular revision
273 - #73 added linking issues in commit messages to chosen issue tracker url
274 - #73 added linking issues in commit messages to chosen issue tracker url
274 based on user defined regular expression
275 based on user defined regular expression
275 - added linking of changesets in commit messages
276 - added linking of changesets in commit messages
276 - new compact changelog with expandable commit messages
277 - new compact changelog with expandable commit messages
277 - firstname and lastname are optional in user creation
278 - firstname and lastname are optional in user creation
278 - #348 added post-create repository hook
279 - #348 added post-create repository hook
279 - #212 global encoding settings is now configurable from .ini files
280 - #212 global encoding settings is now configurable from .ini files
280 - #227 added repository groups permissions
281 - #227 added repository groups permissions
281 - markdown gets codehilite extensions
282 - markdown gets codehilite extensions
282 - new API methods, delete_repositories, grante/revoke permissions for groups
283 - new API methods, delete_repositories, grante/revoke permissions for groups
283 and repos
284 and repos
284
285
285
286
286 fixes
287 fixes
287 +++++
288 +++++
288
289
289 - rewrote dbsession management for atomic operations, and better error handling
290 - rewrote dbsession management for atomic operations, and better error handling
290 - fixed sorting of repo tables
291 - fixed sorting of repo tables
291 - #326 escape of special html entities in diffs
292 - #326 escape of special html entities in diffs
292 - normalized user_name => username in api attributes
293 - normalized user_name => username in api attributes
293 - fixes #298 ldap created users with mixed case emails created conflicts
294 - fixes #298 ldap created users with mixed case emails created conflicts
294 on saving a form
295 on saving a form
295 - fixes issue when owner of a repo couldn't revoke permissions for users
296 - fixes issue when owner of a repo couldn't revoke permissions for users
296 and groups
297 and groups
297 - fixes #271 rare JSON serialization problem with statistics
298 - fixes #271 rare JSON serialization problem with statistics
298 - fixes #337 missing validation check for conflicting names of a group with a
299 - fixes #337 missing validation check for conflicting names of a group with a
299 repositories group
300 repositories group
300 - #340 fixed session problem for mysql and celery tasks
301 - #340 fixed session problem for mysql and celery tasks
301 - fixed #331 RhodeCode mangles repository names if the a repository group
302 - fixed #331 RhodeCode mangles repository names if the a repository group
302 contains the "full path" to the repositories
303 contains the "full path" to the repositories
303 - #355 RhodeCode doesn't store encrypted LDAP passwords
304 - #355 RhodeCode doesn't store encrypted LDAP passwords
304
305
305 1.2.5 (**2012-01-28**)
306 1.2.5 (**2012-01-28**)
306 ----------------------
307 ----------------------
307
308
308 news
309 news
309 ++++
310 ++++
310
311
311 fixes
312 fixes
312 +++++
313 +++++
313
314
314 - #340 Celery complains about MySQL server gone away, added session cleanup
315 - #340 Celery complains about MySQL server gone away, added session cleanup
315 for celery tasks
316 for celery tasks
316 - #341 "scanning for repositories in None" log message during Rescan was missing
317 - #341 "scanning for repositories in None" log message during Rescan was missing
317 a parameter
318 a parameter
318 - fixed creating archives with subrepos. Some hooks were triggered during that
319 - fixed creating archives with subrepos. Some hooks were triggered during that
319 operation leading to crash.
320 operation leading to crash.
320 - fixed missing email in account page.
321 - fixed missing email in account page.
321 - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes
322 - Reverted Mercurial to 2.0.1 for windows due to bug in Mercurial that makes
322 forking on windows impossible
323 forking on windows impossible
323
324
324 1.2.4 (**2012-01-19**)
325 1.2.4 (**2012-01-19**)
325 ----------------------
326 ----------------------
326
327
327 news
328 news
328 ++++
329 ++++
329
330
330 - RhodeCode is bundled with mercurial series 2.0.X by default, with
331 - RhodeCode is bundled with mercurial series 2.0.X by default, with
331 full support to largefiles extension. Enabled by default in new installations
332 full support to largefiles extension. Enabled by default in new installations
332 - #329 Ability to Add/Remove Groups to/from a Repository via AP
333 - #329 Ability to Add/Remove Groups to/from a Repository via AP
333 - added requires.txt file with requirements
334 - added requires.txt file with requirements
334
335
335 fixes
336 fixes
336 +++++
337 +++++
337
338
338 - fixes db session issues with celery when emailing admins
339 - fixes db session issues with celery when emailing admins
339 - #331 RhodeCode mangles repository names if the a repository group
340 - #331 RhodeCode mangles repository names if the a repository group
340 contains the "full path" to the repositories
341 contains the "full path" to the repositories
341 - #298 Conflicting e-mail addresses for LDAP and RhodeCode users
342 - #298 Conflicting e-mail addresses for LDAP and RhodeCode users
342 - DB session cleanup after hg protocol operations, fixes issues with
343 - DB session cleanup after hg protocol operations, fixes issues with
343 `mysql has gone away` errors
344 `mysql has gone away` errors
344 - #333 doc fixes for get_repo api function
345 - #333 doc fixes for get_repo api function
345 - #271 rare JSON serialization problem with statistics enabled
346 - #271 rare JSON serialization problem with statistics enabled
346 - #337 Fixes issues with validation of repository name conflicting with
347 - #337 Fixes issues with validation of repository name conflicting with
347 a group name. A proper message is now displayed.
348 a group name. A proper message is now displayed.
348 - #292 made ldap_dn in user edit readonly, to get rid of confusion that field
349 - #292 made ldap_dn in user edit readonly, to get rid of confusion that field
349 doesn't work
350 doesn't work
350 - #316 fixes issues with web description in hgrc files
351 - #316 fixes issues with web description in hgrc files
351
352
352 1.2.3 (**2011-11-02**)
353 1.2.3 (**2011-11-02**)
353 ----------------------
354 ----------------------
354
355
355 news
356 news
356 ++++
357 ++++
357
358
358 - added option to manage repos group for non admin users
359 - added option to manage repos group for non admin users
359 - added following API methods for get_users, create_user, get_users_groups,
360 - added following API methods for get_users, create_user, get_users_groups,
360 get_users_group, create_users_group, add_user_to_users_groups, get_repos,
361 get_users_group, create_users_group, add_user_to_users_groups, get_repos,
361 get_repo, create_repo, add_user_to_repo
362 get_repo, create_repo, add_user_to_repo
362 - implements #237 added password confirmation for my account
363 - implements #237 added password confirmation for my account
363 and admin edit user.
364 and admin edit user.
364 - implements #291 email notification for global events are now sent to all
365 - implements #291 email notification for global events are now sent to all
365 administrator users, and global config email.
366 administrator users, and global config email.
366
367
367 fixes
368 fixes
368 +++++
369 +++++
369
370
370 - added option for passing auth method for smtp mailer
371 - added option for passing auth method for smtp mailer
371 - #276 issue with adding a single user with id>10 to usergroups
372 - #276 issue with adding a single user with id>10 to usergroups
372 - #277 fixes windows LDAP settings in which missing values breaks the ldap auth
373 - #277 fixes windows LDAP settings in which missing values breaks the ldap auth
373 - #288 fixes managing of repos in a group for non admin user
374 - #288 fixes managing of repos in a group for non admin user
374
375
375 1.2.2 (**2011-10-17**)
376 1.2.2 (**2011-10-17**)
376 ----------------------
377 ----------------------
377
378
378 news
379 news
379 ++++
380 ++++
380
381
381 - #226 repo groups are available by path instead of numerical id
382 - #226 repo groups are available by path instead of numerical id
382
383
383 fixes
384 fixes
384 +++++
385 +++++
385
386
386 - #259 Groups with the same name but with different parent group
387 - #259 Groups with the same name but with different parent group
387 - #260 Put repo in group, then move group to another group -> repo becomes unavailable
388 - #260 Put repo in group, then move group to another group -> repo becomes unavailable
388 - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems)
389 - #258 RhodeCode 1.2 assumes egg folder is writable (lockfiles problems)
389 - #265 ldap save fails sometimes on converting attributes to booleans,
390 - #265 ldap save fails sometimes on converting attributes to booleans,
390 added getter and setter into model that will prevent from this on db model level
391 added getter and setter into model that will prevent from this on db model level
391 - fixed problems with timestamps issues #251 and #213
392 - fixed problems with timestamps issues #251 and #213
392 - fixes #266 RhodeCode allows to create repo with the same name and in
393 - fixes #266 RhodeCode allows to create repo with the same name and in
393 the same parent as group
394 the same parent as group
394 - fixes #245 Rescan of the repositories on Windows
395 - fixes #245 Rescan of the repositories on Windows
395 - fixes #248 cannot edit repos inside a group on windows
396 - fixes #248 cannot edit repos inside a group on windows
396 - fixes #219 forking problems on windows
397 - fixes #219 forking problems on windows
397
398
398 1.2.1 (**2011-10-08**)
399 1.2.1 (**2011-10-08**)
399 ----------------------
400 ----------------------
400
401
401 news
402 news
402 ++++
403 ++++
403
404
404
405
405 fixes
406 fixes
406 +++++
407 +++++
407
408
408 - fixed problems with basic auth and push problems
409 - fixed problems with basic auth and push problems
409 - gui fixes
410 - gui fixes
410 - fixed logger
411 - fixed logger
411
412
412 1.2.0 (**2011-10-07**)
413 1.2.0 (**2011-10-07**)
413 ----------------------
414 ----------------------
414
415
415 news
416 news
416 ++++
417 ++++
417
418
418 - implemented #47 repository groups
419 - implemented #47 repository groups
419 - implemented #89 Can setup google analytics code from settings menu
420 - implemented #89 Can setup google analytics code from settings menu
420 - implemented #91 added nicer looking archive urls with more download options
421 - implemented #91 added nicer looking archive urls with more download options
421 like tags, branches
422 like tags, branches
422 - implemented #44 into file browsing, and added follow branch option
423 - implemented #44 into file browsing, and added follow branch option
423 - implemented #84 downloads can be enabled/disabled for each repository
424 - implemented #84 downloads can be enabled/disabled for each repository
424 - anonymous repository can be cloned without having to pass default:default
425 - anonymous repository can be cloned without having to pass default:default
425 into clone url
426 into clone url
426 - fixed #90 whoosh indexer can index chooses repositories passed in command
427 - fixed #90 whoosh indexer can index chooses repositories passed in command
427 line
428 line
428 - extended journal with day aggregates and paging
429 - extended journal with day aggregates and paging
429 - implemented #107 source code lines highlight ranges
430 - implemented #107 source code lines highlight ranges
430 - implemented #93 customizable changelog on combined revision ranges -
431 - implemented #93 customizable changelog on combined revision ranges -
431 equivalent of githubs compare view
432 equivalent of githubs compare view
432 - implemented #108 extended and more powerful LDAP configuration
433 - implemented #108 extended and more powerful LDAP configuration
433 - implemented #56 users groups
434 - implemented #56 users groups
434 - major code rewrites optimized codes for speed and memory usage
435 - major code rewrites optimized codes for speed and memory usage
435 - raw and diff downloads are now in git format
436 - raw and diff downloads are now in git format
436 - setup command checks for write access to given path
437 - setup command checks for write access to given path
437 - fixed many issues with international characters and unicode. It uses utf8
438 - fixed many issues with international characters and unicode. It uses utf8
438 decode with replace to provide less errors even with non utf8 encoded strings
439 decode with replace to provide less errors even with non utf8 encoded strings
439 - #125 added API KEY access to feeds
440 - #125 added API KEY access to feeds
440 - #109 Repository can be created from external Mercurial link (aka. remote
441 - #109 Repository can be created from external Mercurial link (aka. remote
441 repository, and manually updated (via pull) from admin panel
442 repository, and manually updated (via pull) from admin panel
442 - beta git support - push/pull server + basic view for git repos
443 - beta git support - push/pull server + basic view for git repos
443 - added followers page and forks page
444 - added followers page and forks page
444 - server side file creation (with binary file upload interface)
445 - server side file creation (with binary file upload interface)
445 and edition with commits powered by codemirror
446 and edition with commits powered by codemirror
446 - #111 file browser file finder, quick lookup files on whole file tree
447 - #111 file browser file finder, quick lookup files on whole file tree
447 - added quick login sliding menu into main page
448 - added quick login sliding menu into main page
448 - changelog uses lazy loading of affected files details, in some scenarios
449 - changelog uses lazy loading of affected files details, in some scenarios
449 this can improve speed of changelog page dramatically especially for
450 this can improve speed of changelog page dramatically especially for
450 larger repositories.
451 larger repositories.
451 - implements #214 added support for downloading subrepos in download menu.
452 - implements #214 added support for downloading subrepos in download menu.
452 - Added basic API for direct operations on rhodecode via JSON
453 - Added basic API for direct operations on rhodecode via JSON
453 - Implemented advanced hook management
454 - Implemented advanced hook management
454
455
455 fixes
456 fixes
456 +++++
457 +++++
457
458
458 - fixed file browser bug, when switching into given form revision the url was
459 - fixed file browser bug, when switching into given form revision the url was
459 not changing
460 not changing
460 - fixed propagation to error controller on simplehg and simplegit middlewares
461 - fixed propagation to error controller on simplehg and simplegit middlewares
461 - fixed error when trying to make a download on empty repository
462 - fixed error when trying to make a download on empty repository
462 - fixed problem with '[' chars in commit messages in journal
463 - fixed problem with '[' chars in commit messages in journal
463 - fixed #99 Unicode errors, on file node paths with non utf-8 characters
464 - fixed #99 Unicode errors, on file node paths with non utf-8 characters
464 - journal fork fixes
465 - journal fork fixes
465 - removed issue with space inside renamed repository after deletion
466 - removed issue with space inside renamed repository after deletion
466 - fixed strange issue on formencode imports
467 - fixed strange issue on formencode imports
467 - fixed #126 Deleting repository on Windows, rename used incompatible chars.
468 - fixed #126 Deleting repository on Windows, rename used incompatible chars.
468 - #150 fixes for errors on repositories mapped in db but corrupted in
469 - #150 fixes for errors on repositories mapped in db but corrupted in
469 filesystem
470 filesystem
470 - fixed problem with ascendant characters in realm #181
471 - fixed problem with ascendant characters in realm #181
471 - fixed problem with sqlite file based database connection pool
472 - fixed problem with sqlite file based database connection pool
472 - whoosh indexer and code stats share the same dynamic extensions map
473 - whoosh indexer and code stats share the same dynamic extensions map
473 - fixes #188 - relationship delete of repo_to_perm entry on user removal
474 - fixes #188 - relationship delete of repo_to_perm entry on user removal
474 - fixes issue #189 Trending source files shows "show more" when no more exist
475 - fixes issue #189 Trending source files shows "show more" when no more exist
475 - fixes issue #197 Relative paths for pidlocks
476 - fixes issue #197 Relative paths for pidlocks
476 - fixes issue #198 password will require only 3 chars now for login form
477 - fixes issue #198 password will require only 3 chars now for login form
477 - fixes issue #199 wrong redirection for non admin users after creating a repository
478 - fixes issue #199 wrong redirection for non admin users after creating a repository
478 - fixes issues #202, bad db constraint made impossible to attach same group
479 - fixes issues #202, bad db constraint made impossible to attach same group
479 more than one time. Affects only mysql/postgres
480 more than one time. Affects only mysql/postgres
480 - fixes #218 os.kill patch for windows was missing sig param
481 - fixes #218 os.kill patch for windows was missing sig param
481 - improved rendering of dag (they are not trimmed anymore when number of
482 - improved rendering of dag (they are not trimmed anymore when number of
482 heads exceeds 5)
483 heads exceeds 5)
483
484
484 1.1.8 (**2011-04-12**)
485 1.1.8 (**2011-04-12**)
485 ----------------------
486 ----------------------
486
487
487 news
488 news
488 ++++
489 ++++
489
490
490 - improved windows support
491 - improved windows support
491
492
492 fixes
493 fixes
493 +++++
494 +++++
494
495
495 - fixed #140 freeze of python dateutil library, since new version is python2.x
496 - fixed #140 freeze of python dateutil library, since new version is python2.x
496 incompatible
497 incompatible
497 - setup-app will check for write permission in given path
498 - setup-app will check for write permission in given path
498 - cleaned up license info issue #149
499 - cleaned up license info issue #149
499 - fixes for issues #137,#116 and problems with unicode and accented characters.
500 - fixes for issues #137,#116 and problems with unicode and accented characters.
500 - fixes crashes on gravatar, when passed in email as unicode
501 - fixes crashes on gravatar, when passed in email as unicode
501 - fixed tooltip flickering problems
502 - fixed tooltip flickering problems
502 - fixed came_from redirection on windows
503 - fixed came_from redirection on windows
503 - fixed logging modules, and sql formatters
504 - fixed logging modules, and sql formatters
504 - windows fixes for os.kill issue #133
505 - windows fixes for os.kill issue #133
505 - fixes path splitting for windows issues #148
506 - fixes path splitting for windows issues #148
506 - fixed issue #143 wrong import on migration to 1.1.X
507 - fixed issue #143 wrong import on migration to 1.1.X
507 - fixed problems with displaying binary files, thanks to Thomas Waldmann
508 - fixed problems with displaying binary files, thanks to Thomas Waldmann
508 - removed name from archive files since it's breaking ui for long repo names
509 - removed name from archive files since it's breaking ui for long repo names
509 - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann
510 - fixed issue with archive headers sent to browser, thanks to Thomas Waldmann
510 - fixed compatibility for 1024px displays, and larger dpi settings, thanks to
511 - fixed compatibility for 1024px displays, and larger dpi settings, thanks to
511 Thomas Waldmann
512 Thomas Waldmann
512 - fixed issue #166 summary pager was skipping 10 revisions on second page
513 - fixed issue #166 summary pager was skipping 10 revisions on second page
513
514
514
515
515 1.1.7 (**2011-03-23**)
516 1.1.7 (**2011-03-23**)
516 ----------------------
517 ----------------------
517
518
518 news
519 news
519 ++++
520 ++++
520
521
521 fixes
522 fixes
522 +++++
523 +++++
523
524
524 - fixed (again) #136 installation support for FreeBSD
525 - fixed (again) #136 installation support for FreeBSD
525
526
526
527
527 1.1.6 (**2011-03-21**)
528 1.1.6 (**2011-03-21**)
528 ----------------------
529 ----------------------
529
530
530 news
531 news
531 ++++
532 ++++
532
533
533 fixes
534 fixes
534 +++++
535 +++++
535
536
536 - fixed #136 installation support for FreeBSD
537 - fixed #136 installation support for FreeBSD
537 - RhodeCode will check for python version during installation
538 - RhodeCode will check for python version during installation
538
539
539 1.1.5 (**2011-03-17**)
540 1.1.5 (**2011-03-17**)
540 ----------------------
541 ----------------------
541
542
542 news
543 news
543 ++++
544 ++++
544
545
545 - basic windows support, by exchanging pybcrypt into sha256 for windows only
546 - basic windows support, by exchanging pybcrypt into sha256 for windows only
546 highly inspired by idea of mantis406
547 highly inspired by idea of mantis406
547
548
548 fixes
549 fixes
549 +++++
550 +++++
550
551
551 - fixed sorting by author in main page
552 - fixed sorting by author in main page
552 - fixed crashes with diffs on binary files
553 - fixed crashes with diffs on binary files
553 - fixed #131 problem with boolean values for LDAP
554 - fixed #131 problem with boolean values for LDAP
554 - fixed #122 mysql problems thanks to striker69
555 - fixed #122 mysql problems thanks to striker69
555 - fixed problem with errors on calling raw/raw_files/annotate functions
556 - fixed problem with errors on calling raw/raw_files/annotate functions
556 with unknown revisions
557 with unknown revisions
557 - fixed returned rawfiles attachment names with international character
558 - fixed returned rawfiles attachment names with international character
558 - cleaned out docs, big thanks to Jason Harris
559 - cleaned out docs, big thanks to Jason Harris
559
560
560 1.1.4 (**2011-02-19**)
561 1.1.4 (**2011-02-19**)
561 ----------------------
562 ----------------------
562
563
563 news
564 news
564 ++++
565 ++++
565
566
566 fixes
567 fixes
567 +++++
568 +++++
568
569
569 - fixed formencode import problem on settings page, that caused server crash
570 - fixed formencode import problem on settings page, that caused server crash
570 when that page was accessed as first after server start
571 when that page was accessed as first after server start
571 - journal fixes
572 - journal fixes
572 - fixed option to access repository just by entering http://server/<repo_name>
573 - fixed option to access repository just by entering http://server/<repo_name>
573
574
574 1.1.3 (**2011-02-16**)
575 1.1.3 (**2011-02-16**)
575 ----------------------
576 ----------------------
576
577
577 news
578 news
578 ++++
579 ++++
579
580
580 - implemented #102 allowing the '.' character in username
581 - implemented #102 allowing the '.' character in username
581 - added option to access repository just by entering http://server/<repo_name>
582 - added option to access repository just by entering http://server/<repo_name>
582 - celery task ignores result for better performance
583 - celery task ignores result for better performance
583
584
584 fixes
585 fixes
585 +++++
586 +++++
586
587
587 - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to
588 - fixed ehlo command and non auth mail servers on smtp_lib. Thanks to
588 apollo13 and Johan Walles
589 apollo13 and Johan Walles
589 - small fixes in journal
590 - small fixes in journal
590 - fixed problems with getting setting for celery from .ini files
591 - fixed problems with getting setting for celery from .ini files
591 - registration, password reset and login boxes share the same title as main
592 - registration, password reset and login boxes share the same title as main
592 application now
593 application now
593 - fixed #113: to high permissions to fork repository
594 - fixed #113: to high permissions to fork repository
594 - fixed problem with '[' chars in commit messages in journal
595 - fixed problem with '[' chars in commit messages in journal
595 - removed issue with space inside renamed repository after deletion
596 - removed issue with space inside renamed repository after deletion
596 - db transaction fixes when filesystem repository creation failed
597 - db transaction fixes when filesystem repository creation failed
597 - fixed #106 relation issues on databases different than sqlite
598 - fixed #106 relation issues on databases different than sqlite
598 - fixed static files paths links to use of url() method
599 - fixed static files paths links to use of url() method
599
600
600 1.1.2 (**2011-01-12**)
601 1.1.2 (**2011-01-12**)
601 ----------------------
602 ----------------------
602
603
603 news
604 news
604 ++++
605 ++++
605
606
606
607
607 fixes
608 fixes
608 +++++
609 +++++
609
610
610 - fixes #98 protection against float division of percentage stats
611 - fixes #98 protection against float division of percentage stats
611 - fixed graph bug
612 - fixed graph bug
612 - forced webhelpers version since it was making troubles during installation
613 - forced webhelpers version since it was making troubles during installation
613
614
614 1.1.1 (**2011-01-06**)
615 1.1.1 (**2011-01-06**)
615 ----------------------
616 ----------------------
616
617
617 news
618 news
618 ++++
619 ++++
619
620
620 - added force https option into ini files for easier https usage (no need to
621 - added force https option into ini files for easier https usage (no need to
621 set server headers with this options)
622 set server headers with this options)
622 - small css updates
623 - small css updates
623
624
624 fixes
625 fixes
625 +++++
626 +++++
626
627
627 - fixed #96 redirect loop on files view on repositories without changesets
628 - fixed #96 redirect loop on files view on repositories without changesets
628 - fixed #97 unicode string passed into server header in special cases (mod_wsgi)
629 - fixed #97 unicode string passed into server header in special cases (mod_wsgi)
629 and server crashed with errors
630 and server crashed with errors
630 - fixed large tooltips problems on main page
631 - fixed large tooltips problems on main page
631 - fixed #92 whoosh indexer is more error proof
632 - fixed #92 whoosh indexer is more error proof
632
633
633 1.1.0 (**2010-12-18**)
634 1.1.0 (**2010-12-18**)
634 ----------------------
635 ----------------------
635
636
636 news
637 news
637 ++++
638 ++++
638
639
639 - rewrite of internals for vcs >=0.1.10
640 - rewrite of internals for vcs >=0.1.10
640 - uses mercurial 1.7 with dotencode disabled for maintaining compatibility
641 - uses mercurial 1.7 with dotencode disabled for maintaining compatibility
641 with older clients
642 with older clients
642 - anonymous access, authentication via ldap
643 - anonymous access, authentication via ldap
643 - performance upgrade for cached repos list - each repository has its own
644 - performance upgrade for cached repos list - each repository has its own
644 cache that's invalidated when needed.
645 cache that's invalidated when needed.
645 - performance upgrades on repositories with large amount of commits (20K+)
646 - performance upgrades on repositories with large amount of commits (20K+)
646 - main page quick filter for filtering repositories
647 - main page quick filter for filtering repositories
647 - user dashboards with ability to follow chosen repositories actions
648 - user dashboards with ability to follow chosen repositories actions
648 - sends email to admin on new user registration
649 - sends email to admin on new user registration
649 - added cache/statistics reset options into repository settings
650 - added cache/statistics reset options into repository settings
650 - more detailed action logger (based on hooks) with pushed changesets lists
651 - more detailed action logger (based on hooks) with pushed changesets lists
651 and options to disable those hooks from admin panel
652 and options to disable those hooks from admin panel
652 - introduced new enhanced changelog for merges that shows more accurate results
653 - introduced new enhanced changelog for merges that shows more accurate results
653 - new improved and faster code stats (based on pygments lexers mapping tables,
654 - new improved and faster code stats (based on pygments lexers mapping tables,
654 showing up to 10 trending sources for each repository. Additionally stats
655 showing up to 10 trending sources for each repository. Additionally stats
655 can be disabled in repository settings.
656 can be disabled in repository settings.
656 - gui optimizations, fixed application width to 1024px
657 - gui optimizations, fixed application width to 1024px
657 - added cut off (for large files/changesets) limit into config files
658 - added cut off (for large files/changesets) limit into config files
658 - whoosh, celeryd, upgrade moved to paster command
659 - whoosh, celeryd, upgrade moved to paster command
659 - other than sqlite database backends can be used
660 - other than sqlite database backends can be used
660
661
661 fixes
662 fixes
662 +++++
663 +++++
663
664
664 - fixes #61 forked repo was showing only after cache expired
665 - fixes #61 forked repo was showing only after cache expired
665 - fixes #76 no confirmation on user deletes
666 - fixes #76 no confirmation on user deletes
666 - fixes #66 Name field misspelled
667 - fixes #66 Name field misspelled
667 - fixes #72 block user removal when he owns repositories
668 - fixes #72 block user removal when he owns repositories
668 - fixes #69 added password confirmation fields
669 - fixes #69 added password confirmation fields
669 - fixes #87 RhodeCode crashes occasionally on updating repository owner
670 - fixes #87 RhodeCode crashes occasionally on updating repository owner
670 - fixes #82 broken annotations on files with more than 1 blank line at the end
671 - fixes #82 broken annotations on files with more than 1 blank line at the end
671 - a lot of fixes and tweaks for file browser
672 - a lot of fixes and tweaks for file browser
672 - fixed detached session issues
673 - fixed detached session issues
673 - fixed when user had no repos he would see all repos listed in my account
674 - fixed when user had no repos he would see all repos listed in my account
674 - fixed ui() instance bug when global hgrc settings was loaded for server
675 - fixed ui() instance bug when global hgrc settings was loaded for server
675 instance and all hgrc options were merged with our db ui() object
676 instance and all hgrc options were merged with our db ui() object
676 - numerous small bugfixes
677 - numerous small bugfixes
677
678
678 (special thanks for TkSoh for detailed feedback)
679 (special thanks for TkSoh for detailed feedback)
679
680
680
681
681 1.0.2 (**2010-11-12**)
682 1.0.2 (**2010-11-12**)
682 ----------------------
683 ----------------------
683
684
684 news
685 news
685 ++++
686 ++++
686
687
687 - tested under python2.7
688 - tested under python2.7
688 - bumped sqlalchemy and celery versions
689 - bumped sqlalchemy and celery versions
689
690
690 fixes
691 fixes
691 +++++
692 +++++
692
693
693 - fixed #59 missing graph.js
694 - fixed #59 missing graph.js
694 - fixed repo_size crash when repository had broken symlinks
695 - fixed repo_size crash when repository had broken symlinks
695 - fixed python2.5 crashes.
696 - fixed python2.5 crashes.
696
697
697
698
698 1.0.1 (**2010-11-10**)
699 1.0.1 (**2010-11-10**)
699 ----------------------
700 ----------------------
700
701
701 news
702 news
702 ++++
703 ++++
703
704
704 - small css updated
705 - small css updated
705
706
706 fixes
707 fixes
707 +++++
708 +++++
708
709
709 - fixed #53 python2.5 incompatible enumerate calls
710 - fixed #53 python2.5 incompatible enumerate calls
710 - fixed #52 disable mercurial extension for web
711 - fixed #52 disable mercurial extension for web
711 - fixed #51 deleting repositories don't delete it's dependent objects
712 - fixed #51 deleting repositories don't delete it's dependent objects
712
713
713
714
714 1.0.0 (**2010-11-02**)
715 1.0.0 (**2010-11-02**)
715 ----------------------
716 ----------------------
716
717
717 - security bugfix simplehg wasn't checking for permissions on commands
718 - security bugfix simplehg wasn't checking for permissions on commands
718 other than pull or push.
719 other than pull or push.
719 - fixed doubled messages after push or pull in admin journal
720 - fixed doubled messages after push or pull in admin journal
720 - templating and css corrections, fixed repo switcher on chrome, updated titles
721 - templating and css corrections, fixed repo switcher on chrome, updated titles
721 - admin menu accessible from options menu on repository view
722 - admin menu accessible from options menu on repository view
722 - permissions cached queries
723 - permissions cached queries
723
724
724 1.0.0rc4 (**2010-10-12**)
725 1.0.0rc4 (**2010-10-12**)
725 --------------------------
726 --------------------------
726
727
727 - fixed python2.5 missing simplejson imports (thanks to Jens BΓ€ckman)
728 - fixed python2.5 missing simplejson imports (thanks to Jens BΓ€ckman)
728 - removed cache_manager settings from sqlalchemy meta
729 - removed cache_manager settings from sqlalchemy meta
729 - added sqlalchemy cache settings to ini files
730 - added sqlalchemy cache settings to ini files
730 - validated password length and added second try of failure on paster setup-app
731 - validated password length and added second try of failure on paster setup-app
731 - fixed setup database destroy prompt even when there was no db
732 - fixed setup database destroy prompt even when there was no db
732
733
733
734
734 1.0.0rc3 (**2010-10-11**)
735 1.0.0rc3 (**2010-10-11**)
735 -------------------------
736 -------------------------
736
737
737 - fixed i18n during installation.
738 - fixed i18n during installation.
738
739
739 1.0.0rc2 (**2010-10-11**)
740 1.0.0rc2 (**2010-10-11**)
740 -------------------------
741 -------------------------
741
742
742 - Disabled dirsize in file browser, it's causing nasty bug when dir renames
743 - Disabled dirsize in file browser, it's causing nasty bug when dir renames
743 occure. After vcs is fixed it'll be put back again.
744 occure. After vcs is fixed it'll be put back again.
744 - templating/css rewrites, optimized css. No newline at end of file
745 - templating/css rewrites, optimized css.
@@ -1,21 +1,22 b''
1 ## -*- coding: utf-8 -*-
1 ## -*- coding: utf-8 -*-
2 <%inherit file="/base/base.html"/>
2 <%inherit file="/base/base.html"/>
3 <%def name="title()">
3 <%def name="title()">
4 ${_('Repository group')} - ${c.rhodecode_name}
4 ${_('Repository group')} - ${c.rhodecode_name}
5 </%def>
5 </%def>
6
6
7 <%def name="breadcrumbs()">
7 <%def name="breadcrumbs()">
8 <span class="groups_breadcrumbs"> ${_('Groups')}
8 <span class="groups_breadcrumbs">
9 ${h.link_to(_(u'Home'),h.url('/'))}
9 %if c.group.parent_group:
10 %if c.group.parent_group:
10 &raquo; ${h.link_to(c.group.parent_group.name,h.url('repos_group_home',group_name=c.group.parent_group.group_name))}
11 &raquo; ${h.link_to(c.group.parent_group.name,h.url('repos_group_home',group_name=c.group.parent_group.group_name))}
11 %endif
12 %endif
12 &raquo; "${c.group.name}" ${_('with')}
13 &raquo; "${c.group.name}" ${_('with')}
13 </span>
14 </span>
14 </%def>
15 </%def>
15
16
16 <%def name="page_nav()">
17 <%def name="page_nav()">
17 ${self.menu('admin')}
18 ${self.menu('admin')}
18 </%def>
19 </%def>
19 <%def name="main()">
20 <%def name="main()">
20 <%include file="/index_base.html" args="parent=self,short_repo_names=True"/>
21 <%include file="/index_base.html" args="parent=self,short_repo_names=True"/>
21 </%def>
22 </%def>
@@ -1,710 +1,710 b''
1 <%inherit file="/base/base.html"/>
1 <%inherit file="/base/base.html"/>
2
2
3 <%def name="title()">
3 <%def name="title()">
4 ${_('%s Summary') % c.repo_name} - ${c.rhodecode_name}
4 ${_('%s Summary') % c.repo_name} - ${c.rhodecode_name}
5 </%def>
5 </%def>
6
6
7 <%def name="breadcrumbs_links()">
7 <%def name="breadcrumbs_links()">
8 ${h.link_to(_(u'Home'),h.url('/'))}
8 ${h.link_to(_(u'Home'),h.url('/'))}
9 &raquo;
9 &raquo;
10 ${h.link_to(c.dbrepo.just_name,h.url('summary_home',repo_name=c.repo_name))}
10 ${h.repo_link(c.dbrepo.groups_and_repo)}
11 &raquo;
11 &raquo;
12 ${_('summary')}
12 ${_('summary')}
13 </%def>
13 </%def>
14
14
15 <%def name="page_nav()">
15 <%def name="page_nav()">
16 ${self.menu('summary')}
16 ${self.menu('summary')}
17 </%def>
17 </%def>
18
18
19 <%def name="head_extra()">
19 <%def name="head_extra()">
20 <link href="${h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('repo %s ATOM feed') % c.repo_name}" type="application/atom+xml" />
20 <link href="${h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('repo %s ATOM feed') % c.repo_name}" type="application/atom+xml" />
21 <link href="${h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('repo %s RSS feed') % c.repo_name}" type="application/rss+xml" />
21 <link href="${h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('repo %s RSS feed') % c.repo_name}" type="application/rss+xml" />
22 </%def>
22 </%def>
23
23
24 <%def name="main()">
24 <%def name="main()">
25 <%
25 <%
26 summary = lambda n:{False:'summary-short'}.get(n)
26 summary = lambda n:{False:'summary-short'}.get(n)
27 %>
27 %>
28 %if c.show_stats:
28 %if c.show_stats:
29 <div class="box box-left">
29 <div class="box box-left">
30 %else:
30 %else:
31 <div class="box">
31 <div class="box">
32 %endif
32 %endif
33 <!-- box / title -->
33 <!-- box / title -->
34 <div class="title">
34 <div class="title">
35 ${self.breadcrumbs()}
35 ${self.breadcrumbs()}
36 </div>
36 </div>
37 <!-- end box / title -->
37 <!-- end box / title -->
38 <div class="form">
38 <div class="form">
39 <div id="summary" class="fields">
39 <div id="summary" class="fields">
40
40
41 <div class="field">
41 <div class="field">
42 <div class="label-summary">
42 <div class="label-summary">
43 <label>${_('Name')}:</label>
43 <label>${_('Name')}:</label>
44 </div>
44 </div>
45 <div class="input ${summary(c.show_stats)}">
45 <div class="input ${summary(c.show_stats)}">
46 <div style="float:right;padding:5px 0px 0px 5px">
46 <div style="float:right;padding:5px 0px 0px 5px">
47 %if c.rhodecode_user.username != 'default':
47 %if c.rhodecode_user.username != 'default':
48 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='rss_icon')}
48 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='rss_icon')}
49 ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='atom_icon')}
49 ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name,api_key=c.rhodecode_user.api_key),class_='atom_icon')}
50 %else:
50 %else:
51 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')}
51 ${h.link_to(_('RSS'),h.url('rss_feed_home',repo_name=c.dbrepo.repo_name),class_='rss_icon')}
52 ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')}
52 ${h.link_to(_('ATOM'),h.url('atom_feed_home',repo_name=c.dbrepo.repo_name),class_='atom_icon')}
53 %endif
53 %endif
54 </div>
54 </div>
55 %if c.rhodecode_user.username != 'default':
55 %if c.rhodecode_user.username != 'default':
56 %if c.following:
56 %if c.following:
57 <span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
57 <span id="follow_toggle" class="following" title="${_('Stop following this repository')}"
58 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
58 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
59 </span>
59 </span>
60 %else:
60 %else:
61 <span id="follow_toggle" class="follow" title="${_('Start following this repository')}"
61 <span id="follow_toggle" class="follow" title="${_('Start following this repository')}"
62 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
62 onclick="javascript:toggleFollowingRepo(this,${c.dbrepo.repo_id},'${str(h.get_token())}')">
63 </span>
63 </span>
64 %endif
64 %endif
65 %endif:
65 %endif:
66 ##REPO TYPE
66 ##REPO TYPE
67 %if h.is_hg(c.dbrepo):
67 %if h.is_hg(c.dbrepo):
68 <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
68 <img style="margin-bottom:2px" class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
69 %endif
69 %endif
70 %if h.is_git(c.dbrepo):
70 %if h.is_git(c.dbrepo):
71 <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
71 <img style="margin-bottom:2px" class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
72 %endif
72 %endif
73
73
74 ##PUBLIC/PRIVATE
74 ##PUBLIC/PRIVATE
75 %if c.dbrepo.private:
75 %if c.dbrepo.private:
76 <img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
76 <img style="margin-bottom:2px" class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
77 %else:
77 %else:
78 <img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
78 <img style="margin-bottom:2px" class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
79 %endif
79 %endif
80
80
81 ##REPO NAME
81 ##REPO NAME
82 <span class="repo_name" title="${_('Non changable ID %s') % c.dbrepo.repo_id}">${h.repo_link(c.dbrepo.groups_and_repo)}</span>
82 <span class="repo_name" title="${_('Non changable ID %s') % c.dbrepo.repo_id}">${h.repo_link(c.dbrepo.groups_and_repo)}</span>
83
83
84 ##FORK
84 ##FORK
85 %if c.dbrepo.fork:
85 %if c.dbrepo.fork:
86 <div style="margin-top:5px;clear:both"">
86 <div style="margin-top:5px;clear:both"">
87 <a href="${h.url('summary_home',repo_name=c.dbrepo.fork.repo_name)}"><img class="icon" alt="${_('public')}" title="${_('Fork of')} ${c.dbrepo.fork.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/>
87 <a href="${h.url('summary_home',repo_name=c.dbrepo.fork.repo_name)}"><img class="icon" alt="${_('public')}" title="${_('Fork of')} ${c.dbrepo.fork.repo_name}" src="${h.url('/images/icons/arrow_divide.png')}"/>
88 ${_('Fork of')} ${c.dbrepo.fork.repo_name}
88 ${_('Fork of')} ${c.dbrepo.fork.repo_name}
89 </a>
89 </a>
90 </div>
90 </div>
91 %endif
91 %endif
92 ##REMOTE
92 ##REMOTE
93 %if c.dbrepo.clone_uri:
93 %if c.dbrepo.clone_uri:
94 <div style="margin-top:5px;clear:both">
94 <div style="margin-top:5px;clear:both">
95 <a href="${h.url(str(h.hide_credentials(c.dbrepo.clone_uri)))}"><img class="icon" alt="${_('remote clone')}" title="${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}" src="${h.url('/images/icons/connect.png')}"/>
95 <a href="${h.url(str(h.hide_credentials(c.dbrepo.clone_uri)))}"><img class="icon" alt="${_('remote clone')}" title="${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}" src="${h.url('/images/icons/connect.png')}"/>
96 ${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}
96 ${_('Clone from')} ${h.hide_credentials(c.dbrepo.clone_uri)}
97 </a>
97 </a>
98 </div>
98 </div>
99 %endif
99 %endif
100 </div>
100 </div>
101 </div>
101 </div>
102
102
103 <div class="field">
103 <div class="field">
104 <div class="label-summary">
104 <div class="label-summary">
105 <label>${_('Description')}:</label>
105 <label>${_('Description')}:</label>
106 </div>
106 </div>
107 %if c.visual.stylify_metatags:
107 %if c.visual.stylify_metatags:
108 <div class="input ${summary(c.show_stats)} desc">${h.urlify_text(h.desc_stylize(c.dbrepo.description))}</div>
108 <div class="input ${summary(c.show_stats)} desc">${h.urlify_text(h.desc_stylize(c.dbrepo.description))}</div>
109 %else:
109 %else:
110 <div class="input ${summary(c.show_stats)} desc">${h.urlify_text(c.dbrepo.description)}</div>
110 <div class="input ${summary(c.show_stats)} desc">${h.urlify_text(c.dbrepo.description)}</div>
111 %endif
111 %endif
112 </div>
112 </div>
113
113
114 <div class="field">
114 <div class="field">
115 <div class="label-summary">
115 <div class="label-summary">
116 <label>${_('Contact')}:</label>
116 <label>${_('Contact')}:</label>
117 </div>
117 </div>
118 <div class="input ${summary(c.show_stats)}">
118 <div class="input ${summary(c.show_stats)}">
119 <div class="gravatar">
119 <div class="gravatar">
120 <img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/>
120 <img alt="gravatar" src="${h.gravatar_url(c.dbrepo.user.email)}"/>
121 </div>
121 </div>
122 ${_('Username')}: ${c.dbrepo.user.username}<br/>
122 ${_('Username')}: ${c.dbrepo.user.username}<br/>
123 ${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}<br/>
123 ${_('Name')}: ${c.dbrepo.user.name} ${c.dbrepo.user.lastname}<br/>
124 ${_('Email')}: <a href="mailto:${c.dbrepo.user.email}">${c.dbrepo.user.email}</a>
124 ${_('Email')}: <a href="mailto:${c.dbrepo.user.email}">${c.dbrepo.user.email}</a>
125 </div>
125 </div>
126 </div>
126 </div>
127
127
128 <div class="field">
128 <div class="field">
129 <div class="label-summary">
129 <div class="label-summary">
130 <label>${_('Clone url')}:</label>
130 <label>${_('Clone url')}:</label>
131 </div>
131 </div>
132 <div class="input ${summary(c.show_stats)}">
132 <div class="input ${summary(c.show_stats)}">
133 <div style="display:none" id="clone_by_name" class="ui-btn clone">${_('Show by Name')}</div>
133 <div style="display:none" id="clone_by_name" class="ui-btn clone">${_('Show by Name')}</div>
134 <div id="clone_by_id" class="ui-btn clone">${_('Show by ID')}</div>
134 <div id="clone_by_id" class="ui-btn clone">${_('Show by ID')}</div>
135 <input style="width:80%;margin-left:105px" type="text" id="clone_url" readonly="readonly" value="${c.clone_repo_url}"/>
135 <input style="width:80%;margin-left:105px" type="text" id="clone_url" readonly="readonly" value="${c.clone_repo_url}"/>
136 <input style="display:none;width:80%;margin-left:105px" type="text" id="clone_url_id" readonly="readonly" value="${c.clone_repo_url_id}"/>
136 <input style="display:none;width:80%;margin-left:105px" type="text" id="clone_url_id" readonly="readonly" value="${c.clone_repo_url_id}"/>
137 </div>
137 </div>
138 </div>
138 </div>
139
139
140 <div class="field">
140 <div class="field">
141 <div class="label-summary">
141 <div class="label-summary">
142 <label>${_('Trending files')}:</label>
142 <label>${_('Trending files')}:</label>
143 </div>
143 </div>
144 <div class="input ${summary(c.show_stats)}">
144 <div class="input ${summary(c.show_stats)}">
145 %if c.show_stats:
145 %if c.show_stats:
146 <div id="lang_stats"></div>
146 <div id="lang_stats"></div>
147 %else:
147 %else:
148 ${_('Statistics are disabled for this repository')}
148 ${_('Statistics are disabled for this repository')}
149 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
149 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
150 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
150 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
151 %endif
151 %endif
152 %endif
152 %endif
153 </div>
153 </div>
154 </div>
154 </div>
155
155
156 <div class="field">
156 <div class="field">
157 <div class="label-summary">
157 <div class="label-summary">
158 <label>${_('Download')}:</label>
158 <label>${_('Download')}:</label>
159 </div>
159 </div>
160 <div class="input ${summary(c.show_stats)}">
160 <div class="input ${summary(c.show_stats)}">
161 %if len(c.rhodecode_repo.revisions) == 0:
161 %if len(c.rhodecode_repo.revisions) == 0:
162 ${_('There are no downloads yet')}
162 ${_('There are no downloads yet')}
163 %elif c.enable_downloads is False:
163 %elif c.enable_downloads is False:
164 ${_('Downloads are disabled for this repository')}
164 ${_('Downloads are disabled for this repository')}
165 %if h.HasPermissionAll('hg.admin')('enable downloads on from summary'):
165 %if h.HasPermissionAll('hg.admin')('enable downloads on from summary'):
166 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
166 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
167 %endif
167 %endif
168 %else:
168 %else:
169 ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)}
169 ${h.select('download_options',c.rhodecode_repo.get_changeset().raw_id,c.download_options)}
170 <span id="${'zip_link'}">${h.link_to(_('Download as zip'), h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")}</span>
170 <span id="${'zip_link'}">${h.link_to(_('Download as zip'), h.url('files_archive_home',repo_name=c.dbrepo.repo_name,fname='tip.zip'),class_="archive_icon ui-btn")}</span>
171 <span style="vertical-align: bottom">
171 <span style="vertical-align: bottom">
172 <input id="archive_subrepos" type="checkbox" name="subrepos" />
172 <input id="archive_subrepos" type="checkbox" name="subrepos" />
173 <label for="archive_subrepos" class="tooltip" title="${h.tooltip(_('Check this to download archive with subrepos'))}" >${_('with subrepos')}</label>
173 <label for="archive_subrepos" class="tooltip" title="${h.tooltip(_('Check this to download archive with subrepos'))}" >${_('with subrepos')}</label>
174 </span>
174 </span>
175 %endif
175 %endif
176 </div>
176 </div>
177 </div>
177 </div>
178 </div>
178 </div>
179 </div>
179 </div>
180 </div>
180 </div>
181
181
182 %if c.show_stats:
182 %if c.show_stats:
183 <div class="box box-right" style="min-height:455px">
183 <div class="box box-right" style="min-height:455px">
184 <!-- box / title -->
184 <!-- box / title -->
185 <div class="title">
185 <div class="title">
186 <h5>${_('Commit activity by day / author')}</h5>
186 <h5>${_('Commit activity by day / author')}</h5>
187 </div>
187 </div>
188
188
189 <div class="graph">
189 <div class="graph">
190 <div style="padding:0 10px 10px 17px;">
190 <div style="padding:0 10px 10px 17px;">
191 %if c.no_data:
191 %if c.no_data:
192 ${c.no_data_msg}
192 ${c.no_data_msg}
193 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
193 %if h.HasPermissionAll('hg.admin')('enable stats on from summary'):
194 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
194 ${h.link_to(_('enable'),h.url('edit_repo',repo_name=c.repo_name),class_="ui-btn")}
195 %endif
195 %endif
196 %else:
196 %else:
197 ${_('Stats gathered: ')} ${c.stats_percentage}%
197 ${_('Stats gathered: ')} ${c.stats_percentage}%
198 %endif
198 %endif
199 </div>
199 </div>
200 <div id="commit_history" style="width:450px;height:300px;float:left"></div>
200 <div id="commit_history" style="width:450px;height:300px;float:left"></div>
201 <div style="clear: both;height: 10px"></div>
201 <div style="clear: both;height: 10px"></div>
202 <div id="overview" style="width:450px;height:100px;float:left"></div>
202 <div id="overview" style="width:450px;height:100px;float:left"></div>
203
203
204 <div id="legend_data" style="clear:both;margin-top:10px;">
204 <div id="legend_data" style="clear:both;margin-top:10px;">
205 <div id="legend_container"></div>
205 <div id="legend_container"></div>
206 <div id="legend_choices">
206 <div id="legend_choices">
207 <table id="legend_choices_tables" class="noborder" style="font-size:smaller;color:#545454"></table>
207 <table id="legend_choices_tables" class="noborder" style="font-size:smaller;color:#545454"></table>
208 </div>
208 </div>
209 </div>
209 </div>
210 </div>
210 </div>
211 </div>
211 </div>
212 %endif
212 %endif
213
213
214 <div class="box">
214 <div class="box">
215 <div class="title">
215 <div class="title">
216 <div class="breadcrumbs">
216 <div class="breadcrumbs">
217 %if c.repo_changesets:
217 %if c.repo_changesets:
218 ${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}
218 ${h.link_to(_('Shortlog'),h.url('shortlog_home',repo_name=c.repo_name))}
219 %else:
219 %else:
220 ${_('Quick start')}
220 ${_('Quick start')}
221 %endif
221 %endif
222 </div>
222 </div>
223 </div>
223 </div>
224 <div class="table">
224 <div class="table">
225 <div id="shortlog_data">
225 <div id="shortlog_data">
226 <%include file='../shortlog/shortlog_data.html'/>
226 <%include file='../shortlog/shortlog_data.html'/>
227 </div>
227 </div>
228 </div>
228 </div>
229 </div>
229 </div>
230
230
231 %if c.readme_data:
231 %if c.readme_data:
232 <div id="readme" class="box header-pos-fix" style="background-color: #FAFAFA">
232 <div id="readme" class="box header-pos-fix" style="background-color: #FAFAFA">
233 <div id="readme" class="title" title="${_("Readme file at revision '%s'" % c.rhodecode_db_repo.landing_rev)}">
233 <div id="readme" class="title" title="${_("Readme file at revision '%s'" % c.rhodecode_db_repo.landing_rev)}">
234 <div class="breadcrumbs">
234 <div class="breadcrumbs">
235 <a href="${h.url('files_home',repo_name=c.repo_name,revision='tip',f_path=c.readme_file)}">${c.readme_file}</a>
235 <a href="${h.url('files_home',repo_name=c.repo_name,revision='tip',f_path=c.readme_file)}">${c.readme_file}</a>
236 <a class="permalink" href="#readme" title="${_('Permalink to this readme')}">&para;</a>
236 <a class="permalink" href="#readme" title="${_('Permalink to this readme')}">&para;</a>
237 </div>
237 </div>
238 </div>
238 </div>
239 <div id="readme" class="readme">
239 <div id="readme" class="readme">
240 <div class="readme_box">
240 <div class="readme_box">
241 ${c.readme_data|n}
241 ${c.readme_data|n}
242 </div>
242 </div>
243 </div>
243 </div>
244 </div>
244 </div>
245 %endif
245 %endif
246
246
247 <script type="text/javascript">
247 <script type="text/javascript">
248 var clone_url = 'clone_url';
248 var clone_url = 'clone_url';
249 YUE.on(clone_url,'click',function(e){
249 YUE.on(clone_url,'click',function(e){
250 if(YUD.hasClass(clone_url,'selected')){
250 if(YUD.hasClass(clone_url,'selected')){
251 return
251 return
252 }
252 }
253 else{
253 else{
254 YUD.addClass(clone_url,'selected');
254 YUD.addClass(clone_url,'selected');
255 YUD.get(clone_url).select();
255 YUD.get(clone_url).select();
256 }
256 }
257 })
257 })
258
258
259 YUE.on('clone_by_name','click',function(e){
259 YUE.on('clone_by_name','click',function(e){
260 // show url by name and hide name button
260 // show url by name and hide name button
261 YUD.setStyle('clone_url','display','');
261 YUD.setStyle('clone_url','display','');
262 YUD.setStyle('clone_by_name','display','none');
262 YUD.setStyle('clone_by_name','display','none');
263
263
264 // hide url by id and show name button
264 // hide url by id and show name button
265 YUD.setStyle('clone_by_id','display','');
265 YUD.setStyle('clone_by_id','display','');
266 YUD.setStyle('clone_url_id','display','none');
266 YUD.setStyle('clone_url_id','display','none');
267
267
268 })
268 })
269 YUE.on('clone_by_id','click',function(e){
269 YUE.on('clone_by_id','click',function(e){
270
270
271 // show url by id and hide id button
271 // show url by id and hide id button
272 YUD.setStyle('clone_by_id','display','none');
272 YUD.setStyle('clone_by_id','display','none');
273 YUD.setStyle('clone_url_id','display','');
273 YUD.setStyle('clone_url_id','display','');
274
274
275 // hide url by name and show id button
275 // hide url by name and show id button
276 YUD.setStyle('clone_by_name','display','');
276 YUD.setStyle('clone_by_name','display','');
277 YUD.setStyle('clone_url','display','none');
277 YUD.setStyle('clone_url','display','none');
278 })
278 })
279
279
280
280
281 var tmpl_links = {};
281 var tmpl_links = {};
282 %for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
282 %for cnt,archive in enumerate(c.rhodecode_repo._get_archives()):
283 tmpl_links["${archive['type']}"] = '${h.link_to('__NAME__', h.url('files_archive_home',repo_name=c.dbrepo.repo_name, fname='__CS__'+archive['extension'],subrepos='__SUB__'),class_='archive_icon ui-btn')}';
283 tmpl_links["${archive['type']}"] = '${h.link_to('__NAME__', h.url('files_archive_home',repo_name=c.dbrepo.repo_name, fname='__CS__'+archive['extension'],subrepos='__SUB__'),class_='archive_icon ui-btn')}';
284 %endfor
284 %endfor
285
285
286 YUE.on(['download_options','archive_subrepos'],'change',function(e){
286 YUE.on(['download_options','archive_subrepos'],'change',function(e){
287 var sm = YUD.get('download_options');
287 var sm = YUD.get('download_options');
288 var new_cs = sm.options[sm.selectedIndex];
288 var new_cs = sm.options[sm.selectedIndex];
289
289
290 for(k in tmpl_links){
290 for(k in tmpl_links){
291 var s = YUD.get(k+'_link');
291 var s = YUD.get(k+'_link');
292 if(s){
292 if(s){
293 var title_tmpl = "${_('Download %s as %s') % ('__CS_NAME__','__CS_EXT__')}";
293 var title_tmpl = "${_('Download %s as %s') % ('__CS_NAME__','__CS_EXT__')}";
294 title_tmpl= title_tmpl.replace('__CS_NAME__',new_cs.text);
294 title_tmpl= title_tmpl.replace('__CS_NAME__',new_cs.text);
295 title_tmpl = title_tmpl.replace('__CS_EXT__',k);
295 title_tmpl = title_tmpl.replace('__CS_EXT__',k);
296
296
297 var url = tmpl_links[k].replace('__CS__',new_cs.value);
297 var url = tmpl_links[k].replace('__CS__',new_cs.value);
298 var subrepos = YUD.get('archive_subrepos').checked;
298 var subrepos = YUD.get('archive_subrepos').checked;
299 url = url.replace('__SUB__',subrepos);
299 url = url.replace('__SUB__',subrepos);
300 url = url.replace('__NAME__',title_tmpl);
300 url = url.replace('__NAME__',title_tmpl);
301 s.innerHTML = url
301 s.innerHTML = url
302 }
302 }
303 }
303 }
304 });
304 });
305 </script>
305 </script>
306 %if c.show_stats:
306 %if c.show_stats:
307 <script type="text/javascript">
307 <script type="text/javascript">
308 var data = ${c.trending_languages|n};
308 var data = ${c.trending_languages|n};
309 var total = 0;
309 var total = 0;
310 var no_data = true;
310 var no_data = true;
311 var tbl = document.createElement('table');
311 var tbl = document.createElement('table');
312 tbl.setAttribute('class','trending_language_tbl');
312 tbl.setAttribute('class','trending_language_tbl');
313 var cnt = 0;
313 var cnt = 0;
314 for (var i=0;i<data.length;i++){
314 for (var i=0;i<data.length;i++){
315 total+= data[i][1].count;
315 total+= data[i][1].count;
316 }
316 }
317 for (var i=0;i<data.length;i++){
317 for (var i=0;i<data.length;i++){
318 cnt += 1;
318 cnt += 1;
319 no_data = false;
319 no_data = false;
320
320
321 var hide = cnt>2;
321 var hide = cnt>2;
322 var tr = document.createElement('tr');
322 var tr = document.createElement('tr');
323 if (hide){
323 if (hide){
324 tr.setAttribute('style','display:none');
324 tr.setAttribute('style','display:none');
325 tr.setAttribute('class','stats_hidden');
325 tr.setAttribute('class','stats_hidden');
326 }
326 }
327 var k = data[i][0];
327 var k = data[i][0];
328 var obj = data[i][1];
328 var obj = data[i][1];
329 var percentage = Math.round((obj.count/total*100),2);
329 var percentage = Math.round((obj.count/total*100),2);
330
330
331 var td1 = document.createElement('td');
331 var td1 = document.createElement('td');
332 td1.width = 150;
332 td1.width = 150;
333 var trending_language_label = document.createElement('div');
333 var trending_language_label = document.createElement('div');
334 trending_language_label.innerHTML = obj.desc+" ("+k+")";
334 trending_language_label.innerHTML = obj.desc+" ("+k+")";
335 td1.appendChild(trending_language_label);
335 td1.appendChild(trending_language_label);
336
336
337 var td2 = document.createElement('td');
337 var td2 = document.createElement('td');
338 td2.setAttribute('style','padding-right:14px !important');
338 td2.setAttribute('style','padding-right:14px !important');
339 var trending_language = document.createElement('div');
339 var trending_language = document.createElement('div');
340 var nr_files = obj.count+" ${_('files')}";
340 var nr_files = obj.count+" ${_('files')}";
341
341
342 trending_language.title = k+" "+nr_files;
342 trending_language.title = k+" "+nr_files;
343
343
344 if (percentage>22){
344 if (percentage>22){
345 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";
345 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"% "+nr_files+ "</b>";
346 }
346 }
347 else{
347 else{
348 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
348 trending_language.innerHTML = "<b style='font-size:0.8em'>"+percentage+"%</b>";
349 }
349 }
350
350
351 trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
351 trending_language.setAttribute("class", 'trending_language top-right-rounded-corner bottom-right-rounded-corner');
352 trending_language.style.width=percentage+"%";
352 trending_language.style.width=percentage+"%";
353 td2.appendChild(trending_language);
353 td2.appendChild(trending_language);
354
354
355 tr.appendChild(td1);
355 tr.appendChild(td1);
356 tr.appendChild(td2);
356 tr.appendChild(td2);
357 tbl.appendChild(tr);
357 tbl.appendChild(tr);
358 if(cnt == 3){
358 if(cnt == 3){
359 var show_more = document.createElement('tr');
359 var show_more = document.createElement('tr');
360 var td = document.createElement('td');
360 var td = document.createElement('td');
361 lnk = document.createElement('a');
361 lnk = document.createElement('a');
362
362
363 lnk.href='#';
363 lnk.href='#';
364 lnk.innerHTML = "${_('show more')}";
364 lnk.innerHTML = "${_('show more')}";
365 lnk.id='code_stats_show_more';
365 lnk.id='code_stats_show_more';
366 td.appendChild(lnk);
366 td.appendChild(lnk);
367
367
368 show_more.appendChild(td);
368 show_more.appendChild(td);
369 show_more.appendChild(document.createElement('td'));
369 show_more.appendChild(document.createElement('td'));
370 tbl.appendChild(show_more);
370 tbl.appendChild(show_more);
371 }
371 }
372
372
373 }
373 }
374
374
375 YUD.get('lang_stats').appendChild(tbl);
375 YUD.get('lang_stats').appendChild(tbl);
376 YUE.on('code_stats_show_more','click',function(){
376 YUE.on('code_stats_show_more','click',function(){
377 l = YUD.getElementsByClassName('stats_hidden')
377 l = YUD.getElementsByClassName('stats_hidden')
378 for (e in l){
378 for (e in l){
379 YUD.setStyle(l[e],'display','');
379 YUD.setStyle(l[e],'display','');
380 };
380 };
381 YUD.setStyle(YUD.get('code_stats_show_more'),
381 YUD.setStyle(YUD.get('code_stats_show_more'),
382 'display','none');
382 'display','none');
383 });
383 });
384 </script>
384 </script>
385 <script type="text/javascript">
385 <script type="text/javascript">
386 /**
386 /**
387 * Plots summary graph
387 * Plots summary graph
388 *
388 *
389 * @class SummaryPlot
389 * @class SummaryPlot
390 * @param {from} initial from for detailed graph
390 * @param {from} initial from for detailed graph
391 * @param {to} initial to for detailed graph
391 * @param {to} initial to for detailed graph
392 * @param {dataset}
392 * @param {dataset}
393 * @param {overview_dataset}
393 * @param {overview_dataset}
394 */
394 */
395 function SummaryPlot(from,to,dataset,overview_dataset) {
395 function SummaryPlot(from,to,dataset,overview_dataset) {
396 var initial_ranges = {
396 var initial_ranges = {
397 "xaxis":{
397 "xaxis":{
398 "from":from,
398 "from":from,
399 "to":to,
399 "to":to,
400 },
400 },
401 };
401 };
402 var dataset = dataset;
402 var dataset = dataset;
403 var overview_dataset = [overview_dataset];
403 var overview_dataset = [overview_dataset];
404 var choiceContainer = YUD.get("legend_choices");
404 var choiceContainer = YUD.get("legend_choices");
405 var choiceContainerTable = YUD.get("legend_choices_tables");
405 var choiceContainerTable = YUD.get("legend_choices_tables");
406 var plotContainer = YUD.get('commit_history');
406 var plotContainer = YUD.get('commit_history');
407 var overviewContainer = YUD.get('overview');
407 var overviewContainer = YUD.get('overview');
408
408
409 var plot_options = {
409 var plot_options = {
410 bars: {show:true,align:'center',lineWidth:4},
410 bars: {show:true,align:'center',lineWidth:4},
411 legend: {show:true, container:"legend_container"},
411 legend: {show:true, container:"legend_container"},
412 points: {show:true,radius:0,fill:false},
412 points: {show:true,radius:0,fill:false},
413 yaxis: {tickDecimals:0,},
413 yaxis: {tickDecimals:0,},
414 xaxis: {
414 xaxis: {
415 mode: "time",
415 mode: "time",
416 timeformat: "%d/%m",
416 timeformat: "%d/%m",
417 min:from,
417 min:from,
418 max:to,
418 max:to,
419 },
419 },
420 grid: {
420 grid: {
421 hoverable: true,
421 hoverable: true,
422 clickable: true,
422 clickable: true,
423 autoHighlight:true,
423 autoHighlight:true,
424 color: "#999"
424 color: "#999"
425 },
425 },
426 //selection: {mode: "x"}
426 //selection: {mode: "x"}
427 };
427 };
428 var overview_options = {
428 var overview_options = {
429 legend:{show:false},
429 legend:{show:false},
430 bars: {show:true,barWidth: 2,},
430 bars: {show:true,barWidth: 2,},
431 shadowSize: 0,
431 shadowSize: 0,
432 xaxis: {mode: "time", timeformat: "%d/%m/%y",},
432 xaxis: {mode: "time", timeformat: "%d/%m/%y",},
433 yaxis: {ticks: 3, min: 0,tickDecimals:0,},
433 yaxis: {ticks: 3, min: 0,tickDecimals:0,},
434 grid: {color: "#999",},
434 grid: {color: "#999",},
435 selection: {mode: "x"}
435 selection: {mode: "x"}
436 };
436 };
437
437
438 /**
438 /**
439 *get dummy data needed in few places
439 *get dummy data needed in few places
440 */
440 */
441 function getDummyData(label){
441 function getDummyData(label){
442 return {"label":label,
442 return {"label":label,
443 "data":[{"time":0,
443 "data":[{"time":0,
444 "commits":0,
444 "commits":0,
445 "added":0,
445 "added":0,
446 "changed":0,
446 "changed":0,
447 "removed":0,
447 "removed":0,
448 }],
448 }],
449 "schema":["commits"],
449 "schema":["commits"],
450 "color":'#ffffff',
450 "color":'#ffffff',
451 }
451 }
452 }
452 }
453
453
454 /**
454 /**
455 * generate checkboxes accordindly to data
455 * generate checkboxes accordindly to data
456 * @param keys
456 * @param keys
457 * @returns
457 * @returns
458 */
458 */
459 function generateCheckboxes(data) {
459 function generateCheckboxes(data) {
460 //append checkboxes
460 //append checkboxes
461 var i = 0;
461 var i = 0;
462 choiceContainerTable.innerHTML = '';
462 choiceContainerTable.innerHTML = '';
463 for(var pos in data) {
463 for(var pos in data) {
464
464
465 data[pos].color = i;
465 data[pos].color = i;
466 i++;
466 i++;
467 if(data[pos].label != ''){
467 if(data[pos].label != ''){
468 choiceContainerTable.innerHTML +=
468 choiceContainerTable.innerHTML +=
469 '<tr><td><input type="checkbox" id="id_user_{0}" name="{0}" checked="checked" /> \
469 '<tr><td><input type="checkbox" id="id_user_{0}" name="{0}" checked="checked" /> \
470 <label for="id_user_{0}">{0}</label></td></tr>'.format(data[pos].label);
470 <label for="id_user_{0}">{0}</label></td></tr>'.format(data[pos].label);
471 }
471 }
472 }
472 }
473 }
473 }
474
474
475 /**
475 /**
476 * ToolTip show
476 * ToolTip show
477 */
477 */
478 function showTooltip(x, y, contents) {
478 function showTooltip(x, y, contents) {
479 var div=document.getElementById('tooltip');
479 var div=document.getElementById('tooltip');
480 if(!div) {
480 if(!div) {
481 div = document.createElement('div');
481 div = document.createElement('div');
482 div.id="tooltip";
482 div.id="tooltip";
483 div.style.position="absolute";
483 div.style.position="absolute";
484 div.style.border='1px solid #fdd';
484 div.style.border='1px solid #fdd';
485 div.style.padding='2px';
485 div.style.padding='2px';
486 div.style.backgroundColor='#fee';
486 div.style.backgroundColor='#fee';
487 document.body.appendChild(div);
487 document.body.appendChild(div);
488 }
488 }
489 YUD.setStyle(div, 'opacity', 0);
489 YUD.setStyle(div, 'opacity', 0);
490 div.innerHTML = contents;
490 div.innerHTML = contents;
491 div.style.top=(y + 5) + "px";
491 div.style.top=(y + 5) + "px";
492 div.style.left=(x + 5) + "px";
492 div.style.left=(x + 5) + "px";
493
493
494 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
494 var anim = new YAHOO.util.Anim(div, {opacity: {to: 0.8}}, 0.2);
495 anim.animate();
495 anim.animate();
496 }
496 }
497
497
498 /**
498 /**
499 * This function will detect if selected period has some changesets
499 * This function will detect if selected period has some changesets
500 for this user if it does this data is then pushed for displaying
500 for this user if it does this data is then pushed for displaying
501 Additionally it will only display users that are selected by the checkbox
501 Additionally it will only display users that are selected by the checkbox
502 */
502 */
503 function getDataAccordingToRanges(ranges) {
503 function getDataAccordingToRanges(ranges) {
504
504
505 var data = [];
505 var data = [];
506 var new_dataset = {};
506 var new_dataset = {};
507 var keys = [];
507 var keys = [];
508 var max_commits = 0;
508 var max_commits = 0;
509 for(var key in dataset){
509 for(var key in dataset){
510
510
511 for(var ds in dataset[key].data){
511 for(var ds in dataset[key].data){
512 commit_data = dataset[key].data[ds];
512 commit_data = dataset[key].data[ds];
513 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
513 if (commit_data.time >= ranges.xaxis.from && commit_data.time <= ranges.xaxis.to){
514
514
515 if(new_dataset[key] === undefined){
515 if(new_dataset[key] === undefined){
516 new_dataset[key] = {data:[],schema:["commits"],label:key};
516 new_dataset[key] = {data:[],schema:["commits"],label:key};
517 }
517 }
518 new_dataset[key].data.push(commit_data);
518 new_dataset[key].data.push(commit_data);
519 }
519 }
520 }
520 }
521 if (new_dataset[key] !== undefined){
521 if (new_dataset[key] !== undefined){
522 data.push(new_dataset[key]);
522 data.push(new_dataset[key]);
523 }
523 }
524 }
524 }
525
525
526 if (data.length > 0){
526 if (data.length > 0){
527 return data;
527 return data;
528 }
528 }
529 else{
529 else{
530 //just return dummy data for graph to plot itself
530 //just return dummy data for graph to plot itself
531 return [getDummyData('')];
531 return [getDummyData('')];
532 }
532 }
533 }
533 }
534
534
535 /**
535 /**
536 * redraw using new checkbox data
536 * redraw using new checkbox data
537 */
537 */
538 function plotchoiced(e,args){
538 function plotchoiced(e,args){
539 var cur_data = args[0];
539 var cur_data = args[0];
540 var cur_ranges = args[1];
540 var cur_ranges = args[1];
541
541
542 var new_data = [];
542 var new_data = [];
543 var inputs = choiceContainer.getElementsByTagName("input");
543 var inputs = choiceContainer.getElementsByTagName("input");
544
544
545 //show only checked labels
545 //show only checked labels
546 for(var i=0; i<inputs.length; i++) {
546 for(var i=0; i<inputs.length; i++) {
547 var checkbox_key = inputs[i].name;
547 var checkbox_key = inputs[i].name;
548
548
549 if(inputs[i].checked){
549 if(inputs[i].checked){
550 for(var d in cur_data){
550 for(var d in cur_data){
551 if(cur_data[d].label == checkbox_key){
551 if(cur_data[d].label == checkbox_key){
552 new_data.push(cur_data[d]);
552 new_data.push(cur_data[d]);
553 }
553 }
554 }
554 }
555 }
555 }
556 else{
556 else{
557 //push dummy data to not hide the label
557 //push dummy data to not hide the label
558 new_data.push(getDummyData(checkbox_key));
558 new_data.push(getDummyData(checkbox_key));
559 }
559 }
560 }
560 }
561
561
562 var new_options = YAHOO.lang.merge(plot_options, {
562 var new_options = YAHOO.lang.merge(plot_options, {
563 xaxis: {
563 xaxis: {
564 min: cur_ranges.xaxis.from,
564 min: cur_ranges.xaxis.from,
565 max: cur_ranges.xaxis.to,
565 max: cur_ranges.xaxis.to,
566 mode:"time",
566 mode:"time",
567 timeformat: "%d/%m",
567 timeformat: "%d/%m",
568 },
568 },
569 });
569 });
570 if (!new_data){
570 if (!new_data){
571 new_data = [[0,1]];
571 new_data = [[0,1]];
572 }
572 }
573 // do the zooming
573 // do the zooming
574 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
574 plot = YAHOO.widget.Flot(plotContainer, new_data, new_options);
575
575
576 plot.subscribe("plotselected", plotselected);
576 plot.subscribe("plotselected", plotselected);
577
577
578 //resubscribe plothover
578 //resubscribe plothover
579 plot.subscribe("plothover", plothover);
579 plot.subscribe("plothover", plothover);
580
580
581 // don't fire event on the overview to prevent eternal loop
581 // don't fire event on the overview to prevent eternal loop
582 overview.setSelection(cur_ranges, true);
582 overview.setSelection(cur_ranges, true);
583
583
584 }
584 }
585
585
586 /**
586 /**
587 * plot only selected items from overview
587 * plot only selected items from overview
588 * @param ranges
588 * @param ranges
589 * @returns
589 * @returns
590 */
590 */
591 function plotselected(ranges,cur_data) {
591 function plotselected(ranges,cur_data) {
592 //updates the data for new plot
592 //updates the data for new plot
593 var data = getDataAccordingToRanges(ranges);
593 var data = getDataAccordingToRanges(ranges);
594 generateCheckboxes(data);
594 generateCheckboxes(data);
595
595
596 var new_options = YAHOO.lang.merge(plot_options, {
596 var new_options = YAHOO.lang.merge(plot_options, {
597 xaxis: {
597 xaxis: {
598 min: ranges.xaxis.from,
598 min: ranges.xaxis.from,
599 max: ranges.xaxis.to,
599 max: ranges.xaxis.to,
600 mode:"time",
600 mode:"time",
601 timeformat: "%d/%m",
601 timeformat: "%d/%m",
602 },
602 },
603 });
603 });
604 // do the zooming
604 // do the zooming
605 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
605 plot = YAHOO.widget.Flot(plotContainer, data, new_options);
606
606
607 plot.subscribe("plotselected", plotselected);
607 plot.subscribe("plotselected", plotselected);
608
608
609 //resubscribe plothover
609 //resubscribe plothover
610 plot.subscribe("plothover", plothover);
610 plot.subscribe("plothover", plothover);
611
611
612 // don't fire event on the overview to prevent eternal loop
612 // don't fire event on the overview to prevent eternal loop
613 overview.setSelection(ranges, true);
613 overview.setSelection(ranges, true);
614
614
615 //resubscribe choiced
615 //resubscribe choiced
616 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
616 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, ranges]);
617 }
617 }
618
618
619 var previousPoint = null;
619 var previousPoint = null;
620
620
621 function plothover(o) {
621 function plothover(o) {
622 var pos = o.pos;
622 var pos = o.pos;
623 var item = o.item;
623 var item = o.item;
624
624
625 //YUD.get("x").innerHTML = pos.x.toFixed(2);
625 //YUD.get("x").innerHTML = pos.x.toFixed(2);
626 //YUD.get("y").innerHTML = pos.y.toFixed(2);
626 //YUD.get("y").innerHTML = pos.y.toFixed(2);
627 if (item) {
627 if (item) {
628 if (previousPoint != item.datapoint) {
628 if (previousPoint != item.datapoint) {
629 previousPoint = item.datapoint;
629 previousPoint = item.datapoint;
630
630
631 var tooltip = YUD.get("tooltip");
631 var tooltip = YUD.get("tooltip");
632 if(tooltip) {
632 if(tooltip) {
633 tooltip.parentNode.removeChild(tooltip);
633 tooltip.parentNode.removeChild(tooltip);
634 }
634 }
635 var x = item.datapoint.x.toFixed(2);
635 var x = item.datapoint.x.toFixed(2);
636 var y = item.datapoint.y.toFixed(2);
636 var y = item.datapoint.y.toFixed(2);
637
637
638 if (!item.series.label){
638 if (!item.series.label){
639 item.series.label = 'commits';
639 item.series.label = 'commits';
640 }
640 }
641 var d = new Date(x*1000);
641 var d = new Date(x*1000);
642 var fd = d.toDateString()
642 var fd = d.toDateString()
643 var nr_commits = parseInt(y);
643 var nr_commits = parseInt(y);
644
644
645 var cur_data = dataset[item.series.label].data[item.dataIndex];
645 var cur_data = dataset[item.series.label].data[item.dataIndex];
646 var added = cur_data.added;
646 var added = cur_data.added;
647 var changed = cur_data.changed;
647 var changed = cur_data.changed;
648 var removed = cur_data.removed;
648 var removed = cur_data.removed;
649
649
650 var nr_commits_suffix = " ${_('commits')} ";
650 var nr_commits_suffix = " ${_('commits')} ";
651 var added_suffix = " ${_('files added')} ";
651 var added_suffix = " ${_('files added')} ";
652 var changed_suffix = " ${_('files changed')} ";
652 var changed_suffix = " ${_('files changed')} ";
653 var removed_suffix = " ${_('files removed')} ";
653 var removed_suffix = " ${_('files removed')} ";
654
654
655
655
656 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
656 if(nr_commits == 1){nr_commits_suffix = " ${_('commit')} ";}
657 if(added==1){added_suffix=" ${_('file added')} ";}
657 if(added==1){added_suffix=" ${_('file added')} ";}
658 if(changed==1){changed_suffix=" ${_('file changed')} ";}
658 if(changed==1){changed_suffix=" ${_('file changed')} ";}
659 if(removed==1){removed_suffix=" ${_('file removed')} ";}
659 if(removed==1){removed_suffix=" ${_('file removed')} ";}
660
660
661 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
661 showTooltip(item.pageX, item.pageY, item.series.label + " on " + fd
662 +'<br/>'+
662 +'<br/>'+
663 nr_commits + nr_commits_suffix+'<br/>'+
663 nr_commits + nr_commits_suffix+'<br/>'+
664 added + added_suffix +'<br/>'+
664 added + added_suffix +'<br/>'+
665 changed + changed_suffix + '<br/>'+
665 changed + changed_suffix + '<br/>'+
666 removed + removed_suffix + '<br/>');
666 removed + removed_suffix + '<br/>');
667 }
667 }
668 }
668 }
669 else {
669 else {
670 var tooltip = YUD.get("tooltip");
670 var tooltip = YUD.get("tooltip");
671
671
672 if(tooltip) {
672 if(tooltip) {
673 tooltip.parentNode.removeChild(tooltip);
673 tooltip.parentNode.removeChild(tooltip);
674 }
674 }
675 previousPoint = null;
675 previousPoint = null;
676 }
676 }
677 }
677 }
678
678
679 /**
679 /**
680 * MAIN EXECUTION
680 * MAIN EXECUTION
681 */
681 */
682
682
683 var data = getDataAccordingToRanges(initial_ranges);
683 var data = getDataAccordingToRanges(initial_ranges);
684 generateCheckboxes(data);
684 generateCheckboxes(data);
685
685
686 //main plot
686 //main plot
687 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
687 var plot = YAHOO.widget.Flot(plotContainer,data,plot_options);
688
688
689 //overview
689 //overview
690 var overview = YAHOO.widget.Flot(overviewContainer,
690 var overview = YAHOO.widget.Flot(overviewContainer,
691 overview_dataset, overview_options);
691 overview_dataset, overview_options);
692
692
693 //show initial selection on overview
693 //show initial selection on overview
694 overview.setSelection(initial_ranges);
694 overview.setSelection(initial_ranges);
695
695
696 plot.subscribe("plotselected", plotselected);
696 plot.subscribe("plotselected", plotselected);
697 plot.subscribe("plothover", plothover)
697 plot.subscribe("plothover", plothover)
698
698
699 overview.subscribe("plotselected", function (ranges) {
699 overview.subscribe("plotselected", function (ranges) {
700 plot.setSelection(ranges);
700 plot.setSelection(ranges);
701 });
701 });
702
702
703 // user choices on overview
703 // user choices on overview
704 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
704 YUE.on(choiceContainer.getElementsByTagName("input"), "click", plotchoiced, [data, initial_ranges]);
705 }
705 }
706 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
706 SummaryPlot(${c.ts_min},${c.ts_max},${c.commit_data|n},${c.overview_data|n});
707 </script>
707 </script>
708 %endif
708 %endif
709
709
710 </%def>
710 </%def>
General Comments 0
You need to be logged in to leave comments. Login now