[Pkg-bazaar-commits] ./bzr-gtk/unstable r95: Added pending merges to Commit dialog. Fixed bug #66091.

Szilveszter Farkas (Phanatic) Szilveszter.Farkas at gmail.com
Fri Apr 10 07:49:32 UTC 2009


------------------------------------------------------------
revno: 95
committer: Szilveszter Farkas (Phanatic) <Szilveszter.Farkas at gmail.com>
branch nick: bzr-gtk
timestamp: Sun 2006-10-15 19:47:36 +0200
message:
  Added pending merges to Commit dialog. Fixed bug #66091.
modified:
  olive.glade
  olive/__init__.py
  olive/commit.py
-------------- next part --------------
=== modified file 'olive.glade'
--- a/olive.glade	2006-10-09 21:21:47 +0000
+++ b/olive.glade	2006-10-15 17:47:36 +0000
@@ -670,8 +670,8 @@
 </widget>
 
 <widget class="GtkDialog" id="window_commit">
-  <property name="width_request">400</property>
-  <property name="height_request">400</property>
+  <property name="width_request">500</property>
+  <property name="height_request">500</property>
   <property name="title" translatable="yes">Olive - Commit</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_NONE</property>
@@ -802,7 +802,7 @@
 	<widget class="GtkVPaned" id="vpaned_commit">
 	  <property name="visible">True</property>
 	  <property name="can_focus">True</property>
-	  <property name="position">120</property>
+	  <property name="position">250</property>
 
 	  <child>
 	    <widget class="GtkVBox" id="vbox_commit_select">
@@ -864,6 +864,61 @@
 		  <property name="fill">True</property>
 		</packing>
 	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label_commit_pending">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Pending merges:</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow_commit_pending">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="shadow_type">GTK_SHADOW_NONE</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTreeView" id="treeview_commit_pending">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">True</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
 	    </widget>
 	    <packing>
 	      <property name="shrink">True</property>
@@ -5514,7 +5569,7 @@
 	      <signal name="clicked" handler="on_button_merge_cancel_clicked" last_modification_time="Mon, 09 Oct 2006 13:35:13 GMT"/>
 	    </widget>
 	  </child>
-	  
+
 	  <child>
 	    <widget class="GtkButton" id="button_merge_merge">
 	      <property name="visible">True</property>
@@ -5590,7 +5645,7 @@
 		</widget>
 	      </child>
 	    </widget>
-	  </child>	  
+	  </child>
 	</widget>
 	<packing>
 	  <property name="padding">0</property>

=== modified file 'olive/__init__.py'
--- a/olive/__init__.py	2006-10-09 21:21:47 +0000
+++ b/olive/__init__.py	2006-10-15 17:47:36 +0000
@@ -619,6 +619,7 @@
     def set_sensitivity(self):
         """ Set menu and toolbar sensitivity. """
         self.menuitem_branch_init.set_sensitive(self.notbranch)
+        self.menuitem_branch_get.set_sensitive(self.notbranch)
         self.menuitem_branch_checkout.set_sensitive(self.notbranch)
         self.menuitem_branch_pull.set_sensitive(not self.notbranch)
         self.menuitem_branch_push.set_sensitive(not self.notbranch)

=== modified file 'olive/commit.py'
--- a/olive/commit.py	2006-10-04 19:11:46 +0000
+++ b/olive/commit.py	2006-10-15 17:47:36 +0000
@@ -44,6 +44,8 @@
         self.checkbutton_local = self.glade.get_widget('checkbutton_commit_local')
         self.textview = self.glade.get_widget('textview_commit')
         self.file_view = self.glade.get_widget('treeview_commit_select')
+        self.pending_label = self.glade.get_widget('label_commit_pending')
+        self.pending_view = self.glade.get_widget('treeview_commit_pending')
 
         file_id = self.wt.path2id(wtpath)
 
@@ -56,6 +58,9 @@
         self.old_tree = self.wt.branch.repository.revision_tree(self.wt.branch.last_revision())
         self.delta = self.wt.changes_from(self.old_tree)
         
+        # Get pending merges
+        self.pending = self._pending_merges(self.wt)
+        
         # Dictionary for signal_autoconnect
         dic = { "on_button_commit_commit_clicked": self.commit,
                 "on_button_commit_cancel_clicked": self.close }
@@ -65,6 +70,8 @@
         
         # Create the file list
         self._create_file_view()
