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