[meld] Render directories in flattened mode if required (bgo#701970)



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]