[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