From 43c875ae74163f83b78bd589f1bfad3a9534d111 Mon Sep 17 00:00:00 2001
From: Giorgos Korfiatis <gkorf@grnet.gr>
Date: Tue, 12 May 2015 14:51:41 +0300
Subject: [PATCH] fix some rename/link errors

---
 agkyra/agkyra/syncer/localfs_client.py | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/agkyra/agkyra/syncer/localfs_client.py b/agkyra/agkyra/syncer/localfs_client.py
index 358e2d9..4a6cfa3 100644
--- a/agkyra/agkyra/syncer/localfs_client.py
+++ b/agkyra/agkyra/syncer/localfs_client.py
@@ -52,8 +52,11 @@ def link_file(src, dest):
     try:
         os.link(src, dest)
     except OSError as e:
-        if e.errno in [OS_FILE_EXISTS, OS_NOT_A_DIR]:
+        if e.errno == OS_FILE_EXISTS:
             raise common.ConflictError("Cannot link, '%s' exists." % dest)
+        if e.errno == OS_NOT_A_DIR:
+            raise common.ConflictError(
+                "Cannot link, missing path for '%s'." % dest)
         if e.errno == OS_NO_FILE_OR_DIR:
             raise DirMissing()
 
@@ -143,7 +146,7 @@ def stat_file(path):
     try:
         return os.lstat(path)
     except OSError as e:
-        if e.errno == OS_NO_FILE_OR_DIR:
+        if e.errno in [OS_NO_FILE_OR_DIR, OS_NOT_A_DIR]:
             return None
         raise
 
@@ -266,7 +269,7 @@ class LocalfsTargetHandle(object):
             logger.info("Hiding file '%s' to '%s'" %
                         (fspath, hidden_path))
         except OSError as e:
-            if e.errno == OS_NO_FILE_OR_DIR:
+            if e.errno in [OS_NO_FILE_OR_DIR, OS_NOT_A_DIR]:
                 self.unregister_hidden_name(hidden_filename)
                 logger.info("File '%s' does not exist" % fspath)
                 return
@@ -391,7 +394,7 @@ class LocalfsSourceHandle(object):
         try:
             os.rename(fspath, stage_path)
         except OSError as e:
-            if e.errno == OS_NO_FILE_OR_DIR:
+            if e.errno in [OS_NO_FILE_OR_DIR, OS_NOT_A_DIR]:
                 logger.info("Source does not exist: '%s'" % fspath)
                 self.unregister_stage_name(stage_filename)
                 return
-- 
GitLab