From 1057f8289ce5769f9d32cf05efbb6d00406e71a7 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Mon, 20 Aug 2012 22:32:17 +0200 Subject: [PATCH] Don't fail for EPERM when hardlinking As the manual page doesn't say, but the in-code kernel documentation shows, hardlinking for normal users can fail for a variety of reasons (including very common situations such as non regular file or non writable file), if the owner of the file does not match the user linking (e.g. when checking out a shadow repo with a root- owned master). If that happens, fail back silently to copying instead of aborting the whole operation. https://bugzilla.gnome.org/show_bug.cgi?id=682298 --- src/libostree/ostree-repo.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 88781131..200a790e 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -4125,9 +4125,9 @@ checkout_file_hardlink (OstreeRepo *self, if (link (ot_gfile_get_path_cached (source), ot_gfile_get_path_cached (destination)) != -1) ret_was_supported = TRUE; - else if (errno == EMLINK || errno == EXDEV) + else if (errno == EMLINK || errno == EXDEV || errno == EPERM) { - /* EMLINK and EXDEV shouldn't be fatal; we just can't do the + /* EMLINK, EXDEV and EPERM shouldn't be fatal; we just can't do the * optimization of hardlinking instead of copying. */ ret_was_supported = FALSE;