/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to push.py

  • Committer: Vincent Ladeuil
  • Date: 2008-05-05 18:16:46 UTC
  • mto: (487.1.1 gtk)
  • mto: This revision was merged to the branch mainline in revision 490.
  • Revision ID: v.ladeuil+lp@free.fr-20080505181646-n95l8ltw2u6jtr26
Fix bug #187283 fix replacing _() by _i18n().

* genpot.sh 
Remove duplication. Add the ability to specify the genrated pot
file on command-line for debugging purposes.

* po/olive-gtk.pot:
Regenerated.

* __init__.py, branch.py, branchview/treeview.py, checkout.py,
commit.py, conflicts.py, diff.py, errors.py, initialize.py,
merge.py, nautilus-bzr.py, olive/__init__.py, olive/add.py,
olive/bookmark.py, olive/guifiles.py, olive/info.py,
olive/menu.py, olive/mkdir.py, olive/move.py, olive/remove.py,
olive/rename.py, push.py, revbrowser.py, status.py, tags.py:
Replace all calls to _() by calls to _i18n(), the latter being
defined in __init__.py and imported in the other modules from
there. This fix the problem encountered countless times when
running bzr selftest and getting silly error messages about
boolean not being callables.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
 
2
# Copyright (C) 2007 by Jelmer Vernooij <jelmer@samba.org>
2
3
#
3
4
# This program is free software; you can redistribute it and/or modify
4
5
# it under the terms of the GNU General Public License as published by
24
25
 
25
26
from errors import show_bzr_error
26
27
 
 
28
# FIXME: This needs to be public JRV 20070714
 
29
from bzrlib.builtins import _create_prefix
27
30
from bzrlib.config import LocationConfig
28
31
import bzrlib.errors as errors
29
32
 
 
33
from bzrlib.plugins.gtk import _i18n
30
34
from dialog import error_dialog, info_dialog, question_dialog
31
35
 
32
36
from history import UrlHistory
33
37
 
34
38
class PushDialog(gtk.Dialog):
35
39
    """ New implementation of the Push dialog. """
36
 
    def __init__(self, branch, parent=None):
 
40
    def __init__(self, repository, revid, branch=None, parent=None):
37
41
        """ Initialize the Push dialog. """
