about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorWojciech Siewierski <wojciech.siewierski@onet.pl>2018-12-19 18:39:43 +0100
committerGitHub <noreply@github.com>2018-12-19 18:39:43 +0100
commit7f20f31379eec35b97c138186d11d0265c9429f3 (patch)
treedc792de0f2ddcbdcd091d93ac3af49740710ef0a
parentbae44ae3c7440c00acf65ba4c26a0fd2a0f78c3a (diff)
parentec048e93fe0a4b7d2079c0af1364574906da9e7f (diff)
downloadranger-7f20f31379eec35b97c138186d11d0265c9429f3.tar.gz
Merge pull request #1408 from husjon/bookmarks-symlink
Added check if bookmark file is a symlink.
-rw-r--r--ranger/container/bookmarks.py8
-rw-r--r--tests/ranger/container/test_bookmarks.py17
2 files changed, 24 insertions, 1 deletions
diff --git a/ranger/container/bookmarks.py b/ranger/container/bookmarks.py
index 59838c00..cbfc541a 100644
--- a/ranger/container/bookmarks.py
+++ b/ranger/container/bookmarks.py
@@ -185,7 +185,13 @@ class Bookmarks(FileManagerAware):
             old_perms = os.stat(self.path)
             os.chown(path_new, old_perms.st_uid, old_perms.st_gid)
             os.chmod(path_new, old_perms.st_mode)
-            os.rename(path_new, self.path)
+
+            if os.path.islink(self.path):
+                target_path = os.path.realpath(self.path)
+                os.rename(path_new, target_path)
+            else:
+                os.rename(path_new, self.path)
+
         except OSError as ex:
             self.fm.notify('Bookmarks error: {0}'.format(str(ex)), bad=True)
             return
diff --git a/tests/ranger/container/test_bookmarks.py b/tests/ranger/container/test_bookmarks.py
index 6fba2a3d..64192c06 100644
--- a/tests/ranger/container/test_bookmarks.py
+++ b/tests/ranger/container/test_bookmarks.py
@@ -56,3 +56,20 @@ def testbookmarks(tmpdir):
         secondstore.update_if_outdated()
     secondstore.update = origupdate
     secondstore.update_if_outdated()
+
+
+def test_bookmark_symlink(tmpdir):
+    # Initialize plain file and symlink paths
+    bookmarkfile_link = tmpdir.join("bookmarkfile")
+    bookmarkfile_orig = tmpdir.join("bookmarkfile.orig")
+
+    # Create symlink pointing towards the original plain file.
+    os.symlink(str(bookmarkfile_orig), str(bookmarkfile_link))
+
+    # Initialize the bookmark file and save the file.
+    bmstore = Bookmarks(str(bookmarkfile_link))
+    bmstore.save()
+
+    # Once saved, the bookmark file should still be a symlink pointing towards the plain file.
+    assert os.path.islink(str(bookmarkfile_link))
+    assert not os.path.islink(str(bookmarkfile_orig))