author | TK Soh <teekaysoh@yahoo.com> |
Wed, 09 Jan 2008 00:12:32 +0000 | |
changeset 595 | 9d462d719761 |
parent 582 | 994701dbddbe |
child 854 | 9f51e380f2e4 |
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 |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
21 |
from mercurial.node import * |
554
9f3cd7a31060
hggtk/recovery: prompt user to confirm rollback
TK Soh <teekaysoh@yahoo.com>
parents:
552
diff
changeset
|
22 |
from dialog import error_dialog, question_dialog |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
23 |
from hglib import HgThread |
543
4f9af463138d
hggtk/recovery: refresh icons in folder after rollback
TK Soh <teekaysoh@yahoo.com>
parents:
540
diff
changeset
|
24 |
from shlib import set_tortoise_icon, shell_notify |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
25 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
26 |
class RecoveryDialog(gtk.Dialog): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
27 |
def __init__(self, cwd='', root=''): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
28 |
""" Initialize the Dialog. """ |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
29 |
gtk.Dialog.__init__(self, parent=None, |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
30 |
flags=0, |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
31 |
buttons=()) |
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 |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
37 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
38 |
self.set_default_size(600, 400) |
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 |
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
|
41 |
self.set_title("TortoiseHg Recovery - " + name) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
42 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
43 |
self.connect('delete-event', self._delete) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
44 |
self.connect('response', self._response) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
45 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
46 |
self._btn_close = gtk.Button("Close") |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
47 |
self._btn_close.connect('clicked', self._close_clicked) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
48 |
self.action_area.pack_end(self._btn_close) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
49 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
50 |
# toolbar |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
51 |
self.tbar = gtk.Toolbar() |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
52 |
self.tips = gtk.Tooltips() |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
53 |
tbuttons = [ |
595
9d462d719761
hggtk/recovery: change icon for 'clean' toolbutton
TK Soh <teekaysoh@yahoo.com>
parents:
582
diff
changeset
|
54 |
self._toolbutton(gtk.STOCK_CLEAR, |
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
55 |
'clean', |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
56 |
self._clean_clicked, |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
57 |
tip='Clean checkout, undo all changes'), |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
58 |
gtk.SeparatorToolItem(), |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
59 |
self._toolbutton(gtk.STOCK_UNDO, |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
60 |
'rollback', |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
61 |
self._rollback_clicked, |
552
adc323db1f05
hggtk/recovery: revise tooltips of tool buttons
TK Soh <teekaysoh@yahoo.com>
parents:
551
diff
changeset
|
62 |
tip='Rollback (undo) last transaction to' |
adc323db1f05
hggtk/recovery: revise tooltips of tool buttons
TK Soh <teekaysoh@yahoo.com>
parents:
551
diff
changeset
|
63 |
' repository (pull, commit, etc)'), |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
64 |
gtk.SeparatorToolItem(), |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
65 |
self._toolbutton(gtk.STOCK_CLEAR, |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
66 |
'recover', |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
67 |
self._recover_clicked, |
552
adc323db1f05
hggtk/recovery: revise tooltips of tool buttons
TK Soh <teekaysoh@yahoo.com>
parents:
551
diff
changeset
|
68 |
tip='Recover from interrupted operation'), |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
69 |
gtk.SeparatorToolItem(), |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
70 |
self._toolbutton(gtk.STOCK_APPLY, |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
71 |
'verify', |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
72 |
self._verify_clicked, |
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
73 |
tip='Validate repository consistency'), |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
74 |
gtk.SeparatorToolItem(), |
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) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
78 |
self.vbox.pack_start(self.tbar, False, False, 2) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
79 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
80 |
# hg output window |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
81 |
scrolledwindow = gtk.ScrolledWindow() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
82 |
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
|
83 |
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
|
84 |
self.textview = gtk.TextView(buffer=None) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
85 |
self.textview.set_editable(False) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
86 |
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
|
87 |
scrolledwindow.add(self.textview) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
88 |
self.textview.set_editable(False) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
89 |
self.textbuffer = self.textview.get_buffer() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
90 |
self.vbox.pack_start(scrolledwindow, True, True) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
91 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
92 |
def _close_clicked(self, *args): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
93 |
if threading.activeCount() != 1: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
94 |
error_dialog("Can't close now", "command is running") |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
95 |
else: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
96 |
self.response(gtk.RESPONSE_CLOSE) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
97 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
98 |
def _delete(self, widget, event): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
99 |
return True |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
100 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
101 |
def _response(self, widget, response_id): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
102 |
if threading.activeCount() != 1: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
103 |
error_dialog("Can't close now", "command is running") |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
104 |
widget.emit_stop_by_name('response') |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
105 |
else: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
106 |
gtk.main_quit() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
107 |
|
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
108 |
def _toolbutton(self, stock, label, handler, |
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
109 |
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
|
110 |
if menu: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
111 |
tbutton = gtk.MenuToolButton(stock) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
112 |
tbutton.set_menu(menu) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
113 |
else: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
114 |
tbutton = gtk.ToolButton(stock) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
115 |
|
551
df0a9df8e598
hggtk: fix toolbar tooltips on Windows
Steve Borho <steve@borho.org>
parents:
548
diff
changeset
|
116 |
tbutton.set_label(label) |
547
107e8c6e83d5
hggtk/recovery: add tooltips to recovery dialog
Steve Borho <steve@borho.org>
parents:
545
diff
changeset
|
117 |
if tip: |
551
df0a9df8e598
hggtk: fix toolbar tooltips on Windows
Steve Borho <steve@borho.org>
parents:
548
diff
changeset
|
118 |
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
|
119 |
tbutton.connect('clicked', handler, userdata) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
120 |
return tbutton |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
121 |
|
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
122 |
def _clean_clicked(self, toolbutton, data=None): |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
123 |
response = question_dialog("Clean repository", |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
124 |
"%s ?" % os.path.basename(self.root)) |
554
9f3cd7a31060
hggtk/recovery: prompt user to confirm rollback
TK Soh <teekaysoh@yahoo.com>
parents:
552
diff
changeset
|
125 |
if not response == gtk.RESPONSE_YES: |
9f3cd7a31060
hggtk/recovery: prompt user to confirm rollback
TK Soh <teekaysoh@yahoo.com>
parents:
552
diff
changeset
|
126 |
return |
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
127 |
try: |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
128 |
repo = hg.repository(ui.ui(), path=self.root) |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
129 |
except hg.RepoError: |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
130 |
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
|
131 |
return |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
132 |
pl = repo.workingctx().parents() |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
133 |
cmd = ['update', '--clean', '--rev', str(pl[0].rev())] |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
134 |
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
|
135 |
|
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
136 |
def _notify(self, ret, *args): |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
137 |
import time |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
138 |
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
|
139 |
shell_notify([self.cwd]) |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
140 |
|
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
141 |
def _rollback_clicked(self, toolbutton, data=None): |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
142 |
response = question_dialog("Rollback repository", |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
143 |
"%s ?" % os.path.basename(self.root)) |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
144 |
if not response == gtk.RESPONSE_YES: |
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
145 |
return |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
146 |
cmd = ['rollback'] |
582
994701dbddbe
hggtk/recovery: add 'clean' toobar button
Steve Borho <steve@borho.org>
parents:
554
diff
changeset
|
147 |
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
|
148 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
149 |
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
|
150 |
cmd = ['recover'] |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
151 |
self._exec_cmd(cmd) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
152 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
153 |
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
|
154 |
cmd = ['verify'] |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
155 |
self._exec_cmd(cmd) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
156 |
|
543
4f9af463138d
hggtk/recovery: refresh icons in folder after rollback
TK Soh <teekaysoh@yahoo.com>
parents:
540
diff
changeset
|
157 |
def _exec_cmd(self, cmd, postfunc=None): |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
158 |
cmdline = cmd |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
159 |
cmdline.append('--verbose') |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
160 |
cmdline.append('--repository') |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
161 |
cmdline.append(self.root) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
162 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
163 |
# show command to be executed |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
164 |
self.write("", False) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
165 |
#self.write("$ %s\n" % ' '.join(cmdline)) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
166 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
167 |
# 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
|
168 |
gobject.timeout_add(10, self.process_queue) |
545
f6a68ae266b9
hggtk/hglib: add postfunc to HgThread
Steve Borho <steve@borho.org>
parents:
543
diff
changeset
|
169 |
self.hgthread = HgThread(cmdline, postfunc) |
540
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
170 |
self.hgthread.start() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
171 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
172 |
def write(self, msg, append=True): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
173 |
msg = unicode(msg, 'iso-8859-1') |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
174 |
if append: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
175 |
enditer = self.textbuffer.get_end_iter() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
176 |
self.textbuffer.insert(enditer, msg) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
177 |
else: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
178 |
self.textbuffer.set_text(msg) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
179 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
180 |
def process_queue(self): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
181 |
""" |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
182 |
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
|
183 |
""" |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
184 |
self.hgthread.process_dialogs() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
185 |
while self.hgthread.getqueue().qsize(): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
186 |
try: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
187 |
msg = self.hgthread.getqueue().get(0) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
188 |
self.write(msg) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
189 |
except Queue.Empty: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
190 |
pass |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
191 |
if threading.activeCount() == 1: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
192 |
return False # Stop polling this function |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
193 |
else: |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
194 |
return True |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
195 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
196 |
def run(cwd='', root='', **opts): |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
197 |
dialog = RecoveryDialog(cwd, root) |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
198 |
dialog.show_all() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
199 |
gtk.gdk.threads_init() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
200 |
gtk.gdk.threads_enter() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
201 |
gtk.main() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
202 |
gtk.gdk.threads_leave() |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
203 |
|
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
204 |
if __name__ == "__main__": |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
205 |
import sys |
c4e76dfd7f48
hggtk: add recovery dialog to handle rollback et al
TK Soh <teekaysoh@yahoo.com>
parents:
diff
changeset
|
206 |
run(*sys.argv[1:]) |