14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
21
pygtk.require("2.0")
30
import olive.backend.init as init
31
import olive.backend.errors as errors
28
from bzrlib.branch import Branch
29
import bzrlib.bzrdir as bzrdir
30
import bzrlib.errors as errors
33
from olive import gladefile
34
from dialog import error_dialog
33
36
class OliveCheckout:
34
37
""" Display checkout dialog and perform the needed operations. """
35
def __init__(self, gladefile, comm, dialog):
38
def __init__(self, path=None):
36
39
""" Initialize the Checkout dialog. """
37
self.gladefile = gladefile
38
self.glade = gtk.glade.XML(self.gladefile, 'window_checkout', 'olive-gtk')
40
# Communication object
40
self.glade = gtk.glade.XML(gladefile, 'window_checkout', 'olive-gtk')
45
42
self.window = self.glade.get_widget('window_checkout')
63
61
entry_location = self.glade.get_widget('entry_checkout_location')
64
62
location = entry_location.get_text()
66
self.dialog.error_dialog(_('Missing branch location'),
67
_('You must specify a branch location.'))
64
error_dialog(_('Missing branch location'),
65
_('You must specify a branch location.'))
70
68
destination = self.filechooser.get_filename()
72
70
spinbutton_revno = self.glade.get_widget('spinbutton_checkout_revno')
73
71
revno = spinbutton_revno.get_value_as_int()
77
73
checkbutton_lightweight = self.glade.get_widget('checkbutton_checkout_lightweight')
78
74
lightweight = checkbutton_lightweight.get_active()
80
self.comm.set_busy(self.window)
82
init.checkout(location, destination, revno, lightweight)
77
source = Branch.open(location)
78
rev_id = source.get_rev_id(revno)
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)):
86
source.bzrdir.open_workingtree()
87
except errors.NoWorkingTree:
88
source.bzrdir.create_workingtree()
91
destination = destination + '/' + os.path.basename(location.rstrip("/\\"))
95
old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
96
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
100
checkout = bzrdir.BzrDirMetaFormat1().initialize(destination)
101
bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
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])
111
checkout.create_workingtree(rev_id)
113
bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
83
114
except errors.NotBranchError, errmsg:
84
self.dialog.error_dialog(_('Location is not a branch'),
85
_('The specified location has to be a branch.'))
86
self.comm.set_busy(self.window, False)
115
error_dialog(_('Location is not a branch'),
116
_('The specified location has to be a branch.'))
88
118
except errors.TargetAlreadyExists, errmsg:
89
self.dialog.error_dialog(_('Target already exists'),
90
_('Target directory (%s)\nalready exists. Please select another target.') % errmsg)
91
self.comm.set_busy(self.window, False)
119
error_dialog(_('Target already exists'),
120
_('Target directory (%s)\nalready exists. Please select another target.') % errmsg)
93
122
except errors.NonExistingParent, errmsg:
94
self.dialog.error_dialog(_('Non existing parent directory'),
95
_("The parent directory (%s)\ndoesn't exist.") % errmsg)
96
self.comm.set_busy(self.window, False)
123
error_dialog(_('Non existing parent directory'),
124
_("The parent directory (%s)\ndoesn't exist.") % errmsg)
102
128
self.comm.refresh_right()