diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | ranger/core/loader.py | 2 | ||||
-rw-r--r-- | ranger/ext/shutil_generatorized.py | 13 |
3 files changed, 10 insertions, 7 deletions
diff --git a/Makefile b/Makefile index 6c31bb0f..1ed19c64 100644 --- a/Makefile +++ b/Makefile @@ -58,7 +58,7 @@ doc: cleandoc $(PYTHON) -c 'import pydoc, sys; \ sys.path[0] = "$(CWD)"; \ pydoc.writedocs("$(CWD)")' - find . -name \*.html -exec sed -i 's|'$(CWD)'|../..|g' -- {} \; + find . -name \*.html -exec sed -i 's|'"$(CWD)"'|../..|g' -- {} \; test: @for FILE in $(shell grep -IHm 1 doctest -r ranger | grep $(FILTER) | cut -d: -f1); do \ diff --git a/ranger/core/loader.py b/ranger/core/loader.py index 17d6bf09..3ba5b128 100644 --- a/ranger/core/loader.py +++ b/ranger/core/loader.py @@ -59,6 +59,8 @@ class CopyLoader(Loadable, FileManagerAware): stack = [f.path for f in self.copy_buffer] while stack: fname = stack.pop() + if os.path.islink(fname): + continue if os.path.isdir(fname): stack.extend([join(fname, item) for item in os.listdir(fname)]) else: diff --git a/ranger/ext/shutil_generatorized.py b/ranger/ext/shutil_generatorized.py index 38e506a2..b20d5cef 100644 --- a/ranger/ext/shutil_generatorized.py +++ b/ranger/ext/shutil_generatorized.py @@ -79,7 +79,7 @@ def copyfile(src, dst): def copystat(src, dst): """Copy all stat info (mode bits, atime, mtime, flags) from src to dst""" - st = os.stat(src) + st = os.lstat(src) mode = stat.S_IMODE(st.st_mode) if hasattr(os, 'utime'): try: os.utime(dst, (st.st_atime, st.st_mtime)) @@ -103,6 +103,8 @@ def copy2(src, dst, overwrite=False, symlinks=False): dst = get_safe_path(dst) if symlinks and os.path.islink(src): linkto = os.readlink(src) + if overwrite and os.path.lexists(dst): + os.unlink(dst) os.symlink(linkto, dst) else: for _ in copyfile(src, dst): @@ -171,11 +173,10 @@ def copytree(src, dst, symlinks=False, ignore=None, overwrite=False): try: if symlinks and os.path.islink(srcname): linkto = os.readlink(srcname) - if os.path.lexists(dstname): - if not os.path.islink(dstname) \ - or os.readlink(dstname) != linkto: - os.unlink(dstname) - os.symlink(linkto, dstname) + if overwrite and os.path.lexists(dstname): + os.unlink(dstname) + os.symlink(linkto, dstname) + copystat(srcname, dstname) elif os.path.isdir(srcname): for _ in copytree(srcname, dstname, symlinks, ignore, overwrite): |