by
Changes to 6 files · Browse files at 3e9fa875c486 Showing diff from parent c3bfa782ddc0 1c508fce19e5 Diff from another changeset...
|
@@ -214,7 +214,7 @@ _(' %s is larger than the specified max diff size') % wfile]
else:
lines = []
- matcher = cmdutil.match(self.repo, [wfile])
+ matcher = cmdutil.matchfiles(self.repo, [wfile])
opts = mdiff.diffopts(git=True, nodates=True)
for s in patch.diff(self.repo, n1, n2, match=matcher, opts=opts):
lines.extend(s.splitlines())
|
@@ -7,13 +7,14 @@ import os
import gtk
import gobject
+import re
-from mercurial import hg, ui, match
+from mercurial import hg, ui, match, util
from thgutil.i18n import _
from thgutil import shlib, hglib, paths
-from hggtk import gtklib
+from hggtk import gtklib, gdialog
class HgIgnoreDialog(gtk.Window):
'Edit a reposiory .hgignore file'
@@ -24,7 +25,8 @@ gtklib.set_tortoise_keys(self)
self.root = paths.find_root()
- self.set_title(_('Ignore filter for ') + hglib.toutf(os.path.basename(self.root)))
+ base = os.path.basename(self.root)
+ self.set_title(_('Ignore filter for ') + hglib.toutf(base))
self.set_default_size(630, 400)
self.notify_func = None
@@ -169,16 +171,32 @@ newglob = hglib.fromutf(glob_entry.get_text())
if newglob == '':
return
- self.ignorelines.append('glob:' + newglob)
+ newglob = 'glob:' + newglob
+ try:
+ match.match(self.root, '', [], [newglob])
+ except util.Abort, inst:
+ gdialog.Prompt(_('Invalid glob expression'), str(inst),
+ self).run()
+ return
+ self.ignorelines.append(newglob)
self.write_ignore_lines()
+ glob_entry.set_text('')
self.refresh()
def add_regexp(self, widget, regexp_entry):
newregexp = hglib.fromutf(regexp_entry.get_text())
if newregexp == '':
return
- self.ignorelines.append('regexp:' + newregexp)
+ try:
+ match.match(self.root, '', [], ['relre:' + newregexp])
+ re.compile(newregexp)
+ except (util.Abort, re.error), inst:
+ gdialog.Prompt(_('Invalid regexp expression'), str(inst),
+ self).run()
+ return
+ self.ignorelines.append('relre:' + newregexp)
self.write_ignore_lines()
+ regexp_entry.set_text('')
self.refresh()
def thgrefresh(self, window):
|
@@ -125,7 +125,7 @@ def prompt_response(self, dialog, response_id):
dialog.destroy()
if response_id == gtk.RESPONSE_DELETE_EVENT:
- raise util.Abort('No response')
+ self.responseq.put(None)
else:
self.responseq.put(chr(response_id))
|
@@ -11,6 +11,7 @@ import Queue
import os
import sys
+import threading
import urllib
from mercurial import hg, ui, extensions, url
@@ -35,12 +36,11 @@ self.last_drop_time = None
self.lastcmd = []
- self.saved_stdout = sys.stdout
- self.saved_stderr = sys.stderr
- if os.name == 'nt':
- # Pipe stderr, stdout to self.write
- sys.stdout = self
- sys.stderr = self
+ # Replace stdout file descriptor with our own pipe
+ self.oldstdout = os.dup(sys.__stdout__.fileno())
+ self.stdoutq = Queue.Queue()
+ self.readfd, writefd = os.pipe()
+ os.dup2(writefd, sys.__stdout__.fileno())
# persistent app data
self._settings = settings.Settings('synch')
@@ -254,7 +254,20 @@
self.load_settings()
self.update_pull_setting()
- gobject.idle_add(self.update_buttons)
+ gobject.idle_add(self.finalize_startup)
+
+ def finalize_startup(self, *args):
+ self.update_buttons()
+ def pollstdout(*args):
+ while True:
+ # blocking read of stdout pipe
+ o = os.read(self.readfd, 1024)
+ if o:
+ self.stdoutq.put(o)
+ else:
+ break
+ thread = threading.Thread(target=pollstdout, args=[])
+ thread.start()
def update_pull_setting(self):
ppull = self.repo.ui.config('tortoisehg', 'postpull', 'None')
@@ -287,7 +300,7 @@ elif not os.path.isdir(path) and path.endswith('.hg'):
self.pathtext.set_text(hglib.toutf(path))
- def update_buttons(self, *args):
+ def update_buttons(self):
self.buttonhbox.hide()
try:
# open a new repo, rebase can confuse cached repo
@@ -376,8 +389,8 @@ else:
self.update_settings()
self._settings.write()
- sys.stdout = self.saved_stdout
- sys.stderr = self.saved_stderr
+ os.dup2(self.oldstdout, sys.__stdout__.fileno())
+ os.close(self.oldstdout)
return False
def delete(self, widget, event):
@@ -596,6 +609,12 @@ self.write_err(msg)
except Queue.Empty:
pass
+ while self.stdoutq.qsize():
+ try:
+ msg = self.stdoutq.get(0)
+ self.write_err(msg)
+ except Queue.Empty:
+ pass
if self.cmd_running():
return True
|
@@ -186,6 +186,7 @@
self.ovenable.set_active(overlayenable)
self.lclonly.set_active(localdisks)
+ self.lclonly.set_sensitive(overlayenable)
self.hgighlight_taskbaricon.set_active(hgighlight_taskbaricon)
promoted = [pi.strip() for pi in promoteditems.split(',')]
for cmd, check in self.cmptoggles.iteritems():
|
Loading...