core: Add --union mode to checkout
This is another step towards ostbuild using this instead of the "compose" builtin.
This commit is contained in:
1 parent
83fb6d56e1
commit
76bc35186e
6 files changed
+210
-21
No files matched your search
@@ -915,6 +915,9 @@ ostree_create_temp_file_from_input (GFile *dir,
|
||||
/* 128 attempts seems reasonable... */
|
||||
for (i = 0; i < 128; i++)
|
||||
{
|
||||
if (g_cancellable_set_error_if_cancelled (cancellable, error))
|
||||
goto out;
|
||||
|
||||
g_free (possible_name);
|
||||
possible_name = subst_xxxxxx (tmp_name->str);
|
||||
g_clear_object (&possible_file);
|
||||
@@ -941,7 +944,7 @@ ostree_create_temp_file_from_input (GFile *dir,
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == 128)
|
||||
if (i >= 128)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Exhausted 128 attempts to create a temporary file");
|
||||
@@ -990,3 +993,64 @@ ostree_create_temp_regular_file (GFile *dir,
|
||||
g_clear_object (&ret_stream);
|
||||
return ret;
|
||||
}
|
||||
|
||||
gboolean
|
||||
ostree_create_temp_hardlink (GFile *dir,
|
||||
GFile *src,
|
||||
const char *prefix,
|
||||
const char *suffix,
|
||||
GFile **out_file,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
gboolean ret = FALSE;
|
||||
GString *tmp_name = NULL;
|
||||
char *possible_name = NULL;
|
||||
GFile *possible_file = NULL;
|
||||
int i = 0;
|
||||
|
||||
tmp_name = create_tmp_string (ot_gfile_get_path_cached (dir),
|
||||
prefix, suffix);
|
||||
|
||||
/* 128 attempts seems reasonable... */
|
||||
for (i = 0; i < 128; i++)
|
||||
{
|
||||
if (g_cancellable_set_error_if_cancelled (cancellable, error))
|
||||
goto out;
|
||||
|
||||
g_free (possible_name);
|
||||
possible_name = subst_xxxxxx (tmp_name->str);
|
||||
g_clear_object (&possible_file);
|
||||
possible_file = g_file_get_child (dir, possible_name);
|
||||
|
||||
if (link (ot_gfile_get_path_cached (src), ot_gfile_get_path_cached (possible_file)) < 0)
|
||||
{
|
||||
if (errno == EEXIST)
|
||||
continue;
|
||||
else
|
||||
{
|
||||
ot_util_set_error_from_errno (error, errno);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i >= 128)
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||
"Exhausted 128 attempts to create a temporary file");
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = TRUE;
|
||||
ot_transfer_out_value(out_file, &possible_file);
|
||||
out:
|
||||
if (tmp_name)
|
||||
g_string_free (tmp_name, TRUE);
|
||||
g_free (possible_name);
|
||||
g_clear_object (&possible_file);
|
||||
return ret;
|
||||
}
|
||||
Reference in new issue
Block a user