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.errors as errors
31
from olive import gladefile
32
from dialog import error_dialog, info_dialog
34
35
""" Display branch dialog and perform the needed operations. """
35
def __init__(self, gladefile, comm, dialog):
36
def __init__(self, path=None):
36
37
""" Initialize the Branch dialog. """
37
self.gladefile = gladefile
38
self.glade = gtk.glade.XML(self.gladefile, 'window_branch', 'olive-gtk')
40
# Communication object
38
self.glade = gtk.glade.XML(gladefile, 'window_branch', 'olive-gtk')
45
40
self.window = self.glade.get_widget('window_branch')
47
42
# Dictionary for signal_autoconnect
63
59
entry_location = self.glade.get_widget('entry_branch_location')
64
60
location = entry_location.get_text()
66
self.dialog.error_dialog(_('Missing branch location'),
67
_('You must specify a branch location.'))
62
error_dialog(_('Missing branch location'),
63
_('You must specify a branch location.'))
70
66
destination = self.filechooser.get_filename()
72
68
spinbutton_revno = self.glade.get_widget('spinbutton_branch_revno')
73
69
revno = spinbutton_revno.get_value_as_int()
77
self.comm.set_busy(self.window)
79
revs = init.branch(location, destination, revno)
72
from bzrlib.transport import get_transport
74
br_from = Branch.open(location)
77
revision_id = br_from.get_rev_id(revno)
80
destination = destination + '/' + os.path.basename(location.rstrip("/\\"))
81
to_transport = get_transport(destination)
82
to_transport.mkdir('.')
85
dir = br_from.bzrdir.sprout(to_transport.base, revision_id)
86
branch = dir.open_branch()
88
except errors.NoSuchRevision:
89
to_transport.delete_tree('.')
96
info_dialog(_('Branching successful'),
97
_('%d revision(s) branched.') % revs)
80
98
except errors.NonExistingSource, errmsg:
81
self.dialog.error_dialog(_('Non existing source'),
82
_("The location (%s)\ndoesn't exist.") % errmsg)
83
self.comm.set_busy(self.window, False)
99
error_dialog(_('Non existing source'),
100
_("The location (%s)\ndoesn't exist.") % errmsg)
85
102
except errors.TargetAlreadyExists, errmsg:
86
self.dialog.error_dialog(_('Target already exists'),
87
_('Target directory (%s)\nalready exists. Please select another target.') % errmsg)
88
self.comm.set_busy(self.window, False)
103
error_dialog(_('Target already exists'),
104
_('Target directory (%s)\nalready exists. Please select another target.') % errmsg)
90
106
except errors.NonExistingParent, errmsg:
91
self.dialog.error_dialog(_('Non existing parent directory'),
92
_("The parent directory (%s)\ndoesn't exist.") % errmsg)
93
self.comm.set_busy(self.window, False)
107
error_dialog(_('Non existing parent directory'),
108
_("The parent directory (%s)\ndoesn't exist.") % errmsg)
95
110
except errors.NonExistingRevision:
96
self.dialog.error_dialog(_('Non existing revision'),
97
_("The revision you specified doesn't exist."))
98
self.comm.set_busy(self.window, False)
111
error_dialog(_('Non existing revision'),
112
_("The revision you specified doesn't exist."))
100
114
except errors.NotBranchError, errmsg:
101
self.dialog.error_dialog(_('Location is not a branch'),
102
_('The specified location has to be a branch.'))
103
self.comm.set_busy(self.window, False)
115
error_dialog(_('Location is not a branch'),
116
_('The specified location has to be a branch.'))
109
self.dialog.info_dialog(_('Branching successful'),
110
_('%d revision(s) branched.') % revs)
111
self.comm.refresh_right()
113
119
def close(self, widget=None):
114
120
self.window.destroy()