/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 olive/checkout.py

  • Committer: Jelmer Vernooij
  • Date: 2006-05-19 16:37:13 UTC
  • Revision ID: jelmer@samba.org-20060519163713-be77b31c72cbc7e8
Move visualisation code to a separate directory, preparing for bundling 
the GTK+ plugins for bzr.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006 by Szilveszter Farkas (Phanatic) <szilveszter.farkas@gmail.com>
2
 
#
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.
7
 
#
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.
12
 
#
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
 
 
17
 
import os
18
 
 
19
 
try:
20
 
    import pygtk
21
 
    pygtk.require("2.0")
22
 
except:
23
 
    pass
24
 
 
25
 
import gtk
26
 
import gtk.glade
27
 
 
28
 
from bzrlib.branch import Branch
29
 
import bzrlib.bzrdir as bzrdir
30
 
import bzrlib.errors as errors
31
 
import bzrlib.osutils
32
 
 
33
 
from olive import gladefile
34
 
from dialog import error_dialog
35
 
 
36
 
class OliveCheckout:
37
 
    """ Display checkout dialog and perform the needed operations. """
38
 
    def __init__(self, path=None):
39
 
        """ Initialize the Checkout dialog. """
40
 
        self.glade = gtk.glade.XML(gladefile, 'window_checkout', 'olive-gtk')
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')
53
 
        if path is not None:
54
 
            self.filechooser.set_filename(path)
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 '':
64
 
            error_dialog(_('Missing branch location'),
65
 
                         _('You must specify a branch location.'))
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:
77
 
            source = Branch.open(location)
78
 
            rev_id = source.get_rev_id(revno)
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()
87
 
                except errors.NoWorkingTree:
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()
96
 
            bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
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)
114
 
        except errors.NotBranchError, errmsg:
115
 
            error_dialog(_('Location is not a branch'),
116
 
                         _('The specified location has to be a branch.'))
117
 
            return
118
 
        except errors.TargetAlreadyExists, errmsg:
119
 
            error_dialog(_('Target already exists'),
120
 
                         _('Target directory (%s)\nalready exists. Please select another target.') % errmsg)
121
 
            return
122
 
        except errors.NonExistingParent, errmsg:
123
 
            error_dialog(_('Non existing parent directory'),
124
 
                         _("The parent directory (%s)\ndoesn't exist.") % errmsg)
125
 
            return
126
 
        
127
 
        self.close()
128
 
        self.comm.refresh_right()
129
 
 
130
 
    def close(self, widget=None):
131
 
        self.window.destroy()