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
This commit is contained in:
Giovanni Campagna 2012-08-20 22:32:17 +02:00
parent 1d93a743dc
commit 1057f8289c

View File

@ -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;