+        # Create the pending merges
+        self._create_pending_merges()
     
     def display(self):
         """ Display the Push dialog. """
@@ -77,6 +84,13 @@
                 # we have a checkout, so the local commit checkbox must appear
                 self.checkbutton_local.show()
             
+            if self.pending:
+                # There are pending merges, file selection not supported
+                self.file_view.set_sensitive(False)
+            else:
+                # No pending merges
+                self.pending_view.set_sensitive(False)
+            
             self.textview.modify_font(pango.FontDescription("Monospace"))
             self.window.show()
             
@@ -108,6 +122,27 @@
         for path, id, kind, text_modified, meta_modified in self.delta.modified:
             self.file_store.append([ True, path, _('modified') ])
     
+    def _create_pending_merges(self):
+        liststore = gtk.ListStore(gobject.TYPE_STRING,
+                                  gobject.TYPE_STRING,
+                                  gobject.TYPE_STRING)
+        self.pending_view.set_model(liststore)
+        
+        self.pending_view.append_column(gtk.TreeViewColumn(_('Date'),
+                                        gtk.CellRendererText(), text=0))
+        self.pending_view.append_column(gtk.TreeViewColumn(_('Committer'),
+                                        gtk.CellRendererText(), text=1))
+        self.pending_view.append_column(gtk.TreeViewColumn(_('Summary'),
+                                        gtk.CellRendererText(), text=2))
+        
+        if not self.pending:
+            return
+        
+        for item in self.pending:
+            liststore.append([ item['date'],
+                               item['committer'],
+                               item['summary'] ])
+    
     def _get_specific_files(self):
         ret = []
         it = self.file_store.get_iter_first()
@@ -122,6 +157,70 @@
         model[path][0] = not model[path][0]
         return
     
+    def _pending_merges(self, wt):
+        """ Return a list of pending merges or None if there are none of them. """
+        parents = wt.get_parent_ids()
+        if len(parents) < 2:
+            return None
+        
+        import re
+        from bzrlib.osutils import format_date
+        
+        pending = parents[1:]
+        branch = wt.branch
+        last_revision = parents[0]
+        
+        if last_revision is not None:
+            try:
+                ignore = set(branch.repository.get_ancestry(last_revision))
+            except errors.NoSuchRevision:
+                # the last revision is a ghost : assume everything is new 
+                # except for it
+                ignore = set([None, last_revision])
+        else:
+            ignore = set([None])
+        
+        pm = []
+        for merge in pending:
+            ignore.add(merge)
+            try:
+                m_revision = branch.repository.get_revision(merge)
+                
+                rev = {}
+                rev['committer'] = re.sub('<.*@.*>', '', m_revision.committer).strip(' ')
+                rev['summary'] = m_revision.get_summary()
+                rev['date'] = format_date(m_revision.timestamp,
+                                          m_revision.timezone or 0, 
+                                          'original', date_fmt="%Y-%m-%d",
+                                          show_offset=False)
+                
+                pm.append(rev)
+                
+                inner_merges = branch.repository.get_ancestry(merge)
+                assert inner_merges[0] is None
+                inner_merges.pop(0)
+                inner_merges.reverse()
+                for mmerge in inner_merges:
+                    if mmerge in ignore:
+                        continue
+                    mm_revision = branch.repository.get_revision(mmerge)
+                    
+                    rev = {}
+                    rev['committer'] = re.sub('<.*@.*>', '', mm_revision.committer).strip(' ')
+                    rev['summary'] = mm_revision.get_summary()
+                    rev['date'] = format_date(mm_revision.timestamp,
+                                              mm_revision.timezone or 0, 
+                                              'original', date_fmt="%Y-%m-%d",
+                                              show_offset=False)
+                
+                    pm.append(rev)
+                    
+                    ignore.add(mmerge)
+            except errors.NoSuchRevision:
+                print "DEBUG: NoSuchRevision:", merge
+        
+        return pm
+
     def commit(self, widget):
         textbuffer = self.textview.get_buffer()
         start, end = textbuffer.get_bounds()
@@ -130,7 +229,10 @@
         checkbutton_strict = self.glade.get_widget('checkbutton_commit_strict')
         checkbutton_force = self.glade.get_widget('checkbutton_commit_force')
         
-        specific_files = self._get_specific_files()
+        if not self.pending:
+            specific_files = self._get_specific_files()
+        else:
+            specific_files = None
         
         try:
             self.wt.commit(message, 



More information about the Pkg-bazaar-commits mailing list