/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
724 by Jelmer Vernooij
Fix formatting, imports.
27
from bzrlib import (
28
    errors,
29
    )
0.8.95 by Szilveszter Farkas (Phanatic)
Some sensitivity changes; branching (get) fixed.
30
from bzrlib.branch import Branch
724 by Jelmer Vernooij
Fix formatting, imports.
31
from bzrlib.transport import get_transport
32
0.8.95 by Szilveszter Farkas (Phanatic)
Some sensitivity changes; branching (get) fixed.
33
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
34
from bzrlib.plugins.gtk import _i18n
35
724 by Jelmer Vernooij
Fix formatting, imports.
36
from bzrlib.plugins.gtk.dialog import error_dialog, info_dialog
37
from bzrlib.plugins.gtk.errors import show_bzr_error
38
from bzrlib.plugins.gtk.branchbox import BranchSelectionBox
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
39
40
41
class BranchDialog(gtk.Dialog):
42
    """ New implementation of the Branch dialog. """
208.2.3 by Robert Collins
Add a Branch button to commit-notify.
43
195.1.21 by Szilveszter Farkas (Phanatic)
Some small modifications to Branch, Checkout and Info to support remote branches.
44
    def __init__(self, path=None, parent=None, remote_path=None):
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
45
        """ Initialize the Branch dialog. """
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
46
        gtk.Dialog.__init__(self, title="Branch - Olive",
47
                                  parent=parent,
48
                                  flags=0,
49
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
724 by Jelmer Vernooij
Fix formatting, imports.
50
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
51
        # Get arguments
52
        self.path = path
724 by Jelmer Vernooij
Fix formatting, imports.
53
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
54
        # Create the widgets
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
55
        self._button_branch = gtk.Button(_i18n("_Branch"), use_underline=True)
271 by Jelmer Vernooij
Add common widget for selecting branches.
56
        self._remote_branch = BranchSelectionBox()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
57
        self._button_revision = gtk.Button('')
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
58
        self._label_location = gtk.Label(_i18n("Branch location:"))
271 by Jelmer Vernooij
Add common widget for selecting branches.
59
        self._label_location.set_alignment(0, 0.5)
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
60
        self._label_destination = gtk.Label(_i18n("Destination:"))
61
        self._label_nick = gtk.Label(_i18n("Branck nick:"))
62
        self._label_revision = gtk.Label(_i18n("Revision:"))
63
        self._filechooser = gtk.FileChooserButton(_i18n("Please select a folder"))
271 by Jelmer Vernooij
Add common widget for selecting branches.
64
        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.
65
        self._hbox_revision = gtk.HBox()
66
        self._entry_revision = gtk.Entry()
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
67
        self._entry_nick = gtk.Entry()
724 by Jelmer Vernooij
Fix formatting, imports.
68
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
69
        # Set callbacks
70
        self._button_branch.connect('clicked', self._on_branch_clicked)
71
        self._button_revision.connect('clicked', self._on_revision_clicked)
271 by Jelmer Vernooij
Add common widget for selecting branches.
72
        self._remote_branch.connect('branch-changed', self._on_branch_changed)
73
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
74
        # Create the table and pack the widgets into it
75
        self._table = gtk.Table(rows=3, columns=2)
76
        self._table.attach(self._label_location, 0, 1, 0, 1)
271 by Jelmer Vernooij
Add common widget for selecting branches.
77
        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.
78
        self._table.attach(self._label_destination, 0, 1, 1, 2)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
79
        self._table.attach(self._label_nick, 0, 1, 2, 3)
80
        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.
81
        self._table.attach(self._filechooser, 1, 2, 1, 2)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
82
        self._table.attach(self._entry_nick, 1, 2, 2, 3)
83
        self._table.attach(self._hbox_revision, 1, 2, 3, 4)
724 by Jelmer Vernooij
Fix formatting, imports.
84
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
85
        # Set properties
271 by Jelmer Vernooij
Add common widget for selecting branches.
86
        self._image_browse = gtk.Image()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
87
        self._image_browse.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_BUTTON)
88
        self._button_revision.set_image(self._image_browse)
89
        self._button_revision.set_sensitive(False)
90
        self._label_destination.set_alignment(0, 0.5)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
91
        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.
92
        self._label_revision.set_alignment(0, 0.5)
93
        self._table.set_row_spacings(3)
94
        self._table.set_col_spacings(3)
95
        self.vbox.set_spacing(3)
271 by Jelmer Vernooij
Add common widget for selecting branches.
96
        if remote_path is not None:
97
            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.
98
        if self.path is not None:
99
            self._filechooser.set_filename(self.path)
724 by Jelmer Vernooij
Fix formatting, imports.
100
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
101
        # Pack some widgets
102
        self._hbox_revision.pack_start(self._entry_revision, True, True)
103
        self._hbox_revision.pack_start(self._button_revision, False, False)
104
        self.vbox.add(self._table)
105
        self.action_area.pack_end(self._button_branch)
724 by Jelmer Vernooij
Fix formatting, imports.
106
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
107
        # Show the dialog
