/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 olive/commit.py

  • Committer: Szilveszter Farkas (Phanatic)
  • Date: 2006-10-15 17:47:36 UTC
  • Revision ID: Szilveszter.Farkas@gmail.com-20061015174736-d75646de89d5670c
Added pending merges to Commit dialog. Fixed bug #66091.

Show diffs side-by-side

added added

removed removed

Lines of Context:
44
44
        self.checkbutton_local = self.glade.get_widget('checkbutton_commit_local')
45
45
        self.textview = self.glade.get_widget('textview_commit')
46
46
        self.file_view = self.glade.get_widget('treeview_commit_select')
 
47
        self.pending_label = self.glade.get_widget('label_commit_pending')
 
48
        self.pending_view = self.glade.get_widget('treeview_commit_pending')
47
49
 
48
50
        file_id = self.wt.path2id(wtpath)
49
51
 
56
58
        self.old_tree = self.wt.branch.repository.revision_tree(self.wt.branch.last_revision())
57
59
        self.delta = self.wt.changes_from(self.old_tree)
58
60
        
 
61
        # Get pending merges
 
62
        self.pending = self._pending_merges(self.wt)
 
63
        
59
64
        # Dictionary for signal_autoconnect
60
65
        dic = { "on_button_commit_commit_clicked": self.commit,
61
66
                "on_button_commit_cancel_clicked": self.close }
65
70
        
66
71
        # Create the file list
67
72
        self._create_file_view()
 
73
        # Create the pending merges
 
74
        self._create_pending_merges()
68
75
    
69
76
    def display(self):
70
77
        """ Display the Push dialog. """
77
84
                # we have a checkout, so the local commit checkbox must appear
78
85
                self.checkbutton_local.show()
79
86
            
 
87
            if self.pending:
 
88
                # There are pending merges, file selection not supported
 
89
                self.file_view.set_sensitive(False)
 
90
            else:
 
91
                # No pending merges
 
92
                self.pending_view.set_sensitive(False)
 
93
            
80
94
            self.textview.modify_font(pango.FontDescription("Monospace"))
81
95
            self.window.show()
82
96
            
108
122
        for path, id, kind, text_modified, meta_modified in self.delta.modified:
109
123
            self.file_store.append([ True, path, _('modified') ])
110
124
    
 
125
    def _create_pending_merges(self):
 
126
        liststore = gtk.ListStore(gobject.TYPE_STRING,
 
127
                                  gobject.TYPE_STRING,
 
128
                                  gobject.TYPE_STRING)
 
129
        self.pending_view.set_model(liststore)
 
130
        
 
131
        self.pending_view.append_column(gtk.TreeViewColumn(_('Date'),
 
132
                                        gtk.CellRendererText(), text=0))
 
133
        self.pending_view.append_column(gtk.TreeViewColumn(_('Committer'),
 
134
                                        gtk.CellRendererText(), text=1))
 
135
        self.pending_view.append_column(gtk.TreeViewColumn(_('Summary'),
 
136
                                        gtk.CellRendererText(), text=2))
 
137
        
 
138
        if not self.pending:
 
139
            return
 
140
        
 
141
        for item in self.pending:
 
142
            liststore.append([ item['date'],
 
143
                               item['committer'],
 
144
                               item['summary'] ])
 
145
    
111
146
    def _get_specific_files(self):
112
147
        ret = []
113
148
        it = self.file_store.get_iter_first()
122
157
        model[path][0] = not model[path][0]
123
158
        return
124
159
    
 
160
    def _pending_merges(self, wt):
 
161
        """ Return a list of pending merges or None if there are none of them. """
 
162
        parents = wt.get_parent_ids()
 
163
        if len(parents) < 2:
 
164
            return None
 
165
        
 
166
        import re
 
167
        from bzrlib.osutils import format_date
 
168
        
 
169
        pending = parents[1:]
 
170
        branch = wt.branch
 
171
        last_revision = parents[0]
 
172
        
 
173
        if last_revision is not None:
 
174
            try:
 
175
                ignore = set(branch.repository.get_ancestry(last_revision))
 
176
            except errors.NoSuchRevision:
 
177
                # the last revision is a ghost : assume everything is new 
 
178
                # except for it
 
179
                ignore = set([None, last_revision])
 
180
        else:
 
181
            ignore = set([None])
 
182
        
 
183
        pm = []
 
184
        for merge in pending:
 
185
            ignore.add(merge)
 
186
            try:
 
187
                m_revision = branch.repository.get_revision(merge)
 
188
                
 
189
                rev = {}
 
190
                rev['committer'] = re.sub('<.*@.*>', '', m_revision.committer).strip(' ')
 
191
                rev['summary'] = m_revision.get_summary()
 
192
                rev['date'] = format_date(m_revision.timestamp,
 
193
                                          m_revision.timezone or 0, 
 
194
                                          'original', date_fmt="%Y-%m-%d",
 
195
                                          show_offset=False)
 
196
                
 
197
                pm.append(rev)
 
198
                
 
199
                inner_merges = branch.repository.get_ancestry(merge)
 
200
                assert inner_merges[0] is None
 
201
                inner_merges.pop(0)
 
202
                inner_merges.reverse()
 
203
                for mmerge in inner_merges:
 
204
                    if mmerge in ignore:
 
205
                        continue
 
206
                    mm_revision = branch.repository.get_revision(mmerge)
 
207
                    
 
208
                    rev = {}
 
209
                    rev['committer'] = re.sub('<.*@.*>', '', mm_revision.committer).strip(' ')
 
210
                    rev['summary'] = mm_revision.get_summary()
 
211
                    rev['date'] = format_date(mm_revision.timestamp,
 
212
                                              mm_revision.timezone or 0, 
 
213
                                              'original', date_fmt="%Y-%m-%d",
 
214
                                              show_offset=False)
 
215
                
 
216
                    pm.append(rev)
 
217
                    
 
218
                    ignore.add(mmerge)
 
219
            except errors.NoSuchRevision:
 
220
                print "DEBUG: NoSuchRevision:", merge
 
221
        
 
222
        return pm
 
223
 
125
224
    def commit(self, widget):
126
225
        textbuffer = self.textview.get_buffer()
127
226
        start, end = textbuffer.get_bounds()
130
229
        checkbutton_strict = self.glade.get_widget('checkbutton_commit_strict')
131
230
        checkbutton_force = self.glade.get_widget('checkbutton_commit_force')
132
231
        
133
 
        specific_files = self._get_specific_files()
 
232
        if not self.pending:
 
233
            specific_files = self._get_specific_files()
 
234
        else:
 
235
            specific_files = None
134
236
        
135
237
        try:
136
238
            self.wt.commit(message,