/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
2
#
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
7
#
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
12
#
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
0.8.95 by Szilveszter Farkas (Phanatic)
Some sensitivity changes; branching (get) fixed.
17
import os
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
18
19
try:
20
    import pygtk
21
    pygtk.require("2.0")
22
except:
23
    pass
0.13.10 by Jelmer Vernooij
Don't pass around gladefile all the time.
24
25
import gtk
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
26
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
27
from errors import show_bzr_error
28
0.8.95 by Szilveszter Farkas (Phanatic)
Some sensitivity changes; branching (get) fixed.
29
from bzrlib.branch import Branch
0.11.1 by Jelmer Vernooij
Eliminate olive.backend.errors.
30
import bzrlib.errors as errors
0.8.95 by Szilveszter Farkas (Phanatic)
Some sensitivity changes; branching (get) fixed.
31
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
32
from bzrlib.plugins.gtk import _i18n
33
153 by Jelmer Vernooij
Fix references to dialog.
34
from dialog import error_dialog, info_dialog
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
35
271 by Jelmer Vernooij
Add common widget for selecting branches.
36
from branchbox import BranchSelectionBox
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
37
38
class BranchDialog(gtk.Dialog):
39
    """ New implementation of the Branch dialog. """
208.2.3 by Robert Collins
Add a Branch button to commit-notify.
40
195.1.21 by Szilveszter Farkas (Phanatic)
Some small modifications to Branch, Checkout and Info to support remote branches.
41
    def __init__(self, path=None, parent=None, remote_path=None):
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
42
        """ Initialize the Branch dialog. """
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
43
        gtk.Dialog.__init__(self, title="Branch - Olive",
44
                                  parent=parent,
45
                                  flags=0,
46
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
47
        
48
        # Get arguments
49
        self.path = path
50
        
51
        # Create the widgets
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
52
        self._button_branch = gtk.Button(_i18n("_Branch"), use_underline=True)
271 by Jelmer Vernooij
Add common widget for selecting branches.
53
        self._remote_branch = BranchSelectionBox()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
54
        self._button_revision = gtk.Button('')
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
55
        self._label_location = gtk.Label(_i18n("Branch location:"))
271 by Jelmer Vernooij
Add common widget for selecting branches.
56
        self._label_location.set_alignment(0, 0.5)
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
57
        self._label_destination = gtk.Label(_i18n("Destination:"))
58
        self._label_nick = gtk.Label(_i18n("Branck nick:"))
59
        self._label_revision = gtk.Label(_i18n("Revision:"))
60
        self._filechooser = gtk.FileChooserButton(_i18n("Please select a folder"))
271 by Jelmer Vernooij
Add common widget for selecting branches.
61
        self._filechooser.set_action(gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
62
        self._hbox_revision = gtk.HBox()
63
        self._entry_revision = gtk.Entry()
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
64
        self._entry_nick = gtk.Entry()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
65
        
66
        # Set callbacks
67
        self._button_branch.connect('clicked', self._on_branch_clicked)
68
        self._button_revision.connect('clicked', self._on_revision_clicked)
271 by Jelmer Vernooij
Add common widget for selecting branches.
69
        self._remote_branch.connect('branch-changed', self._on_branch_changed)
70
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
71
        # Create the table and pack the widgets into it
72
        self._table = gtk.Table(rows=3, columns=2)
73
        self._table.attach(self._label_location, 0, 1, 0, 1)
271 by Jelmer Vernooij
Add common widget for selecting branches.
74
        self._table.attach(self._remote_branch, 1, 2, 0, 1)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
75
        self._table.attach(self._label_destination, 0, 1, 1, 2)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
76
        self._table.attach(self._label_nick, 0, 1, 2, 3)
77
        self._table.attach(self._label_revision, 0, 1, 3, 4)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
78
        self._table.attach(self._filechooser, 1, 2, 1, 2)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
79
        self._table.attach(self._entry_nick, 1, 2, 2, 3)
80
        self._table.attach(self._hbox_revision, 1, 2, 3, 4)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
81
        
82
        # Set properties
271 by Jelmer Vernooij
Add common widget for selecting branches.
83
        self._image_browse = gtk.Image()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
84
        self._image_browse.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON)
85
        self._button_revision.set_image(self._image_browse)
86
        self._button_revision.set_sensitive(False)
87
        self._label_destination.set_alignment(0, 0.5)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
88
        self._label_nick.set_alignment(0, 0.5)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
89
        self._label_revision.set_alignment(0, 0.5)
90
        self._table.set_row_spacings(3)
91
        self._table.set_col_spacings(3)
92
        self.vbox.set_spacing(3)
271 by Jelmer Vernooij
Add common widget for selecting branches.
93
        if remote_path is not None:
94
            self._remote_branch.set_url(remote_path)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
95
        if self.path is not None:
96
            self._filechooser.set_filename(self.path)
97
        
98
        # Pack some widgets
99
        self._hbox_revision.pack_start(self._entry_revision, True, True)
100
        self._hbox_revision.pack_start(self._button_revision, False, False)
101
        self.vbox.add(self._table)
102
        self.action_area.pack_end(self._button_branch)
103
        
104
        # Show the dialog
105
        self.vbox.show_all()
106
    
107
    def _get_last_revno(self):
108
        """ Get the revno of the last revision (if any). """
109
        try:
271 by Jelmer Vernooij
Add common widget for selecting branches.
110
            br = self._remote_branch.get_branch()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
111
            return br.revno()
271 by Jelmer Vernooij
Add common widget for selecting branches.
112
        except:
113
            pass
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
114
    
115
    def _on_revision_clicked(self, button):
116
        """ Browse for revision button clicked handler. """
117
        from revbrowser import RevisionBrowser
118
        
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
119
        
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
120
        try:
271 by Jelmer Vernooij
Add common widget for selecting branches.
121
            br = self._remote_branch.get_branch()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
122
        except:
123
            return
271 by Jelmer Vernooij
Add common widget for selecting branches.
124
        revb = RevisionBrowser(br, self)
125
        response = revb.run()
126
        if response != gtk.RESPONSE_NONE:
127
            revb.hide()
128
    
129
            if response == gtk.RESPONSE_OK:
130
                if revb.selected_revno is not None:
131
                    self._entry_revision.set_text(revb.selected_revno)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
132
        
271 by Jelmer Vernooij
Add common widget for selecting branches.
133
            revb.destroy()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
134
    
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
135
    @show_bzr_error
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
136
    def _on_branch_clicked(self, button):
137
        """ Branch button clicked handler. """
271 by Jelmer Vernooij
Add common widget for selecting branches.
138
        location = self._remote_branch.get_url()
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
139
        if location is '':
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
140
            error_dialog(_i18n('Missing branch location'),
141
                         _i18n('You must specify a branch location.'))
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
142
            return
143
        
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
144
        destination = self._filechooser.get_filename()
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
145
        try:
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
146
            revno = int(self._entry_revision.get_text())
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
147
        except:
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
148
            revno = None
149
        
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
150
        nick = self._entry_nick.get_text()
151
        if nick is '':
152
            nick = os.path.basename(location.rstrip("/\\"))
153
        
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
154
        br_from = Branch.open(location)
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
155
        
156
        br_from.lock_read()
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
157
        try:
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
158
            from bzrlib.transport import get_transport
159
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
160
            revision_id = br_from.get_rev_id(revno)
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
161
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
162
            basis_dir = None
163
            
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
164
            to_location = destination + os.sep + nick
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
165
            to_transport = get_transport(to_location)
166
            
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
167
            to_transport.mkdir('.')
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
168
            
169
            try:
170
                # preserve whatever source format we have.
171
                dir = br_from.bzrdir.sprout(to_transport.base,
172
                                            revision_id,
173
                                            basis_dir)
174
                branch = dir.open_branch()
175
                revs = branch.revno()
176
            except errors.NoSuchRevision:
177
                to_transport.delete_tree('.')
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
178
                raise
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
179
        finally:
180
            br_from.unlock()
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
181
                
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
182
        info_dialog(_i18n('Branching successful'),
183
                    _i18n('%d revision(s) branched.') % revs)
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
184
        
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
185
        self.response(gtk.RESPONSE_OK)
186
    
271 by Jelmer Vernooij
Add common widget for selecting branches.
187
    def _on_branch_changed(self, widget, event):
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
188
        """ We try to get the last revision if focus lost. """
189
        rev = self._get_last_revno()
190
        if rev is None:
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
191
            self._entry_revision.set_text(_i18n('N/A'))
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
192
            self._button_revision.set_sensitive(False)
193
        else:
194
            self._entry_revision.set_text(str(rev))
195
            self._button_revision.set_sensitive(True)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
196
            if self._entry_nick.get_text() == '':
271 by Jelmer Vernooij
Add common widget for selecting branches.
197
                self._entry_nick.set_text(os.path.basename(self._remote_branch.get_url().rstrip("/\\")))