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=

Attachment: 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

Reply via email to