/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic)
2
#                       <szilveszter.farkas@gmail.com>
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
3
# Copyright (C) 2007 by Jelmer Vernooij <jelmer@samba.org>
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
4
#
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
5
# This program is free software; you can redistribute it and/or modify
6
# it under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 2 of the License, or
8
# (at your option) any later version.
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
9
#
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
10
# This program is distributed in the hope that it will be useful,
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
# GNU General Public License for more details.
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
14
#
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
15
# You should have received a copy of the GNU General Public License
16
# along with this program; if not, write to the Free Software
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
19
from gi.repository import Gtk
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
20
21
from errors import show_bzr_error
22
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
23
from bzrlib import (
24
    errors,
25
    ui,
26
    )
27
from bzrlib.bzrdir import BzrDir
28
from bzrlib.transport import get_transport
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
29
30
from bzrlib.plugins.gtk.dialog import (
31
    question_dialog,
32
    )
724 by Jelmer Vernooij
Fix formatting, imports.
33
from bzrlib.plugins.gtk.history import UrlHistory
729.1.1 by Jelmer Vernooij
Move i18n support to a separate file, so gettext files aren't loaded unless bzr-gtk is used.
34
from bzrlib.plugins.gtk.i18n import _i18n
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
35
from bzrlib.plugins.gtk.ui import ProgressPanel
729.1.1 by Jelmer Vernooij
Move i18n support to a separate file, so gettext files aren't loaded unless bzr-gtk is used.
36
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
37
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
38
class PushDialog(Gtk.Dialog):
729.1.1 by Jelmer Vernooij
Move i18n support to a separate file, so gettext files aren't loaded unless bzr-gtk is used.
39
    """New implementation of the Push dialog."""
724 by Jelmer Vernooij
Fix formatting, imports.
40
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
41
    def __init__(self, repository, revid, branch=None, parent=None):
729.1.1 by Jelmer Vernooij
Move i18n support to a separate file, so gettext files aren't loaded unless bzr-gtk is used.
42
        """Initialize the Push dialog. """
734.1.51 by Curtis Hovey
Fix the initializer for many classes.
43
        super(PushDialog, self).__init__(
776.3.15 by Curtis Hovey
Follow GNOME HIG.
44
            title="Push", parent=parent, flags=0, border_width=6,
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
45
            buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE))
776.3.6 by Curtis Hovey
Added tests for push __init__.
46
        self.branch = branch
724 by Jelmer Vernooij
Fix formatting, imports.
47
776.3.6 by Curtis Hovey
Added tests for push __init__.
48
        # Unused arguments
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
49
        self.repository = repository
50
        self.revid = revid
724 by Jelmer Vernooij
Fix formatting, imports.
51
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
52
        # Create the widgets
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
53
        self._label_location = Gtk.Label(label=_i18n("Location:"))
734.1.14 by Curtis Hovey
Updated gpush to gtk3.
54
        self._combo = Gtk.ComboBox.new_with_entry()
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
55
        self._button_push = Gtk.Button(_i18n("_Push"), use_underline=True)
776.3.15 by Curtis Hovey
Follow GNOME HIG.
56
        self._hbox_location = Gtk.Box(Gtk.Orientation.HORIZONTAL, 6)
57
        self._push_message = Gtk.Label(xalign=0)
776.3.14 by Curtis Hovey
revise init for clarity.
58
        self._progress_widget = ProgressPanel()
724 by Jelmer Vernooij
Fix formatting, imports.
59
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
60
        # Set callbacks
776.3.14 by Curtis Hovey
revise init for clarity.
61
        ui.ui_factory.set_progress_bar_widget(self._progress_widget)
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
62
        self.connect('close', self._on_close_clicked)
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
63
        self._button_push.connect('clicked', self._on_push_clicked)
724 by Jelmer Vernooij
Fix formatting, imports.
64
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
65
        # Set properties
776.3.15 by Curtis Hovey
Follow GNOME HIG.
66
        content_area = self.get_content_area()
67
        content_area.set_spacing(6)
724 by Jelmer Vernooij
Fix formatting, imports.
68
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
69
        # Pack widgets
776.3.14 by Curtis Hovey
revise init for clarity.
70
        self._hbox_location.pack_start(self._label_location, False, False, 0)
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
71
        self._hbox_location.pack_start(self._combo, False, False, 0)
776.3.15 by Curtis Hovey
Follow GNOME HIG.
72
        content_area.pack_start(self._hbox_location, True, True, 0)
73
        content_area.pack_start(self._progress_widget, True, True, 0)
74
        content_area.pack_start(self._push_message, True, True, 0)
776.3.14 by Curtis Hovey
revise init for clarity.
75
        self.get_action_area().pack_end(self._button_push, True, True, 0)
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
76
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
77
        # Show the dialog
776.3.15 by Curtis Hovey
Follow GNOME HIG.
78
        content_area.show_all()
776.3.6 by Curtis Hovey
Added tests for push __init__.
79
        self._progress_widget.hide()
80
        self._push_message.hide()
724 by Jelmer Vernooij
Fix formatting, imports.
81
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
82
        # Build location history
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
83
        self._history = UrlHistory(self.branch.get_config(), 'push_history')
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
84
        self._build_history()
724 by Jelmer Vernooij
Fix formatting, imports.
85
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
86
    def _build_history(self):
729.1.1 by Jelmer Vernooij
Move i18n support to a separate file, so gettext files aren't loaded unless bzr-gtk is used.
87
        """Build up the location history. """
734.1.1 by Curtis Hovey
Mechanical changes made by pygi.convert.sh.
88
        self._combo_model = Gtk.ListStore(str)
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
89
        for item in self._history.get_entries():
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
90
            self._combo_model.append([item])
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
91
        self._combo.set_model(self._combo_model)
734.1.14 by Curtis Hovey
Updated gpush to gtk3.
92
        self._combo.set_entry_text_column(0)
724 by Jelmer Vernooij
Fix formatting, imports.
93
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
94
        if self.branch is not None:
95
            location = self.branch.get_push_location()
96
            if location is not None:
97
                self._combo.get_child().set_text(location)
724 by Jelmer Vernooij
Fix formatting, imports.
98
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
99
    def _on_close_clicked(self, widget):
100
        """Close dialog handler."""
101
        ui.ui_factory.set_progress_bar_widget(None)
102
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
103
    @show_bzr_error
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
104
    def _on_push_clicked(self, widget):
729.1.1 by Jelmer Vernooij
Move i18n support to a separate file, so gettext files aren't loaded unless bzr-gtk is used.
105
        """Push button clicked handler. """
776.3.6 by Curtis Hovey
Added tests for push __init__.
106
        self._push_message.hide()
107
        self._progress_widget.tick()
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
108
        location = self._combo.get_child().get_text()
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
109
110
        try:
776.3.9 by Curtis Hovey
Added a simple test for _on_push_clicked.
111
            message = do_push(self.branch, location, overwrite=False)
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
112
        except errors.DivergedBranches:
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
113
            response = question_dialog(
114
                _i18n('Branches have been diverged'),
115
                _i18n('You cannot push if branches have diverged.\n'
116
                      'Overwrite?'))
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
117
            if response == Gtk.ResponseType.YES:
776.3.9 by Curtis Hovey
Added a simple test for _on_push_clicked.
118
                message = do_push(self.branch, location, overwrite=True)
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
119
            else:
120
                return
121
        self._history.add_entry(location)
122
        if (self.branch is not None
123
            and self.branch.get_push_location() is None):
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
124
            self.branch.set_push_location(location)
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
125
        if message:
776.3.6 by Curtis Hovey
Added tests for push __init__.
126
            self._progress_widget.finished()
127
            self._push_message.props.label = message
128
            self._push_message.show()
776.3.9 by Curtis Hovey
Added a simple test for _on_push_clicked.
129
130
776.3.14 by Curtis Hovey
revise init for clarity.
131
def do_push(br_from, location, overwrite):
729.1.1 by Jelmer Vernooij
Move i18n support to a separate file, so gettext files aren't loaded unless bzr-gtk is used.
132
    """Update a mirror of a branch.
724 by Jelmer Vernooij
Fix formatting, imports.
133
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
134
    :param br_from: the source branch
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
135
    :param location: the location of the branch that you'd like to update
136
    :param overwrite: overwrite target location if it diverged
137
    :return: number of revisions pushed
138
    """
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
139
    transport = get_transport(location)
140
    location_url = transport.base
141
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
142
    try:
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
143
        dir_to = BzrDir.open(location_url)
144
        br_to = dir_to.open_branch()
145
    except errors.NotBranchError:
146
        # create a branch.
147
        transport = transport.clone('..')
148
        try:
149
            relurl = transport.relpath(location_url)
150
            transport.mkdir(relurl)
151
        except errors.NoSuchFile:
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
152
            response = question_dialog(
153
                _i18n('Non existing parent directory'),
154
                _i18n("The parent directory (%s)\ndoesn't exist. Create?") %
155
                location)
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
156
            if response == Gtk.ResponseType.OK:
157
                transport.create_prefix()
158
            else:
159
                return
160
        dir_to = br_from.bzrdir.clone(location_url,
161
            revision_id=br_from.last_revision())
162
        br_to = dir_to.open_branch()
163
        count = len(br_to.revision_history())
164
    else:
776.3.2 by Curtis Hovey
Merged previous UI work from progressbar.
165
        br_to.revision_history()
776.2.1 by Curtis Hovey
Merged UI work from progressbar branch.
166
        try:
167
            tree_to = dir_to.open_workingtree()
168
        except errors.NotLocalUrl:
169
            # FIXME - what to do here? how should we warn the user?
170
            count = br_to.pull(br_from, overwrite)
171
        except errors.NoWorkingTree:
172
            count = br_to.pull(br_from, overwrite)
173
        else:
174
            count = tree_to.pull(br_from, overwrite)
175
776.3.13 by Curtis Hovey
Restore the localisable message, but make it clear that code uses deprecated calls.
176
    # The count var is either an int or a PushResult. PushResult is being
776.3.18 by Curtis Hovey
Fixed spelling.
177
    # coerced into an int, but the method is deprecated.
776.3.13 by Curtis Hovey
Restore the localisable message, but make it clear that code uses deprecated calls.
178
    return _i18n("%d revision(s) pushed.") % int(count)