author | Germán Póo-Caamaño <gpoo@calcifer.org> |
Mon, 21 Jul 2008 11:51:12 -0400 | |
changeset 1182 | cbe418752174 |
parent 1140 | d24c108f6ae0 |
permissions | -rw-r--r-- |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
1 |
# |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
2 |
# Repository recovery dialog for TortoiseHg |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
3 |
# |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
4 |
# Copyright (C) 2007 Steve Borho <steve@borho.org> |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
5 |
# Copyright (C) 2007 TK Soh <teekaysoh@gmail.com> |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
6 |
# |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
7 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
8 |
try: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
9 |
import pygtk |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
10 |
pygtk.require("2.0") |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
11 |
except: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
12 |
pass |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
13 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
14 |
import gtk |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
15 |
import gobject |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
16 |
import pango |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
17 |
import Queue |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
18 |
import os |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
19 |
import threading |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
20 |
from mercurial import hg, ui, util |
1091
e8e11990a43e
hggtk: RepoError is no longer in mercurial.hg as of Mercurial 1.0
TK Soh <teekaysoh@yahoo.com>
parents:
854
diff
changeset
|
21 |
from mercurial.repo import RepoError |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
22 |
from mercurial.node import * |
554
9f3cd7a31060
hggtk/recovery: prompt user to confirm rollback
TK Soh <teekaysoh@yahoo.com>
parents:
552
diff
changeset
|
23 |
from dialog import error_dialog, question_dialog |
1130
8a56ab916e0a
hggtk: generic fix on encoding issues
TK Soh <teekaysoh@yahoo.com>
parents:
1120
diff
changeset
|
24 |
from hglib import HgThread, toutf |
543
4f9af463138d
hggtk/recovery: refresh icons in folder after rollback
TK Soh <teekaysoh@yahoo.com>
parents:
540
diff
changeset
|
25 |
from shlib import set_tortoise_icon, shell_notify |
854
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
26 |
import gtklib |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
27 |
|
854
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
28 |
class RecoveryDialog(gtk.Window): |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
29 |
def __init__(self, cwd='', root=''): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
30 |
""" Initialize the Dialog. """ |
854
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
31 |
gtk.Window.__init__(self, gtk.WINDOW_TOPLEVEL) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
32 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
33 |
set_tortoise_icon(self, 'general.ico') |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
34 |
self.root = root |
543
4f9af463138d
hggtk/recovery: refresh icons in folder after rollback
TK Soh <teekaysoh@yahoo.com>
parents:
540
diff
changeset
|
35 |
self.cwd = cwd |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
36 |
self.selected_path = None |
1140
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
37 |
self.hgthread = None |
854
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
38 |
self.connect('delete-event', self._delete) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
39 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
40 |
self.set_default_size(600, 400) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
41 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
42 |
name = os.path.basename(os.path.abspath(root)) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
43 |
self.set_title("TortoiseHg Recovery - " + name) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
44 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
45 |
# toolbar |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
46 |
self.tbar = gtk.Toolbar() |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
47 |
self.tips = gtk.Tooltips() |
1138
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
48 |
self._stop_button = self._toolbutton(gtk.STOCK_STOP, |
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
49 |
'Stop', self._stop_clicked, tip='Stop the hg operation') |
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
50 |
self._stop_button.set_sensitive(False) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
51 |
tbuttons = [ |
595
9d462d719761
hggtk/recovery: change icon for 'clean' toolbutton
TK Soh <teekaysoh@yahoo.com>
parents:
582
diff
changeset
|
52 |
self._toolbutton(gtk.STOCK_CLEAR, |
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
53 |
'clean', |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
54 |
self._clean_clicked, |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
55 |
tip='Clean checkout, undo all changes'), |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
56 |
gtk.SeparatorToolItem(), |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
57 |
self._toolbutton(gtk.STOCK_UNDO, |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
58 |
'rollback', |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
59 |
self._rollback_clicked, |
552
adc323db1f05
hggtk/recovery: revise tooltips of tool buttons
TK Soh <teekaysoh@yahoo.com>
parents:
551
diff
changeset
|
60 |
tip='Rollback (undo) last transaction to' |
adc323db1f05
hggtk/recovery: revise tooltips of tool buttons
TK Soh <teekaysoh@yahoo.com>
parents:
551
diff
changeset
|
61 |
' repository (pull, commit, etc)'), |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
62 |
gtk.SeparatorToolItem(), |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
63 |
self._toolbutton(gtk.STOCK_CLEAR, |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
64 |
'recover', |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
65 |
self._recover_clicked, |
552
adc323db1f05
hggtk/recovery: revise tooltips of tool buttons
TK Soh <teekaysoh@yahoo.com>
parents:
551
diff
changeset
|
66 |
tip='Recover from interrupted operation'), |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
67 |
gtk.SeparatorToolItem(), |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
68 |
self._toolbutton(gtk.STOCK_APPLY, |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
69 |
'verify', |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
70 |
self._verify_clicked, |
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
71 |
tip='Validate repository consistency'), |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
72 |
gtk.SeparatorToolItem(), |
1138
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
73 |
self._stop_button, |
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
74 |
gtk.SeparatorToolItem(), |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
75 |
] |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
76 |
for btn in tbuttons: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
77 |
self.tbar.insert(btn, -1) |
854
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
78 |
vbox = gtk.VBox() |
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
79 |
self.add(vbox) |
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
80 |
vbox.pack_start(self.tbar, False, False, 2) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
81 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
82 |
# hg output window |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
83 |
scrolledwindow = gtk.ScrolledWindow() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
84 |
scrolledwindow.set_shadow_type(gtk.SHADOW_ETCHED_IN) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
85 |
scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
86 |
self.textview = gtk.TextView(buffer=None) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
87 |
self.textview.set_editable(False) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
88 |
self.textview.modify_font(pango.FontDescription("Monospace")) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
89 |
scrolledwindow.add(self.textview) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
90 |
self.textview.set_editable(False) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
91 |
self.textbuffer = self.textview.get_buffer() |
854
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
92 |
vbox.pack_start(scrolledwindow, True, True) |
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
93 |
|
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
94 |
self.stbar = gtklib.StatusBar() |
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
95 |
vbox.pack_start(self.stbar, False, False, 2) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
96 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
97 |
def _delete(self, widget, event): |
1140
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
98 |
self._do_close() |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
99 |
return True |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
100 |
|
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
101 |
def _do_close(self): |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
102 |
if self._cmd_running(): |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
103 |
error_dialog(self, "Can't close now", "command is running") |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
104 |
else: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
105 |
gtk.main_quit() |
854
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
106 |
|
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
107 |
def _toolbutton(self, stock, label, handler, |
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
108 |
menu=None, userdata=None, tip=None): |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
109 |
if menu: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
110 |
tbutton = gtk.MenuToolButton(stock) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
111 |
tbutton.set_menu(menu) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
112 |
else: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
113 |
tbutton = gtk.ToolButton(stock) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
114 |
|
551
df0a9df8e598
hggtk: fix toolbar tooltips on Windows
Steve Borho <steve@borho.org>
parents:
548
diff
changeset
|
115 |
tbutton.set_label(label) |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
116 |
if tip: |
551
df0a9df8e598
hggtk: fix toolbar tooltips on Windows
Steve Borho <steve@borho.org>
parents:
548
diff
changeset
|
117 |
tbutton.set_tooltip(self.tips, tip) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
118 |
tbutton.connect('clicked', handler, userdata) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
119 |
return tbutton |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
120 |
|
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
121 |
def _clean_clicked(self, toolbutton, data=None): |
1120
08eca2607f01
hggtk/dialog: set transient parent for all message dialogs
TK Soh <teekaysoh@yahoo.com>
parents:
1091
diff
changeset
|
122 |
response = question_dialog(self, "Clean repository", |
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
123 |
"%s ?" % os.path.basename(self.root)) |
554
9f3cd7a31060
hggtk/recovery: prompt user to confirm rollback
TK Soh <teekaysoh@yahoo.com>
parents:
552
diff
changeset
|
124 |
if not response == gtk.RESPONSE_YES: |
9f3cd7a31060
hggtk/recovery: prompt user to confirm rollback
TK Soh <teekaysoh@yahoo.com>
parents:
552
diff
changeset
|
125 |
return |
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
126 |
try: |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
127 |
repo = hg.repository(ui.ui(), path=self.root) |
1091
e8e11990a43e
hggtk: RepoError is no longer in mercurial.hg as of Mercurial 1.0
TK Soh <teekaysoh@yahoo.com>
parents:
854
diff
changeset
|
128 |
except RepoError: |
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
129 |
self.write("Unable to find repo at %s\n" % (self.root), False) |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
130 |
return |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
131 |
pl = repo.workingctx().parents() |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
132 |
cmd = ['update', '--clean', '--rev', str(pl[0].rev())] |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
133 |
self._exec_cmd(cmd, postfunc=self._notify) |
554
9f3cd7a31060
hggtk/recovery: prompt user to confirm rollback
TK Soh <teekaysoh@yahoo.com>
parents:
552
diff
changeset
|
134 |
|
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
135 |
def _notify(self, ret, *args): |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
136 |
import time |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
137 |
time.sleep(0.5) # give fs some time to pick up changes |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
138 |
shell_notify([self.cwd]) |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
139 |
|
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
140 |
def _rollback_clicked(self, toolbutton, data=None): |
1120
08eca2607f01
hggtk/dialog: set transient parent for all message dialogs
TK Soh <teekaysoh@yahoo.com>
parents:
1091
diff
changeset
|
141 |
response = question_dialog(self, "Rollback repository", |
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
142 |
"%s ?" % os.path.basename(self.root)) |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
143 |
if not response == gtk.RESPONSE_YES: |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
144 |
return |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
145 |
cmd = ['rollback'] |
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
146 |
self._exec_cmd(cmd, postfunc=self._notify) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
147 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
148 |
def _recover_clicked(self, toolbutton, data=None): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
149 |
cmd = ['recover'] |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
150 |
self._exec_cmd(cmd) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
151 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
152 |
def _verify_clicked(self, toolbutton, data=None): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
153 |
cmd = ['verify'] |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
154 |
self._exec_cmd(cmd) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
155 |
|
1138
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
156 |
def _stop_clicked(self, toolbutton, data=None): |
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
157 |
if self.hgthread and self.hgthread.isAlive(): |
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
158 |
self.hgthread.terminate() |
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
159 |
self._stop_button.set_sensitive(False) |
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
160 |
|
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
161 |
def _exec_cmd(self, cmd, postfunc=None): |
1140
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
162 |
if self._cmd_running(): |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
163 |
error_dialog(self, "Can't run now", |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
164 |
"Pleas try again after the previous command is completed") |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
165 |
return |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
166 |
|
1138
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
167 |
self._stop_button.set_sensitive(True) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
168 |
cmdline = cmd |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
169 |
cmdline.append('--verbose') |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
170 |
cmdline.append('--repository') |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
171 |
cmdline.append(self.root) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
172 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
173 |
# show command to be executed |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
174 |
self.write("", False) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
175 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
176 |
# execute command and show output on text widget |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
177 |
gobject.timeout_add(10, self.process_queue) |
545
f6a68ae266b9
hggtk/hglib: add postfunc to HgThread
Steve Borho <steve@borho.org>
parents:
543
diff
changeset
|
178 |
self.hgthread = HgThread(cmdline, postfunc) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
179 |
self.hgthread.start() |
854
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
180 |
self.stbar.begin() |
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
181 |
self.stbar.set_status_text('hg ' + ' '.join(cmdline)) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
182 |
|
1140
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
183 |
def _cmd_running(self): |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
184 |
if self.hgthread and self.hgthread.isAlive(): |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
185 |
return True |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
186 |
else: |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
187 |
return False |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
188 |
|
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
189 |
def write(self, msg, append=True): |
1130
8a56ab916e0a
hggtk: generic fix on encoding issues
TK Soh <teekaysoh@yahoo.com>
parents:
1120
diff
changeset
|
190 |
msg = toutf(msg) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
191 |
if append: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
192 |
enditer = self.textbuffer.get_end_iter() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
193 |
self.textbuffer.insert(enditer, msg) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
194 |
else: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
195 |
self.textbuffer.set_text(msg) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
196 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
197 |
def process_queue(self): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
198 |
""" |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
199 |
Handle all the messages currently in the queue (if any). |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
200 |
""" |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
201 |
self.hgthread.process_dialogs() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
202 |
while self.hgthread.getqueue().qsize(): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
203 |
try: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
204 |
msg = self.hgthread.getqueue().get(0) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
205 |
self.write(msg) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
206 |
except Queue.Empty: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
207 |
pass |
1140
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
208 |
if self._cmd_running(): |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
209 |
return True |
d24c108f6ae0
hggtk/recovery: do not start command while one still running
TK Soh <teekaysoh@yahoo.com>
parents:
1138
diff
changeset
|
210 |
else: |
854
9f51e380f2e4
hggtk/recovery: new window layout
Steve Borho <steve@borho.org>
parents:
595
diff
changeset
|
211 |
self.stbar.end() |
1138
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
212 |
self._stop_button.set_sensitive(False) |
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
213 |
if self.hgthread.return_code() is None: |
5ec68ec91303
hggtk/recovery: add button to stop command execution
TK Soh <teekaysoh@yahoo.com>
parents:
1130
diff
changeset
|
214 |
self.write("[command interrupted]") |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
215 |
return False # Stop polling this function |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
216 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
217 |
def run(cwd='', root='', **opts): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
218 |
dialog = RecoveryDialog(cwd, root) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
219 |
dialog.show_all() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
220 |
gtk.gdk.threads_init() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
221 |
gtk.gdk.threads_enter() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
222 |
gtk.main() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
223 |
gtk.gdk.threads_leave() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
224 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
225 |
if __name__ == "__main__": |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
226 |
import sys |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
227 |
run(*sys.argv[1:]) |