/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
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.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
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.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
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.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
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.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
17
import os
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
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
26
import gtk.glade
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
27
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
28
from bzrlib.branch import Branch
29
import bzrlib.bzrdir as bzrdir
0.11.1 by Jelmer Vernooij
Eliminate olive.backend.errors.
30
import bzrlib.errors as errors
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
31
import bzrlib.osutils
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
32
0.13.10 by Jelmer Vernooij
Don't pass around gladefile all the time.
33
from olive import gladefile
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
34
from dialog import error_dialog
0.13.10 by Jelmer Vernooij
Don't pass around gladefile all the time.
35
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
36
class OliveCheckout:
37
    """ Display checkout dialog and perform the needed operations. """
0.13.11 by Jelmer Vernooij
Bunch of small fixes, cleanups and simplifications.
38
    def __init__(self, path=None):
0.8.46 by Szilveszter Farkas (Phanatic)
Modified OliveDialog class interface; huge cleanups.
39
        """ Initialize the Checkout dialog. """
0.13.13 by Jelmer Vernooij
Update TODO
40
        self.glade = gtk.glade.XML(gladefile, 'window_checkout', 'olive-gtk')
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
41
        
42
        self.window = self.glade.get_widget('window_checkout')
43
        
44
        # Dictionary for signal_autoconnect
45
        dic = { "on_button_checkout_checkout_clicked": self.checkout,
46
                "on_button_checkout_cancel_clicked": self.close }
47
        
48
        # Connect the signals to the handlers
49
        self.glade.signal_autoconnect(dic)
50
        
51
        # Save FileChooser state
52
        self.filechooser = self.glade.get_widget('filechooserbutton_checkout')
0.13.11 by Jelmer Vernooij
Bunch of small fixes, cleanups and simplifications.
53
        if path is not None:
54
            self.filechooser.set_filename(path)
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
55
56
    def display(self):
57
        """ Display the Checkout dialog. """
58
        self.window.show_all()
59
    
60
    def checkout(self, widget):
61
        entry_location = self.glade.get_widget('entry_checkout_location')
62
        location = entry_location.get_text()
63
        if location is '':
0.13.6 by Jelmer Vernooij
Don't pass along dialog context everywhere.
64
            error_dialog(_('Missing branch location'),
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
65
                         _('You must specify a branch location.'))
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
66
            return
67
        
68
        destination = self.filechooser.get_filename()
69
        
70
        spinbutton_revno = self.glade.get_widget('spinbutton_checkout_revno')
71
        revno = spinbutton_revno.get_value_as_int()
72
        
73
        checkbutton_lightweight = self.glade.get_widget('checkbutton_checkout_lightweight')
74
        lightweight = checkbutton_lightweight.get_active()
75
        
76
        try:
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
77
            source = Branch.open(location)
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
78
            rev_id = source.get_rev_id(revno)
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
79
            
80
            # if the source and destination are the same, 
81
            # and there is no working tree,
82
            # then reconstitute a branch
83
            if (bzrlib.osutils.abspath(destination) ==
84
                bzrlib.osutils.abspath(location)):
85
                try:
86
                    source.bzrdir.open_workingtree()
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
87
                except errors.NoWorkingTree:
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
88
                    source.bzrdir.create_workingtree()
89
                    return
90
91
            destination = destination + '/' + os.path.basename(location.rstrip("/\\"))
92
            
93
            os.mkdir(destination)
94
95
            old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
96
            bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
0.11.7 by Jelmer Vernooij
Integrate olive.backend.init
97
98
            try:
99
                if lightweight:
100
                    checkout = bzrdir.BzrDirMetaFormat1().initialize(destination)
101
                    bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
102
                else:
103
                    checkout_branch = bzrlib.bzrdir.BzrDir.create_branch_convenience(
104
                        destination, force_new_tree=False)
105
                    checkout = checkout_branch.bzrdir
106
                    checkout_branch.bind(source)
107
                    if rev_id is not None:
108
                        rh = checkout_branch.revno_history()
109
                        checkout_branch.set_revno_history(rh[:rh.index(rev_id) + 1])
110
111
                checkout.create_workingtree(rev_id)
112
            finally:
113
                bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
114
        except errors.NotBranchError, errmsg:
0.13.6 by Jelmer Vernooij
Don't pass along dialog context everywhere.
115
            error_dialog(_('Location is not a branch'),
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
116
                         _('The specified location has to be a branch.'))
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
117
            return
118
        except errors.TargetAlreadyExists, errmsg:
0.13.6 by Jelmer Vernooij
Don't pass along dialog context everywhere.
119
            error_dialog(_('Target already exists'),
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
120
                         _('Target directory (%s)\nalready exists. Please select another target.') % errmsg)
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
121
            return
122
        except errors.NonExistingParent, errmsg:
0.13.6 by Jelmer Vernooij
Don't pass along dialog context everywhere.
123
            error_dialog(_('Non existing parent directory'),
0.8.96 by Szilveszter Farkas (Phanatic)
Checkout cleaned up.
124
                         _("The parent directory (%s)\ndoesn't exist.") % errmsg)
0.8.22 by Szilveszter Farkas (Phanatic)
2006-07-31 Szilveszter Farkas <Szilveszter.Farkas@gmail.com>
125
            return
126
        
127
        self.close()
128
        self.comm.refresh_right()
129
130
    def close(self, widget=None):
131
        self.window.destroy()