Show More
@@ -3,6 +3,16 b'' | |||||
3 | Changelog |
|
3 | Changelog | |
4 | ========= |
|
4 | ========= | |
5 |
|
5 | |||
|
6 | ||||
|
7 | 1.0.1 (**2010-11-10**) | |||
|
8 | ---------------------- | |||
|
9 | ||||
|
10 | - fixed #53 python2.5 incompatible enumerate calls | |||
|
11 | - fixed #52 disable mercurial extension for web | |||
|
12 | - fixed #51 deleting repositories don't delete it's dependent objects | |||
|
13 | - small css updated | |||
|
14 | ||||
|
15 | ||||
6 | 1.0.0 (**2010-11-02**) |
|
16 | 1.0.0 (**2010-11-02**) | |
7 | ---------------------- |
|
17 | ---------------------- | |
8 |
|
18 |
@@ -5,12 +5,12 b' Installation' | |||||
5 |
|
5 | |||
6 | ``RhodeCode`` is written entirely in Python, but in order to use it's full |
|
6 | ``RhodeCode`` is written entirely in Python, but in order to use it's full | |
7 | potential there are some third-party requirements. When RhodeCode is used |
|
7 | potential there are some third-party requirements. When RhodeCode is used | |
8 | together with celery You have to install some kind of message broker, |
|
8 | together with celery_ You have to install some kind of message broker, | |
9 | recommended one is rabbitmq_ to make the async tasks work. |
|
9 | recommended one is rabbitmq_ to make the async tasks work. | |
10 |
|
10 | |||
11 | Of course RhodeCode works in sync mode also, then You don't have to install |
|
11 | Of course RhodeCode works in sync mode also, then You don't have to install | |
12 | any third party apps. Celery_ will give You large speed improvement when using |
|
12 | any third party apps. Celery_ will give You large speed improvement when using | |
13 |
many big repositories. If You plan to use it for |
|
13 | many big repositories. If You plan to use it for 5 or 10 small repositories, it | |
14 | will work just fine without celery running. |
|
14 | will work just fine without celery running. | |
15 |
|
15 | |||
16 | After You decide to Run it with celery make sure You run celeryd and |
|
16 | After You decide to Run it with celery make sure You run celeryd and | |
@@ -49,8 +49,9 b' Step by step installation example' | |||||
49 | --------------------------------- |
|
49 | --------------------------------- | |
50 |
|
50 | |||
51 |
|
51 | |||
52 |
- Assuming You have installed virtualenv_ create one using. |
|
52 | - Assuming You have installed virtualenv_ create one using. | |
53 |
will make sure non of Your system libs are linked |
|
53 | The `--no-site-packages` will make sure non of Your system libs are linked | |
|
54 | with this virtualenv_ | |||
54 |
|
55 | |||
55 | :: |
|
56 | :: | |
56 |
|
57 |
@@ -40,6 +40,18 b' Setting up the application' | |||||
40 | - Default permissions on each repository is read, and owner is admin. So |
|
40 | - Default permissions on each repository is read, and owner is admin. So | |
41 | remember to update these if needed. |
|
41 | remember to update these if needed. | |
42 |
|
42 | |||
|
43 | Note | |||
|
44 | ---- | |||
|
45 | ||||
|
46 | RhodeCode when running without the celery it's running all it's task in sync | |||
|
47 | mode, for first few times when visiting summary page You can notice few | |||
|
48 | slow downs, this is due the statistics building it's cache. After all changesets | |||
|
49 | are parsed it'll take the stats from cache and run much faster. Each summary | |||
|
50 | page display parse at most 250 changesets in order to not stress the cpu, so | |||
|
51 | the full stats are going to be loaded after total_number_of_changesets/250 | |||
|
52 | summary page visits. | |||
|
53 | ||||
|
54 | ||||
43 |
|
55 | |||
44 | Setting up Whoosh |
|
56 | Setting up Whoosh | |
45 | ----------------- |
|
57 | ----------------- | |
@@ -53,9 +65,9 b' Setting up Whoosh' | |||||
53 | When using incremental mode whoosh will check last modification date of each file |
|
65 | When using incremental mode whoosh will check last modification date of each file | |
54 | and add it to reindex if newer file is available. Also indexing daemon checks |
|
66 | and add it to reindex if newer file is available. Also indexing daemon checks | |
55 | for removed files and removes them from index. Sometime You might want to rebuild |
|
67 | for removed files and removes them from index. Sometime You might want to rebuild | |
56 |
index from scrach, in admin pa |
|
68 | index from scratch, in admin panel You can check `build from scratch` flag | |
57 | and in standalone daemon You can pass `full` instead on incremental to build |
|
69 | and in standalone daemon You can pass `full` instead on incremental to build | |
58 | remove previos index and build new one. |
|
70 | remove previous index and build new one. | |
59 |
|
71 | |||
60 | Nginx virtual host example |
|
72 | Nginx virtual host example | |
61 | -------------------------- |
|
73 | -------------------------- |
@@ -24,7 +24,7 b' versioning implementation: http://semver' | |||||
24 | @author: marcink |
|
24 | @author: marcink | |
25 | """ |
|
25 | """ | |
26 |
|
26 | |||
27 |
VERSION = (1, 0, |
|
27 | VERSION = (1, 0, 1,) | |
28 |
|
28 | |||
29 | __version__ = '.'.join((str(each) for each in VERSION[:4])) |
|
29 | __version__ = '.'.join((str(each) for each in VERSION[:4])) | |
30 |
|
30 |
@@ -203,12 +203,12 b' class _FilesBreadCrumbs(object):' | |||||
203 | revision=rev, f_path=''))] |
|
203 | revision=rev, f_path=''))] | |
204 | paths_l = paths.split('/') |
|
204 | paths_l = paths.split('/') | |
205 |
|
205 | |||
206 |
for cnt, p in enumerate(paths_l |
|
206 | for cnt, p in enumerate(paths_l): | |
207 | if p != '': |
|
207 | if p != '': | |
208 | url_l.append(link_to(p, url('files_home', |
|
208 | url_l.append(link_to(p, url('files_home', | |
209 | repo_name=repo_name, |
|
209 | repo_name=repo_name, | |
210 | revision=rev, |
|
210 | revision=rev, | |
211 | f_path='/'.join(paths_l[:cnt])))) |
|
211 | f_path='/'.join(paths_l[:cnt + 1])))) | |
212 |
|
212 | |||
213 | return literal('/'.join(url_l)) |
|
213 | return literal('/'.join(url_l)) | |
214 |
|
214 | |||
@@ -219,9 +219,9 b' class CodeHtmlFormatter(HtmlFormatter):' | |||||
219 | return self._wrap_div(self._wrap_pre(self._wrap_code(source))) |
|
219 | return self._wrap_div(self._wrap_pre(self._wrap_code(source))) | |
220 |
|
220 | |||
221 | def _wrap_code(self, source): |
|
221 | def _wrap_code(self, source): | |
222 |
for cnt, it in enumerate(source |
|
222 | for cnt, it in enumerate(source): | |
223 | i, t = it |
|
223 | i, t = it | |
224 | t = '<div id="#S-%s">%s</div>' % (cnt, t) |
|
224 | t = '<div id="#S-%s">%s</div>' % (cnt + 1, t) | |
225 | yield i, t |
|
225 | yield i, t | |
226 | def pygmentize(filenode, **kwargs): |
|
226 | def pygmentize(filenode, **kwargs): | |
227 | """ |
|
227 | """ |
@@ -221,6 +221,11 b" def make_ui(read_from='file', path=None," | |||||
221 | for k, v in cfg.items(section): |
|
221 | for k, v in cfg.items(section): | |
222 | baseui.setconfig(section, k, v) |
|
222 | baseui.setconfig(section, k, v) | |
223 | log.debug('settings ui from file[%s]%s:%s', section, k, v) |
|
223 | log.debug('settings ui from file[%s]%s:%s', section, k, v) | |
|
224 | ||||
|
225 | for k, v in baseui.configitems('extensions'): | |||
|
226 | baseui.setconfig('extensions', k, '0') | |||
|
227 | #just enable mq | |||
|
228 | baseui.setconfig('extensions', 'mq', '1') | |||
224 | if checkpaths:check_repo_dir(cfg.items('paths')) |
|
229 | if checkpaths:check_repo_dir(cfg.items('paths')) | |
225 |
|
230 | |||
226 |
|
231 |
@@ -89,6 +89,8 b' class Repository(Base):' | |||||
89 | user = relation('User') |
|
89 | user = relation('User') | |
90 | fork = relation('Repository', remote_side=repo_id) |
|
90 | fork = relation('Repository', remote_side=repo_id) | |
91 | repo_to_perm = relation('RepoToPerm', cascade='all') |
|
91 | repo_to_perm = relation('RepoToPerm', cascade='all') | |
|
92 | stats = relation('Statistics', cascade='all') | |||
|
93 | ||||
92 |
|
94 | |||
93 | def __repr__(self): |
|
95 | def __repr__(self): | |
94 | return "<Repository('id:%s:%s')>" % (self.repo_id, self.repo_name) |
|
96 | return "<Repository('id:%s:%s')>" % (self.repo_id, self.repo_name) | |
@@ -135,5 +137,5 b' class Statistics(Base):' | |||||
135 | commit_activity_combined = Column("commit_activity_combined", BLOB(), nullable=False)#JSON data |
|
137 | commit_activity_combined = Column("commit_activity_combined", BLOB(), nullable=False)#JSON data | |
136 | languages = Column("languages", BLOB(), nullable=False)#JSON data |
|
138 | languages = Column("languages", BLOB(), nullable=False)#JSON data | |
137 |
|
139 | |||
138 | repository = relation('Repository') |
|
140 | repository = relation('Repository', single_parent=True) | |
139 |
|
141 |
@@ -270,7 +270,7 b' text-decoration:none;' | |||||
270 | } |
|
270 | } | |
271 |
|
271 | |||
272 | #header #header-inner #logo a:hover { |
|
272 | #header #header-inner #logo a:hover { | |
273 |
color:# |
|
273 | color:#bfe3ff; | |
274 | } |
|
274 | } | |
275 |
|
275 | |||
276 | #header #header-inner #quick,#header #header-inner #quick ul { |
|
276 | #header #header-inner #quick,#header #header-inner #quick ul { | |
@@ -419,7 +419,7 b' padding:12px 9px 7px 24px;' | |||||
419 | } |
|
419 | } | |
420 |
|
420 | |||
421 | #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover { |
|
421 | #header #header-inner #quick li ul li a.repos,#header #header-inner #quick li ul li a.repos:hover { | |
422 |
background:url("../images/icons/ |
|
422 | background:url("../images/icons/database_edit.png") no-repeat scroll 4px 9px #FFF; | |
423 | width:167px; |
|
423 | width:167px; | |
424 | margin:0; |
|
424 | margin:0; | |
425 | padding:12px 9px 7px 24px; |
|
425 | padding:12px 9px 7px 24px; | |
@@ -1010,7 +1010,7 b' padding:0;' | |||||
1010 | #content div.box table th { |
|
1010 | #content div.box table th { | |
1011 | background:#eee; |
|
1011 | background:#eee; | |
1012 | border-bottom:1px solid #ddd; |
|
1012 | border-bottom:1px solid #ddd; | |
1013 |
padding: |
|
1013 | padding:5px 0px 5px 5px; | |
1014 | } |
|
1014 | } | |
1015 |
|
1015 | |||
1016 | #content div.box table th.left { |
|
1016 | #content div.box table th.left { | |
@@ -1393,7 +1393,6 b' background-color:#003367;' | |||||
1393 | color:#FFF; |
|
1393 | color:#FFF; | |
1394 | display:block; |
|
1394 | display:block; | |
1395 | min-width:20px; |
|
1395 | min-width:20px; | |
1396 | max-width:400px; |
|
|||
1397 | text-decoration:none; |
|
1396 | text-decoration:none; | |
1398 | height:12px; |
|
1397 | height:12px; | |
1399 | margin-bottom:4px; |
|
1398 | margin-bottom:4px; | |
@@ -1542,7 +1541,7 b' background:#F88;' | |||||
1542 |
|
1541 | |||
1543 | .right .merge { |
|
1542 | .right .merge { | |
1544 | vertical-align:top; |
|
1543 | vertical-align:top; | |
1545 |
font-size: |
|
1544 | font-size:0.75em; | |
1546 | font-weight:700; |
|
1545 | font-weight:700; | |
1547 | } |
|
1546 | } | |
1548 |
|
1547 | |||
@@ -1554,13 +1553,15 b' font-family:monospace;' | |||||
1554 | .right .logtags .branchtag { |
|
1553 | .right .logtags .branchtag { | |
1555 | background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px; |
|
1554 | background:#FFF url("../images/icons/arrow_branch.png") no-repeat right 6px; | |
1556 | display:block; |
|
1555 | display:block; | |
1557 | padding:8px 16px 0 0; |
|
1556 | font-size:0.8em; | |
|
1557 | padding:11px 16px 0 0; | |||
1558 | } |
|
1558 | } | |
1559 |
|
1559 | |||
1560 | .right .logtags .tagtag { |
|
1560 | .right .logtags .tagtag { | |
1561 | background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px; |
|
1561 | background:#FFF url("../images/icons/tag_blue.png") no-repeat right 6px; | |
1562 | display:block; |
|
1562 | display:block; | |
1563 | padding:6px 18px 0 0; |
|
1563 | font-size:0.8em; | |
|
1564 | padding:11px 16px 0 0; | |||
1564 | } |
|
1565 | } | |
1565 |
|
1566 | |||
1566 | div.browserblock { |
|
1567 | div.browserblock { | |
@@ -1701,6 +1702,7 b' font:100% sans-serif;' | |||||
1701 | width:auto; |
|
1702 | width:auto; | |
1702 | opacity:1px; |
|
1703 | opacity:1px; | |
1703 | padding:8px; |
|
1704 | padding:8px; | |
|
1705 | white-space: pre; | |||
1704 | } |
|
1706 | } | |
1705 |
|
1707 | |||
1706 | .ac { |
|
1708 | .ac { | |
@@ -2024,7 +2026,6 b' display:block;' | |||||
2024 | } |
|
2026 | } | |
2025 |
|
2027 | |||
2026 | #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a { |
|
2028 | #content div.box div.title ul.links li a:hover,#content div.box div.title ul.links li.ui-tabs-selected a { | |
2027 | background:url("../../images/title_tab_selected.png") no-repeat bottom center; |
|
|||
2028 | color:#bfe3ff; |
|
2029 | color:#bfe3ff; | |
2029 | } |
|
2030 | } | |
2030 |
|
2031 |
@@ -43,8 +43,8 b'' | |||||
43 | </tr> |
|
43 | </tr> | |
44 | %endif |
|
44 | %endif | |
45 |
|
45 | |||
46 |
%for cnt,node in enumerate(c.files_list |
|
46 | %for cnt,node in enumerate(c.files_list): | |
47 | <tr class="parity${cnt%2}"> |
|
47 | <tr class="parity${(cnt+1)%2}"> | |
48 | <td> |
|
48 | <td> | |
49 | ${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=node.path),class_=file_class(node))} |
|
49 | ${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.cur_rev,f_path=node.path),class_=file_class(node))} | |
50 | </td> |
|
50 | </td> |
@@ -131,11 +131,13 b' E.onDOMReady(function(e){' | |||||
131 | var value = data[k]; |
|
131 | var value = data[k]; | |
132 | var td1 = document.createElement('td'); |
|
132 | var td1 = document.createElement('td'); | |
133 | td1.width=150; |
|
133 | td1.width=150; | |
|
134 | ||||
134 | var trending_language_label = document.createElement('div'); |
|
135 | var trending_language_label = document.createElement('div'); | |
135 | trending_language_label.innerHTML = k; |
|
136 | trending_language_label.innerHTML = k; | |
136 | td1.appendChild(trending_language_label); |
|
137 | td1.appendChild(trending_language_label); | |
137 |
|
138 | |||
138 | var td2 = document.createElement('td'); |
|
139 | var td2 = document.createElement('td'); | |
|
140 | td2.setAttribute('style','padding-right: 12px ! important;'); | |||
139 | var trending_language = document.createElement('div'); |
|
141 | var trending_language = document.createElement('div'); | |
140 | trending_language.title = k; |
|
142 | trending_language.title = k; | |
141 | trending_language.innerHTML = "<b>"+percentage+"% "+value+" ${_('files')}</b>"; |
|
143 | trending_language.innerHTML = "<b>"+percentage+"% "+value+" ${_('files')}</b>"; |
General Comments 0
You need to be logged in to leave comments.
Login now