Add ability to choose between folder and custom location as merge source Change title Add icon Add PointlessMerge error
Next step would be to also include an option to merge from file (bundle) but that can't be done with the other_branch = Branch.open_containing() construction currently used.
Jasper
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: [EMAIL PROTECTED] # target_branch: https://code.launchpad.net/~bzr-gtk/bzr-gtk/trunk # testament_sha1: ae990168e1739454abd66f0db66a3a690b755942 # timestamp: 2008-07-27 13:37:37 +0200 # source_branch: https://code.launchpad.net/~bzr-gtk/bzr-gtk/trunk # base_revision_id: [EMAIL PROTECTED] # # Begin patch === modified file 'errors.py' --- errors.py 2008-05-05 18:16:46 +0000 +++ errors.py 2008-07-27 11:37:31 +0000 @@ -16,7 +16,7 @@ import bzrlib.errors as errors from bzrlib.plugins.gtk import _i18n -from dialog import error_dialog +from dialog import error_dialog, info_dialog, warning_dialog def show_bzr_error(unbound): @@ -33,6 +33,9 @@ except errors.PointlessCommit: error_dialog(_i18n('No changes to commit'), _i18n('Try force commit if you want to commit anyway.')) + except errors.PointlessMerge: + info_dialog(_i18n('No changes to merge'), + _i18n('Merge location is already fully merged in working tree.')) except errors.ConflictsInTree: error_dialog(_i18n('Conflicts in tree'), _i18n('You need to resolve the conflicts before committing.')) === modified file 'merge.py' --- merge.py 2008-07-25 15:42:45 +0000 +++ merge.py 2008-07-27 11:37:31 +0000 @@ -27,7 +27,7 @@ from bzrlib.branch import Branch import bzrlib.errors as errors -from bzrlib.plugins.gtk import _i18n +from bzrlib.plugins.gtk import _i18n, icon_path from bzrlib.plugins.gtk.dialog import error_dialog, info_dialog, warning_dialog from bzrlib.plugins.gtk.errors import show_bzr_error @@ -37,52 +37,97 @@ def __init__(self, wt, wtpath, default_branch_path=None, parent=None): """ Initialize the Merge dialog. """ - gtk.Dialog.__init__(self, title="Olive - Merge", + gtk.Dialog.__init__(self, title="Merge changes", parent=parent, flags=0, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) - + self.set_icon_from_file(icon_path("bzr-icon-64.png")) # Get arguments self.wt = wt self.wtpath = wtpath - - if default_branch_path and os.path.isdir(default_branch_path.partition('file://')[2]): - directory = default_branch_path.partition('file://')[2] - else: - directory = os.path.dirname(self.wt.abspath(self.wtpath)) + self.default_branch_path = default_branch_path + self.parent_window = parent # Create widgets self._hbox = gtk.HBox() + self._source = gtk.HBox() self._label_merge_from = gtk.Label(_i18n("Merge from")) - self._filechooser_dialog = gtk.FileChooserDialog(title="Please select a folder", - parent=self.window, - action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, - buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, - gtk.STOCK_OPEN, gtk.RESPONSE_OK)) - self._filechooser_dialog.set_default_response(gtk.RESPONSE_OK) - self._filechooser = gtk.FileChooserButton(self._filechooser_dialog) + self._combo_source = gtk.combo_box_new_text() + for entry in [_i18n("Folder"),_i18n("Custom Location")]: + self._combo_source.append_text(entry) + self._combo_source.connect("changed", self._on_combo_changed) self._button_merge = gtk.Button(_i18n("_Merge")) self._button_merge_icon = gtk.Image() self._button_merge_icon.set_from_stock(gtk.STOCK_APPLY, gtk.ICON_SIZE_BUTTON) self._button_merge.set_image(self._button_merge_icon) - self._button_merge.connect('clicked', self._on_merge_clicked) - # Set location - self._filechooser_dialog.set_current_folder(directory) - # Add widgets to dialog - self.vbox.add(self._hbox) + self.vbox.pack_start(self._hbox, False, False, 0) self._hbox.add(self._label_merge_from) - self._hbox.add(self._filechooser) + self._hbox.add(self._combo_source) self._hbox.set_spacing(5) self.action_area.pack_end(self._button_merge) + if self.default_branch_path and os.path.isdir( + self.default_branch_path.partition('file://')[2]): + self.directory = self.default_branch_path.partition('file://')[2] + self._combo_source.set_active(0) + elif self.default_branch_path: + self._combo_source.set_active(1) + else: + # If no default_branch_path give, default to folder source with current folder + self._combo_source.set_active(0) self.vbox.show_all() - + + def _on_folder_source(self): + """ Merge from folder, create a filechooser dialog and button """ + self._source = gtk.HBox() + self._filechooser_dialog = gtk.FileChooserDialog(title="Please select a folder", + parent=self.parent_window, + action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, + buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, + gtk.STOCK_OPEN, gtk.RESPONSE_OK)) + self._filechooser_dialog.set_default_response(gtk.RESPONSE_OK) + self._filechooser = gtk.FileChooserButton(self._filechooser_dialog) + self._filechooser.show() + directory = getattr(self, 'directory', None) + if not directory: + directory = os.path.dirname(self.wt.abspath(self.wtpath)) + self._filechooser_dialog.set_current_folder(directory) + self._source.pack_start(self._filechooser, True, True, 0) + self.vbox.pack_start(self._source, True, True, 5) + self._source.show() + + def _on_custom_source(self): + """ Merge from a custom source (can be folder, remote, etc), create entry """ + self._source = gtk.HBox() + self._custom_entry = gtk.Entry() + if self.default_branch_path: + self._custom_entry.set_text(self.default_branch_path) + self._custom_entry.connect("activate", self._on_merge_clicked) + self._custom_entry.show() + self._source.pack_start(self._custom_entry, True, True, 0) + self.vbox.pack_start(self._source, True, True, 5) + self._source.show() + + def _on_combo_changed(self, widget): + merge_source = self._combo_source.get_active() + self._source.destroy() + if merge_source == 0: + # Merge from folder + self._on_folder_source() + elif merge_source == 1: + # Merge from custom + self._on_custom_source() + @show_bzr_error def _on_merge_clicked(self, widget): - branch = self._filechooser.get_filename() + merge_source = self._combo_source.get_active() + if merge_source == 0: + branch = self._filechooser.get_filename() + elif merge_source == 1: + branch = self._custom_entry.get_text() if branch == "": error_dialog(_i18n('Branch not given'), _i18n('Please specify a branch to merge from.')) # Begin bundle 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 fxdyRThQkGv274M=
signature.asc
Description: OpenPGP digital signature
-- bzr-gtk mailing list [email protected] Modify settings or unsubscribe at: https://lists.canonical.com/mailman/listinfo/bzr-gtk