108
        self.vbox.show_all()
724 by Jelmer Vernooij
Fix formatting, imports.
109
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
110
    def _get_last_revno(self):
111
        """ Get the revno of the last revision (if any). """
112
        try:
271 by Jelmer Vernooij
Add common widget for selecting branches.
113
            br = self._remote_branch.get_branch()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
114
            return br.revno()
271 by Jelmer Vernooij
Add common widget for selecting branches.
115
        except:
116
            pass
724 by Jelmer Vernooij
Fix formatting, imports.
117
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
118
    def _on_revision_clicked(self, button):
119
        """ Browse for revision button clicked handler. """
120
        from revbrowser import RevisionBrowser
724 by Jelmer Vernooij
Fix formatting, imports.
121
122
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
123
        try:
271 by Jelmer Vernooij
Add common widget for selecting branches.
124
            br = self._remote_branch.get_branch()
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
125
        except:
126
            return
271 by Jelmer Vernooij
Add common widget for selecting branches.
127
        revb = RevisionBrowser(br, self)
128
        response = revb.run()
129
        if response != gtk.RESPONSE_NONE:
130
            revb.hide()
724 by Jelmer Vernooij
Fix formatting, imports.
131
271 by Jelmer Vernooij
Add common widget for selecting branches.
132
            if response == gtk.RESPONSE_OK:
133
                if revb.selected_revno is not None:
134
                    self._entry_revision.set_text(revb.selected_revno)
724 by Jelmer Vernooij
Fix formatting, imports.
135
271 by Jelmer Vernooij
Add common widget for selecting branches.
136
            revb.destroy()
724 by Jelmer Vernooij
Fix formatting, imports.
137
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
138
    @show_bzr_error
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
139
    def _on_branch_clicked(self, button):
140
        """ Branch button clicked handler. """
271 by Jelmer Vernooij
Add common widget for selecting branches.
141
        location = self._remote_branch.get_url()
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
142
        if location is '':
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
143
            error_dialog(_i18n('Missing branch location'),
144
                         _i18n('You must specify a branch location.'))
0.8.16 by Szilveszter Farkas (Phanatic)
* really finished branch/checkout window
145
            return
724 by Jelmer Vernooij
Fix formatting, imports.
146
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
147
        destination = self._filechooser.get_filename()
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
148
        try:
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
149
            revno = int(self._entry_revision.get_text())
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
150
        except:
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
151
            revno = None
724 by Jelmer Vernooij
Fix formatting, imports.
152
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
153
        nick = self._entry_nick.get_text()
154
        if nick is '':
155
            nick = os.path.basename(location.rstrip("/\\"))
724 by Jelmer Vernooij
Fix formatting, imports.
156
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
157
        br_from = Branch.open(location)
724 by Jelmer Vernooij
Fix formatting, imports.
158
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
159
        br_from.lock_read()
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
160
        try:
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
161
            revision_id = br_from.get_rev_id(revno)
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
162
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
163
            basis_dir = None
724 by Jelmer Vernooij
Fix formatting, imports.
164
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
165
            to_location = destination + os.sep + nick
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
166
            to_transport = get_transport(to_location)
724 by Jelmer Vernooij
Fix formatting, imports.
167
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
168
            to_transport.mkdir('.')
724 by Jelmer Vernooij
Fix formatting, imports.
169
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
170
            try:
171
                # preserve whatever source format we have.
172
                dir = br_from.bzrdir.sprout(to_transport.base,
173
                                            revision_id,
174
                                            basis_dir)
175
                branch = dir.open_branch()
176
                revs = branch.revno()
177
            except errors.NoSuchRevision:
178
                to_transport.delete_tree('.')
126.1.16 by Szilveszter Farkas (Phanatic)
Use the decorator in the Branch dialog code.
179
                raise
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
180
        finally:
181
            br_from.unlock()
724 by Jelmer Vernooij
Fix formatting, imports.
182
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
183
        info_dialog(_i18n('Branching successful'),
184
                    _i18n('%d revision(s) branched.') % revs)
724 by Jelmer Vernooij
Fix formatting, imports.
185
126.1.15 by Szilveszter Farkas (Phanatic)
Refactoring the Branch dialog. We also have a Revision Browser now.
186
        self.response(gtk.RESPONSE_OK)
724 by Jelmer Vernooij
Fix formatting, imports.
187
271 by Jelmer Vernooij
Add common widget for selecting branches.
188
    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.
189
        """ We try to get the last revision if focus lost. """
190
        rev = self._get_last_revno()
191
        if rev is None:
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
192
            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.
193
            self._button_revision.set_sensitive(False)
194
        else:
195
            self._entry_revision.set_text(str(rev))
196
            self._button_revision.set_sensitive(True)
126.1.18 by Szilveszter Farkas (Phanatic)
Improved Branch dialog. Refactored Checkout dialog.
197
            if self._entry_nick.get_text() == '':
271 by Jelmer Vernooij
Add common widget for selecting branches.
198
                self._entry_nick.set_text(os.path.basename(self._remote_branch.get_url().rstrip("/\\")))