[ostree] core: Add a config file with repo version
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] core: Add a config file with repo version
- Date: Thu, 27 Oct 2011 02:21:54 +0000 (UTC)
commit ac99188c2306b32e753adcecced5c9aaa9c90b48
Author: Colin Walters <walters verbum org>
Date: Wed Oct 26 22:21:00 2011 -0400
core: Add a config file with repo version
This should let us expand later.
src/libostree/ostree-repo.c | 39 ++++++++++++++++++++++++++++++++++++---
src/ot-builtin-init.c | 20 ++++++++++++++++++++
2 files changed, 56 insertions(+), 3 deletions(-)
---
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 2fbe308..cdebeb8 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -58,9 +58,12 @@ struct _OstreeRepoPrivate {
GFile *repo_file;
char *head_ref_path;
char *objects_path;
+ char *config_path;
gboolean inited;
char *current_head;
+
+ GKeyFile *config;
};
static void
@@ -73,7 +76,10 @@ ostree_repo_finalize (GObject *object)
g_clear_object (&priv->repo_file);
g_free (priv->head_ref_path);
g_free (priv->objects_path);
+ g_free (priv->config_path);
g_free (priv->current_head);
+ if (priv->config)
+ g_key_file_free (priv->config);
G_OBJECT_CLASS (ostree_repo_parent_class)->finalize (object);
}
@@ -138,6 +144,7 @@ ostree_repo_constructor (GType gtype,
priv->head_ref_path = g_build_filename (priv->path, "HEAD", NULL);
priv->objects_path = g_build_filename (priv->path, "objects", NULL);
+ priv->config_path = g_build_filename (priv->path, "config", NULL);
return object;
}
@@ -231,6 +238,8 @@ gboolean
ostree_repo_check (OstreeRepo *self, GError **error)
{
OstreeRepoPrivate *priv = GET_PRIVATE (self);
+ gboolean ret = FALSE;
+ char *version = NULL;;
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
@@ -241,12 +250,36 @@ ostree_repo_check (OstreeRepo *self, GError **error)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Couldn't find objects directory '%s'", priv->objects_path);
- return FALSE;
+ goto out;
}
- priv->inited = TRUE;
+ if (!parse_checksum_file (self, priv->head_ref_path, &priv->current_head, error))
+ goto out;
+
+ priv->config = g_key_file_new ();
+ if (!g_key_file_load_from_file (priv->config, priv->config_path, 0, error))
+ {
+ g_prefix_error (error, "Couldn't parse config file: ");
+ goto out;
+ }
+
+ version = g_key_file_get_value (priv->config, "core", "repo_version", error);
+ if (!version)
+ goto out;
- return parse_checksum_file (self, priv->head_ref_path, &priv->current_head, error);
+ if (strcmp (version, "0") != 0)
+ {
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ "Invalid repository version '%s'", version);
+ goto out;
+ }
+
+ priv->inited = TRUE;
+
+ ret = TRUE;
+ out:
+ g_free (version);
+ return ret;
}
static gboolean
diff --git a/src/ot-builtin-init.c b/src/ot-builtin-init.c
index 7e952af..926eee7 100644
--- a/src/ot-builtin-init.c
+++ b/src/ot-builtin-init.c
@@ -32,6 +32,10 @@ static GOptionEntry options[] = {
{ NULL }
};
+#define DEFAULT_CONFIG_CONTENTS ("[core]\n" \
+ "repo_version=0\n")
+
+
gboolean
ostree_builtin_init (int argc, char **argv, const char *prefix, GError **error)
{
@@ -39,8 +43,10 @@ ostree_builtin_init (int argc, char **argv, const char *prefix, GError **error)
gboolean ret = FALSE;
char *otdir_path = NULL;
char *objects_path = NULL;
+ char *config_path = NULL;
GFile *otdir = NULL;
GFile *objects_dir = NULL;
+ GFile *configf = NULL;
context = g_option_context_new ("- Initialize a new empty repository");
g_option_context_add_main_entries (context, options, NULL);
@@ -55,12 +61,26 @@ ostree_builtin_init (int argc, char **argv, const char *prefix, GError **error)
objects_dir = g_file_new_for_path (objects_path);
if (!g_file_make_directory (objects_dir, NULL, error))
goto out;
+
+ config_path = g_build_filename (repo_path, "config", NULL);
+ configf = g_file_new_for_path (config_path);
+
+ if (!g_file_replace_contents (configf,
+ DEFAULT_CONFIG_CONTENTS,
+ strlen (DEFAULT_CONFIG_CONTENTS),
+ NULL, FALSE, 0, NULL,
+ NULL, error))
+ goto out;
ret = TRUE;
out:
if (context)
g_option_context_free (context);
g_free (otdir_path);
+ g_free (objects_path);
+ g_free (config_path);
g_clear_object (&otdir);
+ g_clear_object (&objects_dir);
+ g_clear_object (&configf);
return ret;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]