38
42
        gtk.Dialog.__init__(self, title="Push - Olive",
39
43
                                  parent=parent,
41
45
                                  buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
42
46
        
43
47
        # Get arguments
 
48
        self.repository = repository
 
49
        self.revid = revid
44
50
        self.branch = branch
45
51
        
46
52
        # Create the widgets
47
 
        self._label_location = gtk.Label(_("Location:"))
48
 
        self._label_test = gtk.Label(_("(click the Test button to check write access)"))
49
 
        self._check_remember = gtk.CheckButton(_("_Remember as default location"),
50
 
                                               use_underline=True)
51
 
        self._check_prefix = gtk.CheckButton(_("Create the path _leading up to the location"),
52
 
                                             use_underline=True)
53
 
        self._check_overwrite = gtk.CheckButton(_("_Overwrite target if diverged"),
54
 
                                                use_underline=True)
 
53
        self._label_location = gtk.Label(_i18n("Location:"))
55
54
        self._combo = gtk.ComboBoxEntry()
56
 
        self._button_test = gtk.Button(_("_Test"), use_underline=True)
57
 
        self._button_push = gtk.Button(_("_Push"), use_underline=True)
 
55
        self._button_push = gtk.Button(_i18n("_Push"), use_underline=True)
58
56
        self._hbox_location = gtk.HBox()
59
 
        self._hbox_test = gtk.HBox()
60
 
        self._image_test = gtk.Image()
61
57
        
62
58
        # Set callbacks
63
 
        self._button_test.connect('clicked', self._on_test_clicked)
64
59
        self._button_push.connect('clicked', self._on_push_clicked)
65
60
        
66
61
        # Set properties
67
 
        self._image_test.set_from_stock(gtk.STOCK_DIALOG_INFO, gtk.ICON_SIZE_BUTTON)
68
62
        self._label_location.set_alignment(0, 0.5)
69
 
        self._label_test.set_alignment(0, 0.5)
70
63
        self._hbox_location.set_spacing(3)
71
 
        self._hbox_test.set_spacing(3)
72
64
        self.vbox.set_spacing(3)
73
65
        
74
66
        # Pack widgets
75
67
        self._hbox_location.pack_start(self._label_location, False, False)
76
68
        self._hbox_location.pack_start(self._combo, True, True)
77
 
        self._hbox_test.pack_start(self._image_test, False, False)
78
 
        self._hbox_test.pack_start(self._label_test, True, True)
79
69
        self.vbox.pack_start(self._hbox_location)
80
 
        self.vbox.pack_start(self._check_remember)
81
 
        self.vbox.pack_start(self._check_prefix)
82
 
        self.vbox.pack_start(self._check_overwrite)
83
 
        self.vbox.pack_start(self._hbox_test)
84
 
        self.action_area.pack_start(self._button_test)
85
70
        self.action_area.pack_end(self._button_push)
86
71
        
87
72
        # Show the dialog
99
84
        self._combo.set_model(self._combo_model)
100
85
        self._combo.set_text_column(0)
101
86
        
102
 
        location = self.branch.get_push_location()
103
 
        if location:
104
 
            self._combo.get_child().set_text(location)
105
 
    
106
 
    def _on_test_clicked(self, widget):
107
 
        """ Test button clicked handler. """
108
 
        import re
109
 
        _urlRE = re.compile(r'^(?P<proto>[^:/\\]+)://(?P<path>.*)$')
110
 
        
111
 
        url = self._combo.get_child().get_text()
112
 
        
113
 
        m = _urlRE.match(url)
114
 
        if m:
115
 
            proto = m.groupdict()['proto']
116
 
            if (proto == 'sftp') or (proto == 'file') or (proto == 'ftp'):
117
 
                # have write acces (most probably)
118
 
                self._image_test.set_from_stock(gtk.STOCK_YES, 4)
119
 
                self._label_test.set_markup(_('<b>Write access is probably available</b>'))
120
 
            else:
121
 
                # no write access
122
 
                self._image_test.set_from_stock(gtk.STOCK_NO, 4)
123
 
                self._label_test.set_markup(_('<b>No write access</b>'))
124
 
        else:
125
 
            # couldn't determine
126
 
            self._image_test.set_from_stock(gtk.STOCK_DIALOG_QUESTION, 4)
127
 
            self._label_test.set_markup(_('<b>Could not determine</b>'))
 
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)
128
91
    
129
92
    @show_bzr_error
130
93
    def _on_push_clicked(self, widget):
131
94
        """ Push button clicked handler. """
132
95
        location = self._combo.get_child().get_text()
133
96
        revs = 0
 
97
        if self.branch is not None and self.branch.get_push_location() is None:
 
98
            response = question_dialog(_i18n('Set default push location'),
 
99
                                       _i18n('There is no default push location set.\nSet %r as default now?') % location)
 
100
            if response == gtk.RESPONSE_OK:
 
101
                self.branch.set_push_location(location)
 
102
 
134
103
        try:
135
 
            revs = do_push(self.branch,
136
 
                           location=location,
137
 
                           overwrite=self._check_overwrite.get_active(),
138
 
                           remember=self._check_remember.get_active(),
139
 
                           create_prefix=self._check_prefix.get_active())
 
104
            revs = do_push(self.branch, location=location, overwrite=False)
140
105
        except errors.DivergedBranches:
141
 
            response = question_dialog(_('Branches have been diverged'),
142
 
                                       _('You cannot push if branches have diverged.\nOverwrite?'))
143
 
            if response == gtk.RESPONSE_OK:
144
 
                revs = do_push(self.branch, overwrite=True)
145
 
            return
 
106
            response = question_dialog(_i18n('Branches have been diverged'),
 
107
                                       _i18n('You cannot push if branches have diverged.\nOverwrite?'))
 
108
            if response == gtk.RESPONSE_YES:
 
109
                revs = do_push(self.branch, location=location, overwrite=True)
