/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
0.13.13 by Jelmer Vernooij
Update TODO
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
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
28
# FIXME: This needs to be public JRV 20070714
29
from bzrlib.builtins import _create_prefix
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
30
from bzrlib.config import LocationConfig
0.11.1 by Jelmer Vernooij
Eliminate olive.backend.errors.
31
import bzrlib.errors as errors
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
32
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
33
from bzrlib.plugins.gtk import _i18n
153 by Jelmer Vernooij
Fix references to dialog.
34
from dialog import error_dialog, info_dialog, question_dialog
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
35
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
36
from history import UrlHistory
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
37
38
class PushDialog(gtk.Dialog):
39
    """ New implementation of the Push dialog. """
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
40
    def __init__(self, repository, revid, branch=None, parent=None):
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
41
        """ Initialize the Push dialog. """
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
42
        gtk.Dialog.__init__(self, title="Push - Olive",
43
                                  parent=parent,
44
                                  flags=0,
45
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
46
        
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
47
        # Get arguments
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
48
        self.repository = repository
49
        self.revid = revid
0.13.13 by Jelmer Vernooij
Update TODO
50
        self.branch = branch
0.8.19 by Szilveszter Farkas (Phanatic)
2006-07-21 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
51
        
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
52
        # Create the widgets
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
53
        self._label_location = gtk.Label(_i18n("Location:"))
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
54
        self._combo = gtk.ComboBoxEntry()
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
55
        self._button_push = gtk.Button(_i18n("_Push"), use_underline=True)
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
56
        self._hbox_location = gtk.HBox()
57
        
58
        # Set callbacks
59
        self._button_push.connect('clicked', self._on_push_clicked)
60
        
61
        # Set properties
62
        self._label_location.set_alignment(0, 0.5)
63
        self._hbox_location.set_spacing(3)
64
        self.vbox.set_spacing(3)
65
        
66
        # Pack widgets
67
        self._hbox_location.pack_start(self._label_location, False, False)
68
        self._hbox_location.pack_start(self._combo, True, True)
69
        self.vbox.pack_start(self._hbox_location)
70
        self.action_area.pack_end(self._button_push)
71
        
72
        # Show the dialog
73
        self.vbox.show_all()
74
        
75
        # Build location history
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
76
        self._history = UrlHistory(self.branch.get_config(), 'push_history')
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
77
        self._build_history()
78
        
79
    def _build_history(self):
80
        """ Build up the location history. """
154 by Jelmer Vernooij
Add trivial generic class for storing URL history.
81
        self._combo_model = gtk.ListStore(str)
82
        for item in self._history.get_entries():
83
            self._combo_model.append([ item ])
84
        self._combo.set_model(self._combo_model)
85
        self._combo.set_text_column(0)
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
86
        
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
87
        if self.branch is not None:
88
            location = self.branch.get_push_location()
89
            if location is not None:
90
                self._combo.get_child().set_text(location)
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
91
    
92
    @show_bzr_error
93
    def _on_push_clicked(self, widget):
94
        """ Push button clicked handler. """
95
        location = self._combo.get_child().get_text()
96
        revs = 0
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
97
        if self.branch is not None and self.branch.get_push_location() is None:
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
98
            response = question_dialog(_i18n('Set default push location'),
99
                                       _i18n('There is no default push location set.\nSet %r as default now?') % location)
272.1.1 by Mateusz Korniak
gtk.REPONSE_OK typo fix.
100
            if response == gtk.RESPONSE_OK:
227 by Jelmer Vernooij
Add push item in revision menu, clean up push code.
101
                self.branch.set_push_location(location)
102
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
103
        try:
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
104
            revs = do_push(self.branch, location=location, overwrite=False)
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
105
        except errors.DivergedBranches:
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
106
            response = question_dialog(_i18n('Branches have been diverged'),
107
                                       _i18n('You cannot push if branches have diverged.\nOverwrite?'))
276 by Mateusz Korniak
Bugfix: Fixed push (with overwite) behavior when branches are diverged.
108
            if response == gtk.RESPONSE_YES:
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
109
                revs = do_push(self.branch, location=location, overwrite=True)
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
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)
126.1.19 by Szilveszter Farkas (Phanatic)
Refactored the Push dialog. Add 'gpush' command.
114
        
115
        self.response(gtk.RESPONSE_OK)
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
116
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
117
def do_push(br_from, location, overwrite):
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
118
    """ Update a mirror of a branch.
119
    
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
120
    :param br_from: the source branch
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
121
    
122
    :param location: the location of the branch that you'd like to update
123
    
124
    :param overwrite: overwrite target location if it diverged
125
    
126
    :return: number of revisions pushed
127
    """
0.8.85 by Szilveszter Farkas (Phanatic)
Fix Push functionality.
128
    from bzrlib.bzrdir import BzrDir
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
129
    from bzrlib.transport import get_transport
130
        
131
    transport = get_transport(location)
132
    location_url = transport.base
133
134
    old_rh = []
135
136
    try:
0.8.85 by Szilveszter Farkas (Phanatic)
Fix Push functionality.
137
        dir_to = BzrDir.open(location_url)
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
138
        br_to = dir_to.open_branch()
0.8.85 by Szilveszter Farkas (Phanatic)
Fix Push functionality.
139
    except errors.NotBranchError:
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
140
        # create a branch.
141
        transport = transport.clone('..')
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
142
        try:
143
            relurl = transport.relpath(location_url)
144
            transport.mkdir(relurl)
145
        except errors.NoSuchFile:
475.1.2 by Vincent Ladeuil
Fix bug #187283 fix replacing _() by _i18n().
146
            response = question_dialog(_i18n('Non existing parent directory'),
147
                         _i18n("The parent directory (%s)\ndoesn't exist. Create?") % location)
228 by Jelmer Vernooij
Remove unused code, prefer questions to check boxes.
148
            if response == gtk.RESPONSE_OK:
149
                _create_prefix(transport)
150
            else:
0.8.85 by Szilveszter Farkas (Phanatic)
Fix Push functionality.
151
                return
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
152
        dir_to = br_from.bzrdir.clone(location_url,
153
            revision_id=br_from.last_revision())
154
        br_to = dir_to.open_branch()
155
        count = len(br_to.revision_history())
156
    else:
157
        old_rh = br_to.revision_history()
158
        try:
0.13.13 by Jelmer Vernooij
Update TODO
159
            tree_to = dir_to.open_workingtree()
160
        except errors.NotLocalUrl:
161
            # FIXME - what to do here? how should we warn the user?
162
            count = br_to.pull(br_from, overwrite)
163
        except errors.NoWorkingTree:
164
            count = br_to.pull(br_from, overwrite)
165
        else:
166
            count = tree_to.pull(br_from, overwrite)
167
0.11.9 by Jelmer Vernooij
Remove last few bits from backend and integrate them where necessary.
168
    return count