diff options
author | Wojciech Siewierski <wojciech.siewierski@onet.pl> | 2018-12-19 18:39:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-19 18:39:43 +0100 |
commit | 7f20f31379eec35b97c138186d11d0265c9429f3 (patch) | |
tree | dc792de0f2ddcbdcd091d93ac3af49740710ef0a | |
parent | bae44ae3c7440c00acf65ba4c26a0fd2a0f78c3a (diff) | |
parent | ec048e93fe0a4b7d2079c0af1364574906da9e7f (diff) | |
download | ranger-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.py | 8 | ||||
-rw-r--r-- | tests/ranger/container/test_bookmarks.py | 17 |
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)) |