aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Kuzminski <marcin@python-works.com>2012-09-03 21:59:31 +0200
committerMarcin Kuzminski <marcin@python-works.com>2012-09-03 21:59:31 +0200
commit74bb59fb87ddd11af18cf9c659e5f858052337e6 (patch)
tree2d67072168737aaa430221c878b1d7290c7a6bdf
parent136537fd8e24f0d60d0a3bae4c88d1e81204ca74 (diff)
parent20557210298a6f7533d4ec65511db9889a8986a2 (diff)
merge with betav1.4.0
-rw-r--r--rhodecode/controllers/summary.py2
-rw-r--r--rhodecode/lib/compat.py17
-rw-r--r--rhodecode/lib/subprocessio.py16
-rw-r--r--rhodecode/lib/utils.py2
-rwxr-xr-xrhodecode/model/db.py2
-rw-r--r--rhodecode/public/js/rhodecode.js26
-rw-r--r--rhodecode/templates/index_base.html2
-rw-r--r--rhodecode/tests/test_libs.py2
8 files changed, 39 insertions, 30 deletions
diff --git a/rhodecode/controllers/summary.py b/rhodecode/controllers/summary.py
index 72dcd5d0..ab21231a 100644
--- a/rhodecode/controllers/summary.py
+++ b/rhodecode/controllers/summary.py
@@ -195,6 +195,8 @@ class SummaryController(BaseRepoController):
try:
# get's the landing revision! or tip if fails
cs = db_repo.get_landing_changeset()
+ if isinstance(cs, EmptyChangeset):
+ raise EmptyRepositoryError()
renderer = MarkupRenderer()
for f in README_FILES:
try:
diff --git a/rhodecode/lib/compat.py b/rhodecode/lib/compat.py
index bdefbd63..b282169d 100644
--- a/rhodecode/lib/compat.py
+++ b/rhodecode/lib/compat.py
@@ -407,6 +407,15 @@ except ImportError:
#==============================================================================
+# bytes
+#==============================================================================
+if __py_version__ >= (2, 6):
+ _bytes = bytes
+else:
+ # in py2.6 bytes is a synonim for str
+ _bytes = str
+
+#==============================================================================
# deque
#==============================================================================
@@ -416,11 +425,11 @@ else:
#need to implement our own deque with maxlen
class deque(object):
- def __init__(self, iterable=(), maxlen=-1):
+ def __init__(self, iterable=(), maxlen= -1):
if not hasattr(self, 'data'):
self.left = self.right = 0
self.data = {}
- self.maxlen = maxlen
+ self.maxlen = maxlen or -1
self.extend(iterable)
def append(self, x):
@@ -537,9 +546,9 @@ else:
#==============================================================================
if __py_version__ >= (2, 6):
- from threading import Event
+ from threading import Event, Thread
else:
- from threading import _Verbose, Condition, Lock
+ from threading import _Verbose, Condition, Lock, Thread
def Event(*args, **kwargs):
return _Event(*args, **kwargs)
diff --git a/rhodecode/lib/subprocessio.py b/rhodecode/lib/subprocessio.py
index 0a3c4b0a..a0723638 100644
--- a/rhodecode/lib/subprocessio.py
+++ b/rhodecode/lib/subprocessio.py
@@ -24,11 +24,10 @@ If not, see <http://www.gnu.org/licenses/>.
'''
import os
import subprocess
-import threading
-from rhodecode.lib.compat import deque, Event
+from rhodecode.lib.compat import deque, Event, Thread, _bytes
-class StreamFeeder(threading.Thread):
+class StreamFeeder(Thread):
"""
Normal writing into pipe-like is blocking once the buffer is filled.
This thread allows a thread to seep data from a file-like into a pipe
@@ -39,9 +38,9 @@ class StreamFeeder(threading.Thread):
super(StreamFeeder, self).__init__()
self.daemon = True
filelike = False
- self.bytes = bytes()
- if type(source) in (type(''), bytes, bytearray): # string-like
- self.bytes = bytes(source)
+ self.bytes = _bytes()
+ if type(source) in (type(''), _bytes, bytearray): # string-like
+ self.bytes = _bytes(source)
else: # can be either file pointer or file-like
if type(source) in (int, long): # file pointer it is
## converting file descriptor (int) stdin into file-like
@@ -77,7 +76,7 @@ class StreamFeeder(threading.Thread):
return self.readiface
-class InputStreamChunker(threading.Thread):
+class InputStreamChunker(Thread):
def __init__(self, source, target, buffer_size, chunk_size):
super(InputStreamChunker, self).__init__()
@@ -121,6 +120,7 @@ class InputStreamChunker(threading.Thread):
da = self.data_added
go = self.go
b = s.read(cs)
+
while b and go.is_set():
if len(t) > ccm:
kr.clear()
@@ -180,7 +180,7 @@ class BufferedGenerator():
self.worker.data_added.wait(0.2)
if len(self.data):
self.worker.keep_reading.set()
- return bytes(self.data.popleft())
+ return _bytes(self.data.popleft())
elif self.worker.EOF.is_set():
raise StopIteration
diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py
index d6720ea3..daaa01b6 100644
--- a/rhodecode/lib/utils.py
+++ b/rhodecode/lib/utils.py
@@ -91,7 +91,7 @@ def repo_name_slug(value):
slug = remove_formatting(value)
slug = strip_tags(slug)
- for c in """=[]\;'"<>,/~!@#$%^&*()+{}|: """:
+ for c in """`?=[]\;'"<>,/~!@#$%^&*()+{}|: """:
slug = slug.replace(c, '-')
slug = recursive_replace(slug, '-')
slug = collapse(slug, '-')
diff --git a/rhodecode/model/db.py b/rhodecode/model/db.py
index 74715c29..d14bda08 100755
--- a/rhodecode/model/db.py
+++ b/rhodecode/model/db.py
@@ -1534,7 +1534,7 @@ class ChangesetComment(Base, BaseModel):
hl_lines = Column('hl_lines', Unicode(512), nullable=True)
f_path = Column('f_path', Unicode(1000), nullable=True)
user_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False)
- text = Column('text', Unicode(25000), nullable=False)
+ text = Column('text', UnicodeText(25000), nullable=False)
created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
modified_at = Column('modified_at', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
diff --git a/rhodecode/public/js/rhodecode.js b/rhodecode/public/js/rhodecode.js
index 120d69e3..f6537273 100644
--- a/rhodecode/public/js/rhodecode.js
+++ b/rhodecode/public/js/rhodecode.js
@@ -372,18 +372,18 @@ var q_filter = function(target,nodes,display_element){
}
};
-var tableTr = function(cls,body){
- var tr = document.createElement('tr');
- YUD.addClass(tr, cls);
-
-
+var tableTr = function(cls, body){
+ var _el = document.createElement('div');
var cont = new YAHOO.util.Element(body);
var comment_id = fromHTML(body).children[0].id.split('comment-')[1];
- tr.id = 'comment-tr-{0}'.format(comment_id);
- tr.innerHTML = '<td class="lineno-inline new-inline"></td>'+
- '<td class="lineno-inline old-inline"></td>'+
- '<td>{0}</td>'.format(body);
- return tr;
+ var id = 'comment-tr-{0}'.format(comment_id);
+ var _html = ('<table><tbody><tr id="{0}" class="{1}">'+
+ '<td class="lineno-inline new-inline"></td>'+
+ '<td class="lineno-inline old-inline"></td>'+
+ '<td>{2}</td>'+
+ '</tr></tbody></table>').format(id, cls, body);
+ _el.innerHTML = _html;
+ return _el.children[0].children[0].children[0];
};
/** comments **/
@@ -395,7 +395,7 @@ var createInlineForm = function(parent_tr, f_path, line) {
var tmpl = YUD.get('comment-inline-form-template').innerHTML;
tmpl = tmpl.format(f_path, line);
var form = tableTr('comment-form-inline',tmpl)
-
+
// create event for hide button
form = new YAHOO.util.Element(form);
var form_hide_button = new YAHOO.util.Element(YUD.getElementsByClassName('hide-inline-form',null,form)[0]);
@@ -444,13 +444,11 @@ var injectInlineForm = function(tr){
}
}
YUD.insertAfter(form,parent);
-
var f = YUD.get(form);
-
var overlay = YUD.getElementsByClassName('overlay',null,f)[0];
var _form = YUD.getElementsByClassName('inline-form',null,f)[0];
- form.on('submit',function(e){
+ YUE.on(YUD.get(_form), 'submit',function(e){
YUE.preventDefault(e);
//ajax submit
diff --git a/rhodecode/templates/index_base.html b/rhodecode/templates/index_base.html
index f3e25aa1..d6b09473 100644
--- a/rhodecode/templates/index_base.html
+++ b/rhodecode/templates/index_base.html
@@ -42,7 +42,7 @@
</div>
</td>
%if c.visual.stylify_metatags:
- <td>${h.desc_stylize(gr.group_description)}</td>
+ <td>${h.urlify_text(h.desc_stylize(gr.group_description))}</td>
%else:
<td>${gr.group_description}</td>
%endif
diff --git a/rhodecode/tests/test_libs.py b/rhodecode/tests/test_libs.py
index 13ec3c9e..78295db7 100644
--- a/rhodecode/tests/test_libs.py
+++ b/rhodecode/tests/test_libs.py
@@ -22,7 +22,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
+from __future__ import with_statement
import unittest
import datetime
import hashlib