Drop refs/summary
I'm not aware of anyone using this, and it's not efficient to write a whole file every time a ref changes, plus it's not atomic.
This commit is contained in:
parent
a30fcba273
commit
8dd7b5575e
|
|
@ -1109,60 +1109,6 @@ on_metadata_objects_to_fetch_ready (gint fd,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
parse_ref_summary (const char *contents,
|
|
||||||
GHashTable **out_refs,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
gboolean ret = FALSE;
|
|
||||||
gs_unref_hashtable GHashTable *ret_refs = NULL;
|
|
||||||
char **lines = NULL;
|
|
||||||
char **iter = NULL;
|
|
||||||
char *ref = NULL;
|
|
||||||
char *sha256 = NULL;
|
|
||||||
|
|
||||||
ret_refs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
|
|
||||||
|
|
||||||
lines = g_strsplit_set (contents, "\n", -1);
|
|
||||||
for (iter = lines; *iter; iter++)
|
|
||||||
{
|
|
||||||
const char *line = *iter;
|
|
||||||
const char *spc;
|
|
||||||
|
|
||||||
if (!*line)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
spc = strchr (line, ' ');
|
|
||||||
if (!spc)
|
|
||||||
{
|
|
||||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
|
||||||
"Invalid ref summary file; missing ' ' in line");
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (ref);
|
|
||||||
ref = g_strdup (spc + 1);
|
|
||||||
if (!ostree_validate_rev (ref, error))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
g_free (sha256);
|
|
||||||
sha256 = g_strndup (line, spc - line);
|
|
||||||
if (!ostree_validate_checksum_string (sha256, error))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
g_hash_table_replace (ret_refs, ref, sha256);
|
|
||||||
/* Transfer ownership */
|
|
||||||
ref = NULL;
|
|
||||||
sha256 = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = TRUE;
|
|
||||||
ot_transfer_out_value (out_refs, &ret_refs);
|
|
||||||
out:
|
|
||||||
g_strfreev (lines);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
repo_get_string_key_inherit (OstreeRepo *repo,
|
repo_get_string_key_inherit (OstreeRepo *repo,
|
||||||
const char *section,
|
const char *section,
|
||||||
|
|
@ -1314,7 +1260,6 @@ ostree_repo_pull (OstreeRepo *self,
|
||||||
gs_free char *remote_key = NULL;
|
gs_free char *remote_key = NULL;
|
||||||
gs_free char *path = NULL;
|
gs_free char *path = NULL;
|
||||||
gs_free char *baseurl = NULL;
|
gs_free char *baseurl = NULL;
|
||||||
gs_free char *summary_data = NULL;
|
|
||||||
gs_unref_hashtable GHashTable *requested_refs_to_fetch = NULL;
|
gs_unref_hashtable GHashTable *requested_refs_to_fetch = NULL;
|
||||||
gs_unref_hashtable GHashTable *updated_refs = NULL;
|
gs_unref_hashtable GHashTable *updated_refs = NULL;
|
||||||
gs_unref_hashtable GHashTable *commits_to_fetch = NULL;
|
gs_unref_hashtable GHashTable *commits_to_fetch = NULL;
|
||||||
|
|
@ -1322,7 +1267,6 @@ ostree_repo_pull (OstreeRepo *self,
|
||||||
GSource *queue_src = NULL;
|
GSource *queue_src = NULL;
|
||||||
OtPullData pull_data_real = { 0, };
|
OtPullData pull_data_real = { 0, };
|
||||||
OtPullData *pull_data = &pull_data_real;
|
OtPullData *pull_data = &pull_data_real;
|
||||||
SoupURI *summary_uri = NULL;
|
|
||||||
GKeyFile *config = NULL;
|
GKeyFile *config = NULL;
|
||||||
GKeyFile *remote_config = NULL;
|
GKeyFile *remote_config = NULL;
|
||||||
char **configured_branches = NULL;
|
char **configured_branches = NULL;
|
||||||
|
|
@ -1428,72 +1372,27 @@ ostree_repo_pull (OstreeRepo *self,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GError *temp_error = NULL;
|
char **branches_iter;
|
||||||
gboolean fetch_all_refs;
|
|
||||||
|
|
||||||
configured_branches = g_key_file_get_string_list (config, remote_key, "branches", NULL, &temp_error);
|
configured_branches = g_key_file_get_string_list (config, remote_key, "branches", NULL, NULL);
|
||||||
if (configured_branches == NULL && temp_error != NULL)
|
branches_iter = configured_branches;
|
||||||
|
|
||||||
|
if (!(branches_iter && *branches_iter))
|
||||||
{
|
{
|
||||||
if (g_error_matches (temp_error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_KEY_NOT_FOUND))
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
|
||||||
{
|
"No configured branches for remote %s", pull_data->remote_name);
|
||||||
g_clear_error (&temp_error);
|
goto out;
|
||||||
fetch_all_refs = TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_propagate_error (error, temp_error);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
for (;branches_iter && *branches_iter; branches_iter++)
|
||||||
fetch_all_refs = FALSE;
|
|
||||||
|
|
||||||
if (fetch_all_refs)
|
|
||||||
{
|
{
|
||||||
summary_uri = soup_uri_copy (pull_data->base_uri);
|
const char *branch = *branches_iter;
|
||||||
path = g_build_filename (soup_uri_get_path (summary_uri), "refs", "summary", NULL);
|
char *contents;
|
||||||
soup_uri_set_path (summary_uri, path);
|
|
||||||
|
|
||||||
if (!fetch_uri_contents_utf8_sync (pull_data, summary_uri, &summary_data, cancellable, error))
|
if (!fetch_ref_contents (pull_data, branch, &contents, cancellable, error))
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!parse_ref_summary (summary_data, &requested_refs_to_fetch, error))
|
/* Transfer ownership of contents */
|
||||||
goto out;
|
g_hash_table_insert (requested_refs_to_fetch, g_strdup (branch), contents);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char **branches_iter = configured_branches;
|
|
||||||
|
|
||||||
if (!(branches_iter && *branches_iter))
|
|
||||||
g_print ("No configured branches for remote %s\n", pull_data->remote_name);
|
|
||||||
for (;branches_iter && *branches_iter; branches_iter++)
|
|
||||||
{
|
|
||||||
const char *branch = *branches_iter;
|
|
||||||
char *contents;
|
|
||||||
GVariant *descriptor_data = NULL;
|
|
||||||
|
|
||||||
if (!fetch_ref_contents (pull_data, branch, &contents, cancellable, error))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
initiate_commit_scan (pull_data, contents);
|
|
||||||
#if 0
|
|
||||||
if (!request_static_delta_meta_sync (pull_data, branch, contents,
|
|
||||||
&descriptor_data, cancellable, error))
|
|
||||||
goto out;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!descriptor_data)
|
|
||||||
{
|
|
||||||
/* Transfer ownership of contents */
|
|
||||||
g_hash_table_insert (requested_refs_to_fetch, g_strdup (branch), contents);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Transfer ownership of delta descriptor */
|
|
||||||
g_ptr_array_add (pull_data->static_delta_metas, descriptor_data);
|
|
||||||
g_free (contents);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1616,7 +1515,5 @@ ostree_repo_pull (OstreeRepo *self,
|
||||||
g_clear_pointer (&pull_data->requested_content, (GDestroyNotify) g_hash_table_unref);
|
g_clear_pointer (&pull_data->requested_content, (GDestroyNotify) g_hash_table_unref);
|
||||||
g_clear_pointer (&pull_data->requested_metadata, (GDestroyNotify) g_hash_table_unref);
|
g_clear_pointer (&pull_data->requested_metadata, (GDestroyNotify) g_hash_table_unref);
|
||||||
g_clear_pointer (&remote_config, (GDestroyNotify) g_key_file_unref);
|
g_clear_pointer (&remote_config, (GDestroyNotify) g_key_file_unref);
|
||||||
if (summary_uri)
|
|
||||||
soup_uri_free (summary_uri);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -570,50 +570,6 @@ ostree_repo_list_refs (OstreeRepo *self,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
write_ref_summary (OstreeRepo *self,
|
|
||||||
GCancellable *cancellable,
|
|
||||||
GError **error)
|
|
||||||
{
|
|
||||||
gboolean ret = FALSE;
|
|
||||||
GHashTableIter hash_iter;
|
|
||||||
gpointer key, value;
|
|
||||||
gsize bytes_written;
|
|
||||||
gs_unref_hashtable GHashTable *all_refs = NULL;
|
|
||||||
gs_unref_object GFile *summary_path = NULL;
|
|
||||||
gs_unref_object GOutputStream *out = NULL;
|
|
||||||
gs_free char *buf = NULL;
|
|
||||||
|
|
||||||
if (!ostree_repo_list_refs (self, NULL, &all_refs, cancellable, error))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
summary_path = g_file_resolve_relative_path (ostree_repo_get_path (self),
|
|
||||||
"refs/summary");
|
|
||||||
|
|
||||||
out = (GOutputStream*) g_file_replace (summary_path, NULL, FALSE, 0, cancellable, error);
|
|
||||||
if (!out)
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
g_hash_table_iter_init (&hash_iter, all_refs);
|
|
||||||
while (g_hash_table_iter_next (&hash_iter, &key, &value))
|
|
||||||
{
|
|
||||||
const char *name = key;
|
|
||||||
const char *sha256 = value;
|
|
||||||
|
|
||||||
g_free (buf);
|
|
||||||
buf = g_strdup_printf ("%s %s\n", sha256, name);
|
|
||||||
if (!g_output_stream_write_all (out, buf, strlen (buf), &bytes_written, cancellable, error))
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!g_output_stream_close (out, cancellable, error))
|
|
||||||
goto out;
|
|
||||||
|
|
||||||
ret = TRUE;
|
|
||||||
out:
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
write_refspec (OstreeRepo *self,
|
write_refspec (OstreeRepo *self,
|
||||||
const char *refspec,
|
const char *refspec,
|
||||||
|
|
@ -683,12 +639,6 @@ _ostree_repo_update_refs (OstreeRepo *self,
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->mode == OSTREE_REPO_MODE_ARCHIVE_Z2)
|
|
||||||
{
|
|
||||||
if (!write_ref_summary (self, cancellable, error))
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue