/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
2
# Copyright (C) 2007 by Jelmer Vernooij <jelmer@samba.org>
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
3
#
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
8
#
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
13
#
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18
try:
19
    import pygtk
20
    pygtk.require("2.0")
21
except:
22
    pass
724 by Jelmer Vernooij
Fix formatting, imports.
23
0.13.10 by Jelmer Vernooij
Don't pass around gladefile all the time.
24
import gtk
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
25
26
from errors import show_bzr_error
27
0.11.1 by Jelmer Vernooij
Eliminate olive.backend.errors.
28
import bzrlib.errors as errors
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
29
724 by Jelmer Vernooij
Fix formatting, imports.
30
from bzrlib.plugins.gtk.dialog import (
31
    info_dialog,
32
    question_dialog,
33
    )
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
34
724 by Jelmer Vernooij
Fix formatting, imports.
35
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.
36
from bzrlib.plugins.gtk.i18n import _i18n
37
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
38
39
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.
40
    """New implementation of the Push dialog."""
724 by Jelmer Vernooij
Fix formatting, imports.
41
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
42
    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.
43
        """Initialize the Push dialog. """
44
        gtk.Dialog.__init__(self, title="Push",
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
45
                                  parent=parent,
46
                                  flags=0,
47
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
724 by Jelmer Vernooij
Fix formatting, imports.
48
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
49
        # Get arguments
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
50
        self.repository = repository
51
        self.revid = revid
0.13.13 by Jelmer Vernooij
Update TODO
52
        self.branch = branch
724 by Jelmer Vernooij
Fix formatting, imports.
53
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
54
        # Create the widgets
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
55
        self._label_location = gtk.Label(_i18n("Location:"))
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
56
        self._combo = gtk.ComboBoxEntry()
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
57
        self._button_push = gtk.Button(_i18n("_Push"), use_underline=True)
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
58
        self._hbox_location = gtk.HBox()
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
61
        self._button_push.connect('clicked', self._on_push_clicked)
724 by Jelmer Vernooij
Fix formatting, imports.
62
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
63
        # Set properties
64
        self._label_location.set_alignment(0, 0.5)
65
        self._hbox_location.set_spacing(3)
66
        self.vbox.set_spacing(3)
724 by Jelmer Vernooij
Fix formatting, imports.
67
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
68
        # Pack widgets
69
        self._hbox_location.pack_start(self._label_location, False, False)
70
        self._hbox_location.pack_start(self._combo, True, True)
71
        self.vbox.pack_start(self._hbox_location)
72
        self.action_area.pack_end(self._button_push)
724 by Jelmer Vernooij
Fix formatting, imports.
73
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
74
        # Show the dialog
75
        self.vbox.show_all()
724 by Jelmer Vernooij
Fix formatting, imports.
76
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
77
        # Build location history
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
78
        self._history = UrlHistory(self.branch.get_config(), 'push_history')
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
79
        self._build_history()
724 by Jelmer Vernooij
Fix formatting, imports.
80
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
81
    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.
82
        """Build up the location history. """
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
83
        self._combo_model = gtk.ListStore(str)
84
        for item in self._history.get_entries():
85
            self._combo_model.append([ item ])
86
        self._combo.set_model(self._combo_model)
87
        self._combo.set_text_column(0)
724 by Jelmer Vernooij
Fix formatting, imports.
88
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
89
        if self.branch is not None:
90
            location = self.branch.get_push_location()
91
            if location is not None:
92
                self._combo.get_child().set_text(location)
724 by Jelmer Vernooij
Fix formatting, imports.
93
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
94
    @show_bzr_error
95
    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.
96
        """Push button clicked handler. """
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
97
        location = self._combo.get_child().get_text()
98
        revs = 0
724 by Jelmer Vernooij
Fix formatting, imports.
99
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
100
        try:
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
101
            revs = do_push(self.branch, location=location, overwrite=False)
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
102
        except errors.DivergedBranches:
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
103
            response = question_dialog(_i18n('Branches have been diverged'),
104
                                       _i18n('You cannot push if branches have diverged.\nOverwrite?'))
276 by Mateusz Korniak
Bugfix: Fixed push (with overwite) behavior when branches are diverged.
105
            if response == gtk.RESPONSE_YES:
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
106
                revs = do_push(self.branch, location=location, overwrite=True)
724 by Jelmer Vernooij
Fix formatting, imports.
107
562 by Jasper Groenewegen
Merge removal of question to set default push location
108
        if self.branch is not None and self.branch.get_push_location() is None:
109
            self.branch.set_push_location(location)
724 by Jelmer Vernooij
Fix formatting, imports.
110
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
111
        self._history.add_entry(location)
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
112
        info_dialog(_i18n('Push successful'),
113
                    _i18n("%d revision(s) pushed.") % revs)
724 by Jelmer Vernooij
Fix formatting, imports.
114
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
115
        self.response(gtk.RESPONSE_OK)
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
116
724 by Jelmer Vernooij
Fix formatting, imports.
117
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
118
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.
119
    """Update a mirror of a branch.
724 by Jelmer Vernooij
Fix formatting, imports.
120
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
121
    :param br_from: the source branch
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
122
    :param location: the location of the branch that you'd like to update
123
    :param overwrite: overwrite target location if it diverged
124
    :return: number of revisions pushed
125
    """
0.8.85 by Szilveszter Farkas (Phanatic)
Fix Push functionality.
126
    from bzrlib.bzrdir import BzrDir
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
127
    from bzrlib.transport import get_transport
724 by Jelmer Vernooij
Fix formatting, imports.
128
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
129
    transport = get_transport(location)
130
    location_url = transport.base
131
132
    old_rh = []
133
134
    try:
0.8.85 by Szilveszter Farkas (Phanatic)
Fix Push functionality.
135
        dir_to = BzrDir.open(location_url)
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
136
        br_to = dir_to.open_branch()
0.8.85 by Szilveszter Farkas (Phanatic)
Fix Push functionality.
137
    except errors.NotBranchError:
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
138
        # create a branch.
139
        transport = transport.clone('..')
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
140
        try:
141
            relurl = transport.relpath(location_url)
142
            transport.mkdir(relurl)
143
        except errors.NoSuchFile:
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
144
            response = question_dialog(_i18n('Non existing parent directory'),
145
                         _i18n("The parent directory (%s)\ndoesn't exist. Create?") % location)
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
146
            if response == gtk.RESPONSE_OK:
629 by Jelmer Vernooij
Use new transport.create_prefix.
147
                transport.create_prefix()
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
148
            else:
0.8.85 by Szilveszter Farkas (Phanatic)
Fix Push functionality.
149
                return
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
150
        dir_to = br_from.bzrdir.clone(location_url,
151
            revision_id=br_from.last_revision())
152
        br_to = dir_to.open_branch()
153
        count = len(br_to.revision_history())
154
    else:
155
        old_rh = br_to.revision_history()
156
        try:
0.13.13 by Jelmer Vernooij
Update TODO
157
            tree_to = dir_to.open_workingtree()
158
        except errors.NotLocalUrl:
159
            # FIXME - what to do here? how should we warn the user?
160
            count = br_to.pull(br_from, overwrite)
161
        except errors.NoWorkingTree:
162
            count = br_to.pull(br_from, overwrite)
163
        else:
164
            count = tree_to.pull(br_from, overwrite)
165
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
166
    return count