Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.9, 0.9.1, and 0.9.1.1

merge with stable

Changeset 3e9fa875c486

Parents c3bfa782ddc0

Parents 1c508fce19e5

by Steve Borho

Changes to 6 files · Browse files at 3e9fa875c486 Showing diff from parent c3bfa782ddc0 1c508fce19e5 Diff from another changeset...

Change 1 of 1 Show Entire File .hgignore Stacked
 
4
5
6
7
8
9
10
 
4
5
6
 
7
8
9
@@ -4,7 +4,6 @@
 *.rej  *.pyc  thgutil/__version__.py -thgutil/__paths__.py  build/  dist/  Output/
 
214
215
216
217
 
218
219
220
 
214
215
216
 
217
218
219
220
@@ -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())
Change 1 of 3 Show Entire File hggtk/​hgignore.py Stacked
 
7
8
9
 
10
11
 
12
13
14
15
16
 
17
18
19
 
24
25
26
27
 
 
28
29
30
 
169
170
171
172
 
 
 
 
 
 
 
 
173
 
174
175
176
177
178
179
180
 
 
 
 
 
 
 
 
181
 
182
183
184
 
7
8
9
10
11
 
12
13
14
15
16
 
17
18
19
20
 
25
26
27
 
28
29
30
31
32
 
171
172
173
 
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
 
190
191
192
193
194
195
196
197
198
199
200
201
202
@@ -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):
Change 1 of 1 Show Entire File hggtk/​hgthread.py Stacked
 
125
126
127
128
 
129
130
131
 
125
126
127
 
128
129
130
131
@@ -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))  
Change 1 of 6 Show Entire File hggtk/​synch.py Stacked
 
11
12
13
 
14
15
16
 
35
36
37
38
39
40
41
42
43
 
 
 
 
 
44
45
46
 
254
255
256
257
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
259
260
 
287
288
289
290
 
291
292
293
 
376
377
378
379
380
 
 
381
382
383
 
596
597
598
 
 
 
 
 
 
599
600
601
 
11
12
13
14
15
16
17
 
36
37
38
 
 
 
 
 
 
39
40
41
42
43
44
45
46
 
254
255
256
 
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
 
300
301
302
 
303
304
305
306
 
389
390
391
 
 
392
393
394
395
396
 
609
610
611
612
613
614
615
616
617
618
619
620
@@ -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
187
188
 
189
190
191
 
186
187
188
189
190
191
192
@@ -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():