class TestsUrlHistory(TestCaseInTempDir): def setUp(self): super(TestsUrlHistory, self).setUp() self.config = config.GlobalConfig() def test_add_entry(self): """Tests whether a URL can be added to the history list. The history store should only store the url, not try to access it.""" self.history = UrlHistory(self.config, 'test_add_entry') self.history.add_entry("http://foobarbla") def test_get_entries(self): self.history = UrlHistory(self.config, 'test_get_entries') self.history.add_entry("http://foobar") self.history.add_entry("file://bla") self.assertEqual(["http://foobar", "file://bla"], self.history.get_entries()) def test_get_empty(self): self.history = UrlHistory(self.config, 'test_get_empty') self.assertEqual([], self.history.get_entries())
class PushDialog(Gtk.Dialog): """New implementation of the Push dialog.""" def __init__(self, repository=None, revid=None, branch=None, parent=None): """Initialize the Push dialog. """ super(PushDialog, self).__init__( title="Push", parent=parent, flags=0, border_width=6, buttons=(Gtk.STOCK_CLOSE, Gtk.ResponseType.CLOSE)) if repository is None: repository = branch.repository self.branch = branch # Unused arguments self.repository = repository if revid is None: revid = branch.last_revision() self.revid = revid # Create the widgets self._label_location = Gtk.Label(label=_i18n("Location:")) self._combo = Gtk.ComboBox.new_with_entry() self._button_push = Gtk.Button(_i18n("_Push"), use_underline=True) self._hbox_location = Gtk.Box(Gtk.Orientation.HORIZONTAL, 6) self._push_message = Gtk.Label(xalign=0) self._progress_widget = ProgressPanel() # Set callbacks ui.ui_factory.set_progress_bar_widget(self._progress_widget) self.connect('close', self._on_close_clicked) self._button_push.connect('clicked', self._on_push_clicked) # Set properties content_area = self.get_content_area() content_area.set_spacing(6) # Pack widgets self._hbox_location.pack_start(self._label_location, False, False, 0) self._hbox_location.pack_start(self._combo, False, False, 0) content_area.pack_start(self._hbox_location, True, True, 0) content_area.pack_start(self._progress_widget, True, True, 0) content_area.pack_start(self._push_message, True, True, 0) self.get_action_area().pack_end(self._button_push, True, True, 0) # Show the dialog content_area.show_all() self._progress_widget.hide() self._push_message.hide() # Build location history self._history = UrlHistory(self.branch.get_config(), 'push_history') self._build_history() def _build_history(self): """Build up the location history. """ self._combo_model = Gtk.ListStore(str) for item in self._history.get_entries(): self._combo_model.append([item]) self._combo.set_model(self._combo_model) self._combo.set_entry_text_column(0) if self.branch is not None: location = self.branch.get_push_location() if location is not None: self._combo.get_child().set_text(location) def _on_close_clicked(self, widget): """Close dialog handler.""" ui.ui_factory.set_progress_bar_widget(None) @show_bzr_error def _on_push_clicked(self, widget): """Push button clicked handler. """ self._push_message.hide() self._progress_widget.tick() location = self._combo.get_child().get_text() try: message = do_push(self.branch, location, overwrite=False) except errors.DivergedBranches: response = question_dialog( _i18n('Branches have been diverged'), _i18n('You cannot push if branches have diverged.\n' 'Overwrite?')) if response == Gtk.ResponseType.YES: message = do_push(self.branch, location, overwrite=True) else: return self._history.add_entry(location) if (self.branch is not None and self.branch.get_push_location() is None): self.branch.set_push_location(location) if message: self._progress_widget.finished() self._push_message.props.label = message self._push_message.show()
class CheckoutDialog(Gtk.Dialog): """ New implementation of the Checkout dialog. """ def __init__(self, path=None, parent=None, remote_path=None): """ Initialize the Checkout dialog. """ super(CheckoutDialog, self).__init__( title="Checkout - Olive", parent=parent, flags=0, buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL) ) # Get arguments self.path = path # Create the widgets self._button_checkout = Gtk.Button(_i18n("Check_out"), use_underline=True) self._button_revision = Gtk.Button("") self._image_browse = Gtk.Image() self._filechooser = Gtk.FileChooserButton(_i18n("Please select a folder")) self._combo = Gtk.ComboBox.new_with_entry() self._label_location = Gtk.Label(label=_i18n("Branch location:")) self._label_destination = Gtk.Label(label=_i18n("Destination:")) self._label_nick = Gtk.Label(label=_i18n("Branch nick:")) self._label_revision = Gtk.Label(label=_i18n("Revision:")) self._hbox_revision = Gtk.HBox() self._entry_revision = Gtk.Entry() self._entry_nick = Gtk.Entry() self._check_lightweight = Gtk.CheckButton(_i18n("_Lightweight checkout"), use_underline=True) # Set callbacks self._button_checkout.connect("clicked", self._on_checkout_clicked) self._button_revision.connect("clicked", self._on_revision_clicked) self._combo.get_child().connect("focus-out-event", self._on_combo_changed) # Create the table and pack the widgets into it self._table = Gtk.Table(rows=3, columns=2) self._table.attach(self._label_location, 0, 1, 0, 1) self._table.attach(self._label_destination, 0, 1, 1, 2) self._table.attach(self._label_nick, 0, 1, 2, 3) self._table.attach(self._label_revision, 0, 1, 3, 4) self._table.attach(self._combo, 1, 2, 0, 1) self._table.attach(self._filechooser, 1, 2, 1, 2) self._table.attach(self._entry_nick, 1, 2, 2, 3) self._table.attach(self._hbox_revision, 1, 2, 3, 4) self._table.attach(self._check_lightweight, 1, 2, 4, 5) # Set properties self._image_browse.set_from_stock(Gtk.STOCK_OPEN, Gtk.IconSize.BUTTON) self._button_revision.set_image(self._image_browse) self._button_revision.set_sensitive(False) self._filechooser.set_action(Gtk.FileChooserAction.SELECT_FOLDER) self._label_location.set_alignment(0, 0.5) self._label_destination.set_alignment(0, 0.5) self._label_nick.set_alignment(0, 0.5) self._label_revision.set_alignment(0, 0.5) self._table.set_row_spacings(3) self._table.set_col_spacings(3) self.get_content_area().set_spacing(3) if self.path is not None: self._filechooser.set_filename(self.path) if remote_path is not None: self._combo.get_child().set_text(remote_path) # Pack some widgets self._hbox_revision.pack_start(self._entry_revision, True, True, 0) self._hbox_revision.pack_start(self._button_revision, False, False, 0) self.get_content_area().add(self._table) self.action_area.pack_end(self._button_checkout, False, False, 0) # Show the dialog self.get_content_area().show_all() # Build checkout history self._history = UrlHistory(GlobalConfig(), "branch_history") self._build_history() def _build_history(self): """ Build up the checkout history. """ self._combo_model = Gtk.ListStore(str) for item in self._history.get_entries(): self._combo_model.append([item]) self._combo.set_model(self._combo_model) self._combo.set_entry_text_column(0) def _get_last_revno(self): """ Get the revno of the last revision (if any). """ location = self._combo.get_child().get_text() try: br = Branch.open(location) except: return None else: return br.revno() def _on_revision_clicked(self, button): """ Browse for revision button clicked handler. """ from revbrowser import RevisionBrowser location = self._combo.get_child().get_text() try: br = Branch.open(location) except: return else: revb = RevisionBrowser(br, self) response = revb.run() if response != Gtk.ResponseType.NONE: revb.hide() if response == Gtk.ResponseType.OK: if revb.selected_revno is not None: self._entry_revision.set_text(revb.selected_revno) revb.destroy() @show_bzr_error def _on_checkout_clicked(self, button): """ Checkout button clicked handler. """ location = self._combo.get_child().get_text() if location is "": error_dialog(_i18n("Missing branch location"), _i18n("You must specify a branch location.")) return destination = self._filechooser.get_filename() try: revno = int(self._entry_revision.get_text()) except: revno = None nick = self._entry_nick.get_text() if nick is "": nick = os.path.basename(location.rstrip("/\\")) br_from = Branch.open(location) revision_id = br_from.get_rev_id(revno) lightweight = self._check_lightweight.get_active() to_location = destination + os.sep + nick os.mkdir(to_location) br_from.create_checkout(to_location, revision_id, lightweight) self._history.add_entry(location) self.response(Gtk.ResponseType.OK) def _on_combo_changed(self, widget, event): """ We try to get the last revision if focus lost. """ rev = self._get_last_revno() if rev is None: self._entry_revision.set_text(_i18n("N/A")) self._button_revision.set_sensitive(False) else: self._entry_revision.set_text(str(rev)) self._button_revision.set_sensitive(True) if self._entry_nick.get_text() == "": self._entry_nick.set_text(os.path.basename(self._combo.get_child().get_text().rstrip("/\\")))