[meld] Render directories in flattened mode if required (bgo#701970)
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld] Render directories in flattened mode if required (bgo#701970)
- Date: Sat, 24 May 2014 20:52:31 +0000 (UTC)
commit 2f3b937977e6f8e5baf166cee8cad33649584934
Author: Louis des Landes <louis psykar com>
Date: Tue May 20 00:09:12 2014 +1000
Render directories in flattened mode if required (bgo#701970)
meld/tree.py | 6 ++++++
meld/vcview.py | 14 +++++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
---
diff --git a/meld/tree.py b/meld/tree.py
index 0e18df6..fbd1ee7 100644
--- a/meld/tree.py
+++ b/meld/tree.py
@@ -116,6 +116,12 @@ class DiffTreeStore(Gtk.TreeStore):
path = path.decode('utf8')
return path
+ def is_folder(self, it, pane, path):
+ # A folder may no longer exist, and is only tracked by VC.
+ # Therefore, check the icon instead, as the pane already knows.
+ icon = self.get_value(it, self.column_index(COL_ICON, pane))
+ return icon == "folder" or os.path.isdir(path)
+
def column_index(self, col, pane):
return self.ntree * col + pane
diff --git a/meld/vcview.py b/meld/vcview.py
index fb26624..6be3757 100644
--- a/meld/vcview.py
+++ b/meld/vcview.py
@@ -437,7 +437,7 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
entries = self.vc.listdir(path)
entries = [e for e in entries if any(f(e) for f in filters)]
for e in entries:
- if e.isdir:
+ if e.isdir and e.state != tree.STATE_REMOVED:
try:
st = os.lstat(e.path)
# Covers certain unreadable symlink cases; see bgo#585895
@@ -454,6 +454,11 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
if flattened:
if e.state != tree.STATE_IGNORED:
+ # If directory state is changed, render it in
+ # in flattened mode.
+ if e.state != tree.STATE_NORMAL:
+ child = self.model.add_entries(it, [e.path])
+ self._update_item_state(child, e, path[prefixlen:])
todo.append((Gtk.TreePath.new_first(), e.path))
continue
@@ -491,7 +496,8 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
self.treeview.expand_row(path, False)
else:
path = self.model.value_path(it, 0)
- self.run_diff(path)
+ if not self.model.is_folder(it, 0, path):
+ self.run_diff(path)
def run_diff(self, path):
if os.path.isdir(path):
@@ -505,7 +511,9 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
'prompt_resolve': False,
}
- if self.vc.get_entry(path).state == tree.STATE_CONFLICT and \
+ # May have removed directories in list.
+ vc_entry = self.vc.get_entry(path)
+ if vc_entry and vc_entry.state == tree.STATE_CONFLICT and \
hasattr(self.vc, 'get_path_for_conflict'):
local_label = _(u"%s — local") % basename
remote_label = _(u"%s — remote") % basename
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]