146
110
        
147
111
        self._history.add_entry(location)
148
 
        info_dialog(_('Push successful'),
149
 
                    _("%d revision(s) pushed.") % revs)
 
112
        info_dialog(_i18n('Push successful'),
 
113
                    _i18n("%d revision(s) pushed.") % revs)
150
114
        
151
115
        self.response(gtk.RESPONSE_OK)
152
116
 
153
 
def do_push(branch, location=None, remember=False, overwrite=False,
154
 
         create_prefix=False):
 
117
def do_push(br_from, location, overwrite):
155
118
    """ Update a mirror of a branch.
156
119
    
157
 
    :param branch: the source branch
 
120
    :param br_from: the source branch
158
121
    
159
122
    :param location: the location of the branch that you'd like to update
160
123
    
161
 
    :param remember: if set, the location will be stored
162
 
    
163
124
    :param overwrite: overwrite target location if it diverged
164
125
    
165
 
    :param create_prefix: create the path leading up to the branch if it doesn't exist
166
 
    
167
126
    :return: number of revisions pushed
168
127
    """
169
128
    from bzrlib.bzrdir import BzrDir
170
129
    from bzrlib.transport import get_transport
171
130
        
172
 
    br_from = branch
173
 
    
174
 
    stored_loc = br_from.get_push_location()
175
 
    if location is None:
176
 
        if stored_loc is None:
177
 
            error_dialog(_('Push location is unknown'),
178
 
                         _('Please specify a location manually.'))
179
 
            return
180
 
        else:
181
 
            location = stored_loc
182
 
 
183
131
    transport = get_transport(location)
184
132
    location_url = transport.base
185
133
 
186
 
    if br_from.get_push_location() is None or remember:
187
 
        br_from.set_push_location(location_url)
188
 
 
189
134
    old_rh = []
190
135
 
191
136
    try:
194
139
    except errors.NotBranchError:
195
140
        # create a branch.
196
141
        transport = transport.clone('..')
197
 
        if not create_prefix:
198
 
            try:
199
 
                relurl = transport.relpath(location_url)
200
 
                transport.mkdir(relurl)
201
 
            except errors.NoSuchFile:
202
 
                error_dialog(_('Non existing parent directory'),
203
 
                             _("The parent directory (%s)\ndoesn't exist.") % location)
 
142
        try:
 
143
            relurl = transport.relpath(location_url)
 
144
            transport.mkdir(relurl)
 
145
        except errors.NoSuchFile:
 
146
            response = question_dialog(_i18n('Non existing parent directory'),
 
147
                         _i18n("The parent directory (%s)\ndoesn't exist. Create?") % location)
 
148
            if response == gtk.RESPONSE_OK:
 
149
                _create_prefix(transport)
 
150
            else:
204
151
                return
205
 
        else:
206
 
            current = transport.base
207
 
            needed = [(transport, transport.relpath(location_url))]
208
 
            while needed:
209
 
                try:
210
 
                    transport, relpath = needed[-1]
211
 
                    transport.mkdir(relpath)
212
 
                    needed.pop()
213
 
                except errors.NoSuchFile:
214
 
                    new_transport = transport.clone('..')
215
 
                    needed.append((new_transport,
216
 
                                   new_transport.relpath(transport.base)))
217
 
                    if new_transport.base == transport.base:
218
 
                        error_dialog(_('Path prefix not created'),
219
 
                                     _("The path leading up to the specified location couldn't\nbe created."))
220
 
                        return
221
152
        dir_to = br_from.bzrdir.clone(location_url,
222
153
            revision_id=br_from.last_revision())
223
154
        br_to = dir_to.open_branch()
228
159
            tree_to = dir_to.open_workingtree()
229
160
        except errors.NotLocalUrl:
230
161
            # FIXME - what to do here? how should we warn the user?
231
 
            #warning('This transport does not update the working '
232
 
            #        'tree of: %s' % (br_to.base,))
233
162
            count = br_to.pull(br_from, overwrite)
234
163
        except errors.NoWorkingTree:
235
164
            count = br_to.pull(br_from, overwrite)