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 dialog import error_dialog
34
from guifiles import GLADEFILENAME
33
37
class OliveCheckout:
34
38
""" Display checkout dialog and perform the needed operations. """
35
def __init__(self, gladefile, comm, dialog):
39
def __init__(self, path=None):
36
40
""" Initialize the Checkout dialog. """
37
self.gladefile = gladefile
38
self.glade = gtk.glade.XML(self.gladefile, 'window_checkout', 'olive-gtk')
40
# Communication object
41
self.glade = gtk.glade.XML(GLADEFILENAME, 'window_checkout', 'olive-gtk')
45
43
self.window = self.glade.get_widget('window_checkout')
63
62
entry_location = self.glade.get_widget('entry_checkout_location')
64
63
location = entry_location.get_text()
66
self.dialog.error_dialog(_('Missing branch location'),
67
_('You must specify a branch location.'))
65
error_dialog(_('Missing branch location'),
66
_('You must specify a branch location.'))
70
69
destination = self.filechooser.get_filename()
72
71
spinbutton_revno = self.glade.get_widget('spinbutton_checkout_revno')
73
72
revno = spinbutton_revno.get_value_as_int()
77
74
checkbutton_lightweight = self.glade.get_widget('checkbutton_checkout_lightweight')
78
75
lightweight = checkbutton_lightweight.get_active()
80
self.comm.set_busy(self.window)
82
init.checkout(location, destination, revno, lightweight)
78
source = Branch.open(location)
79
rev_id = source.get_rev_id(revno)
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)):
87
source.bzrdir.open_workingtree()
88
except errors.NoWorkingTree:
89
source.bzrdir.create_workingtree()
92
destination = destination + '/' + os.path.basename(location.rstrip("/\\"))
96
old_format = bzrlib.bzrdir.BzrDirFormat.get_default_format()
97
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
101
checkout = bzrdir.BzrDirMetaFormat1().initialize(destination)
102
bzrlib.branch.BranchReferenceFormat().initialize(checkout, source)
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])
112
checkout.create_workingtree(rev_id)
114
bzrlib.bzrdir.BzrDirFormat.set_default_format(old_format)
83
115
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)
116
error_dialog(_('Location is not a branch'),
117
_('The specified location has to be a branch.'))
88
119
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)
120
error_dialog(_('Target already exists'),
121
_('Target directory (%s)\nalready exists. Please select another target.') % errmsg)
93
123
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)
124
error_dialog(_('Non existing parent directory'),
125
_("The parent directory (%s)\ndoesn't exist.") % errmsg)
102
129
self.comm.refresh_right()