[meld: 4/63] filediff, meldbuffer: Make BufferData do our writability check



commit 92be30fdff89241890d3ef500bb33bc0a8180946
Author: Kai Willadsen <kai willadsen gmail com>
Date:   Sun Jul 19 08:09:27 2015 +1000

    filediff, meldbuffer: Make BufferData do our writability check

 meld/filediff.py   |   21 ++++-----------------
 meld/meldbuffer.py |   14 +++++++++++++-
 2 files changed, 17 insertions(+), 18 deletions(-)
---
diff --git a/meld/filediff.py b/meld/filediff.py
index 6d68f3a..8ba80ef 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -983,10 +983,7 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
         buf = self.textbuffer[1]
         buf.data.savefile = os.path.abspath(filename)
         buf.data.label = filename
-        writable = True
-        if os.path.exists(buf.data.savefile):
-            writable = os.access(buf.data.savefile, os.W_OK)
-        self.set_buffer_writable(buf, writable)
+        self.update_buffer_writable(buf)
         self.fileentry[1].set_filename(buf.data.savefile)
         self.recompute_label()
 
@@ -1108,26 +1105,16 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
             add_dismissable_msg(
                 pane, Gtk.STOCK_DIALOG_ERROR, primary, err.message)
 
-        def is_writable(gfile):
-            try:
-                info = gfile.query_info(Gio.FILE_ATTRIBUTE_ACCESS_CAN_WRITE, 0, None)
-            except GLib.GError:
-                return False
-            return info.get_attribute_boolean(Gio.FILE_ATTRIBUTE_ACCESS_CAN_WRITE)
-
         buf = loader.get_buffer()
 
-        writable = False
         if success:
-            write_file = Gio.File.new_for_path(buf.data.savefile) if buf.data.savefile else gfile
-            writable = is_writable(write_file)
             buf.data.encoding = loader.get_encoding()
 
             # TODO: Remove handling for mixed newlines in other places, or add
             # mixed newline support to GtkSourceFile.
             buf.data.newlines = loader.get_newline_type()
 
-        self.set_buffer_writable(buf, writable)
+        self.update_buffer_writable(buf)
 
         self.undosequence.checkpoint(buf)
         buf.data.update_mtime()
@@ -1612,8 +1599,8 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
         dialog = patchdialog.PatchDialog(self)
         dialog.run()
 
-    def set_buffer_writable(self, buf, writable):
-        buf.data.writable = writable
+    def update_buffer_writable(self, buf):
+        writable = buf.data.writable
         self.recompute_label()
         index = self.textbuffer.index(buf)
         self.readonlytoggle[index].props.visible = not writable
diff --git a/meld/meldbuffer.py b/meld/meldbuffer.py
index 46d25ba..3236d87 100644
--- a/meld/meldbuffer.py
+++ b/meld/meldbuffer.py
@@ -119,7 +119,6 @@ class MeldBufferData(GObject.GObject):
     def reset(self):
         self.loaded = False
         self.modified = False
-        self.writable = True
         self.editable = True
         self._monitor = None
         self._mtime = None
@@ -185,6 +184,19 @@ class MeldBufferData(GObject.GObject):
         self.update_mtime()
         self._connect_monitor()
 
+    @property
+    def writable(self):
+        path = self.savefile or self._filename
+        if not path:
+            return False
+        gfile = Gio.File.new_for_path(path)
+        try:
+            info = gfile.query_info(
+                Gio.FILE_ATTRIBUTE_ACCESS_CAN_WRITE, 0, None)
+        except GLib.GError:
+            return False
+        return info.get_attribute_boolean(Gio.FILE_ATTRIBUTE_ACCESS_CAN_WRITE)
+
     def update_mtime(self):
         if self._filename:
             gfile = Gio.File.new_for_path(self._filename)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]