/b-gtk/fix-viz

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/b-gtk/fix-viz

« back to all changes in this revision

Viewing changes to commit.py

  • Committer: Vincent Ladeuil
  • Date: 2009-05-27 18:42:15 UTC
  • mto: This revision was merged to the branch mainline in revision 640.
  • Revision ID: v.ladeuil+lp@free.fr-20090527184215-momk8fjl4we538lc
Land Anne Mohsen's patch for bug 215674.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
from bzrlib import errors, osutils
31
31
from bzrlib.trace import mutter
32
32
from bzrlib.util import bencode
 
33
try:
 
34
    from bzrlib.uncommit import SavedCommitMessagesManager
 
35
except ImportError: # old bzrlib
 
36
    can_save_commit_messages = False
 
37
else:
 
38
    can_save_commit_messages = True
33
39
 
34
40
from bzrlib.plugins.gtk import _i18n
35
41
from bzrlib.plugins.gtk.dialog import question_dialog
109
115
 
110
116
    def __init__(self, wt, selected=None, parent=None):
111
117
        gtk.Dialog.__init__(self, title="Commit to %s" % wt.basedir,
112
 
                                  parent=parent,
113
 
                                  flags=0,
114
 
                                  buttons=(gtk.STOCK_CANCEL,
115
 
                                           gtk.RESPONSE_CANCEL))
 
118
                            parent=parent, flags=0,)
 
119
        self.connect('delete-event', self._on_delete_window)
116
120
        self._question_dialog = question_dialog
117
 
        
 
121
 
118
122
        self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_NORMAL)
119
123
 
120
124
        self._wt = wt
124
128
        self._enable_per_file_commits = True
125
129
        self._commit_all_changes = True
126
130
        self.committed_revision_id = None # Nothing has been committed yet
 
131
        if can_save_commit_messages:
 
132
            self._saved_commit_messages_manager = SavedCommitMessagesManager(self._wt, self._wt.branch)
127
133
 
128
134
        self.setup_params()
129
135
        self.construct()
198
204
        self._basis_tree.lock_read()
199
205
        try:
200
206
            from diff import iter_changes_to_status
 
207
            if can_save_commit_messages:
 
208
                saved_file_messages = self._saved_commit_messages_manager.get()[1]
 
209
            else:
 
210
                saved_file_messages = {}
201
211
            for (file_id, real_path, change_type, display_path
202
212
                ) in iter_changes_to_status(self._basis_tree, self._wt):
203
213
                if self._selected and real_path != self._selected:
204
214
                    enabled = False
205
215
                else:
206
216
                    enabled = True
 
217
                try:
 
218
                    default_message = saved_file_messages[file_id]
 
219
                except KeyError:
 
220
                    default_message = ''
207
221
                item_iter = store.append([
208
222
                    file_id,
209
223
                    real_path.encode('UTF-8'),
210
224
                    enabled,
211
225
                    display_path.encode('UTF-8'),
212
226
                    change_type,
213
 
                    '', # Initial comment
 
227
                    default_message, # Initial comment
214
228
                    ])
215
229
                if self._selected and enabled:
216
230
                    initial_cursor = store.get_path(item_iter)
348
362
        self._hpane.pack2(self._right_pane_table, resize=True, shrink=True)
349
363
 
350
364
    def _construct_action_pane(self):
 
365
        self._button_cancel = gtk.Button(stock=gtk.STOCK_CANCEL)
 
366
        self._button_cancel.connect('clicked', self._on_cancel_clicked)
 
367
        self._button_cancel.show()
 
368
        self.action_area.pack_end(self._button_cancel)
351
369
        self._button_commit = gtk.Button(_i18n("Comm_it"), use_underline=True)
352
370
        self._button_commit.connect('clicked', self._on_commit_clicked)
353
371
        self._button_commit.set_flags(gtk.CAN_DEFAULT)
549
567
        scroller.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
550
568
 
551
569
        self._global_message_text_view = gtk.TextView()
 
570
        if can_save_commit_messages:
 
571
            self._set_global_commit_message(self._saved_commit_messages_manager.get()[0])
552
572
        self._global_message_text_view.modify_font(pango.FontDescription("Monospace"))
553
573
        scroller.add(self._global_message_text_view)
554
574
        scroller.set_shadow_type(gtk.SHADOW_IN)
655
675
            return files, []
656
676
 
657
677
    @show_bzr_error
 
678
    def _on_cancel_clicked(self, button):
 
679
        """ Cancel button clicked handler. """
 
680
        self._do_cancel()
 
681
 
 
682
    @show_bzr_error
 
683
    def _on_delete_window(self, source, event):
 
684
        """ Delete window handler. """
 
685
        self._do_cancel()
 
686
 
 
687
    def _do_cancel(self):
 
688
        """If requested, saves commit messages when cancelling gcommit; they are re-used by a next gcommit"""
 
689
        if can_save_commit_messages:
 
690
            self._saved_commit_messages_manager = SavedCommitMessagesManager()
 
691
            self._saved_commit_messages_manager.insert(self._get_global_commit_message(),
 
692
                                                       self._get_specific_files()[1])
 
693
            if self._saved_commit_messages_manager.is_not_empty(): # maybe worth saving
 
694
                response = question_dialog(_i18n('Commit cancelled'),
 
695
                                           _i18n('Do you want to save your commit messages ?'),
 
696
                                           parent=self)
 
697
                if response == gtk.RESPONSE_NO:
 
698
                     # save nothing and destroy old comments if any
 
699
                    self._saved_commit_messages_manager = SavedCommitMessagesManager()
 
700
            self._saved_commit_messages_manager.save(self._wt, self._wt.branch)
 
701
        self.response(gtk.RESPONSE_CANCEL) # close window
 
702
 
 
703
    @show_bzr_error
658
704
    def _on_commit_clicked(self, button):
659
705
        """ Commit button clicked handler. """
660
706
        self._do_commit()
718
764
                               specific_files=specific_files,
719
765
                               revprops=revprops)
720
766
        self.committed_revision_id = rev_id
 
767
        # destroy old comments if any
 
768
        if can_save_commit_messages:
 
769
            SavedCommitMessagesManager().save(self._wt, self._wt.branch)
721
770
        self.response(gtk.RESPONSE_OK)
722
771
 
723
772
    def _get_global_commit_message(self):