• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

allura


コミットメタ情報

リビジョンd2beb7ff63ffabf54b309f2d0fda241ade19e97e (tree)
日時2010-06-23 01:18:28
作者Rick Copeland <rcopeland@geek...>
コミッターRick Copeland

ログメッセージ

[#574] - Diff based on words, not characters

変更サマリ

差分

--- a/pyforge/pyforge/lib/custom_middleware.py
+++ b/pyforge/pyforge/lib/custom_middleware.py
@@ -8,6 +8,7 @@ import tg
88 import pylons
99 import pkg_resources
1010 from paste import fileapp
11+from paste.deploy.converters import asbool
1112 from pylons.util import call_wsgi_application
1213 from tg.controllers import DecoratedController
1314 from webob import exc, Request
@@ -177,6 +178,7 @@ class StatsMiddleware(object):
177178 self.active = False
178179 try:
179180 self.sample_rate = config.get('stats.sample_rate', 0.25)
181+ self.debug = asbool(config.get('debug', 'false'))
180182 self.instrument_pymongo()
181183 self.instrument_template()
182184 self.active = True
@@ -205,7 +207,7 @@ class StatsMiddleware(object):
205207 req = Request(environ)
206208 req.environ['sf.stats'] = s = StatsRecord(req, random() < self.sample_rate)
207209 with s.timing('total'):
208- resp = req.get_response(self.app)
210+ resp = req.get_response(self.app, catch_exc_info=self.debug)
209211 result = resp(environ, start_response)
210212 if s.active:
211213 self.log.info('Stats: %r', s)
--- a/pyforge/pyforge/lib/helpers.py
+++ b/pyforge/pyforge/lib/helpers.py
@@ -243,17 +243,19 @@ def absurl(url):
243243 return request.scheme + '://' + request.host + url
244244
245245 def diff_text(t1, t2, differ=None):
246+ t1_words = re.split(' ', t1)
247+ t2_words = re.split(' ', t2)
246248 if differ is None:
247- differ = difflib.SequenceMatcher(None, t1, t2)
249+ differ = difflib.SequenceMatcher(None, t1_words, t2_words)
248250 result = []
249251 for tag, i1, i2, j1, j2 in differ.get_opcodes():
250252 if tag in ('delete', 'replace'):
251- result += [ '<del>', t1[i1:i2], '</del>' ]
253+ result += [ '<del>' ] + t1_words[i1:i2] + [ '</del>' ]
252254 if tag in ('insert', 'replace'):
253- result += [ '<ins>', t2[j1:j2], '</ins>' ]
255+ result += [ '<ins>' ] + t2_words[j1:j2] + [ '</ins>' ]
254256 if tag == 'equal':
255- result += t1[i1:i2]
256- return ''.join(result).replace('\n', '<br/>\n')
257+ result += t1_words[i1:i2]
258+ return ' '.join(result).replace('\n', '<br/>\n')
257259
258260 def diff_text_genshi(t1, t2):
259261 Markup = genshi.Markup