[ostree] core: Fix pull to actually download files too
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ostree] core: Fix pull to actually download files too
- Date: Thu, 17 Nov 2011 16:03:36 +0000 (UTC)
commit 8e9b9c59d678f9d8977bb18941c99f1f65327d74
Author: Colin Walters <walters verbum org>
Date: Thu Nov 17 10:40:55 2011 -0500
core: Fix pull to actually download files too
src/libostree/ostree-repo.c | 4 +-
src/libostree/ostree-repo.h | 1 +
src/ostree/ot-builtin-pull.c | 53 ++++++++++++++++++++++++++++++++---------
tests/t0010-pull.sh | 9 ++++++-
4 files changed, 52 insertions(+), 15 deletions(-)
---
diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c
index 516d3e0..2d8e70d 100644
--- a/src/libostree/ostree-repo.c
+++ b/src/libostree/ostree-repo.c
@@ -935,13 +935,13 @@ ostree_repo_store_packfile (OstreeRepo *self,
const char *expected_checksum,
const char *path,
OstreeObjectType objtype,
+ gboolean *did_exist,
GError **error)
{
OstreeRepoPrivate *priv = GET_PRIVATE (self);
gboolean ret = FALSE;
GString *tempfile_path = NULL;
GChecksum *checksum = NULL;
- gboolean did_exist;
tempfile_path = g_string_new (priv->path);
g_string_append_printf (tempfile_path, "/tmp-unpack-%s", expected_checksum);
@@ -960,7 +960,7 @@ ostree_repo_store_packfile (OstreeRepo *self,
if (!ostree_repo_store_object_trusted (self, tempfile_path ? tempfile_path->str : path,
expected_checksum,
objtype,
- TRUE, FALSE, &did_exist, error))
+ TRUE, FALSE, did_exist, error))
goto out;
ret = TRUE;
diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h
index 22bb0e6..b840045 100644
--- a/src/libostree/ostree-repo.h
+++ b/src/libostree/ostree-repo.h
@@ -73,6 +73,7 @@ gboolean ostree_repo_store_packfile (OstreeRepo *self,
const char *expected_checksum,
const char *path,
OstreeObjectType objtype,
+ gboolean *did_exist,
GError **error);
gboolean ostree_repo_store_object_trusted (OstreeRepo *self,
diff --git a/src/ostree/ot-builtin-pull.c b/src/ostree/ot-builtin-pull.c
index a064abd..bcf387b 100644
--- a/src/ostree/ot-builtin-pull.c
+++ b/src/ostree/ot-builtin-pull.c
@@ -29,10 +29,33 @@
#include <libsoup/soup-gnome.h>
+gboolean verbose;
+
static GOptionEntry options[] = {
- { NULL }
+ { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Show more information", NULL },
};
+static void
+log_verbose (const char *fmt,
+ ...) G_GNUC_PRINTF (1, 2);
+
+static void
+log_verbose (const char *fmt,
+ ...)
+{
+ va_list args;
+ char *msg;
+
+ if (!verbose)
+ return;
+
+ va_start (args, fmt);
+
+ msg = g_strdup_vprintf (fmt, args);
+ g_print ("%s\n", msg);
+ g_free (msg);
+}
+
static gboolean
fetch_uri (OstreeRepo *repo,
SoupSession *soup,
@@ -47,17 +70,18 @@ fetch_uri (OstreeRepo *repo,
int fd;
SoupBuffer *buf = NULL;
GFile *tempf = NULL;
+ char *uri_string = NULL;
+ uri_string = soup_uri_to_string (uri, FALSE);
+ log_verbose ("Fetching %s", uri_string);
msg = soup_message_new_from_uri (SOUP_METHOD_GET, uri);
response = soup_session_send_message (soup, msg);
if (response != 200)
{
- char *uri_string = soup_uri_to_string (uri, FALSE);
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
"Failed to retrieve '%s': %d %s",
uri_string, response, msg->reason_phrase);
- g_free (uri_string);
goto out;
}
@@ -82,6 +106,7 @@ fetch_uri (OstreeRepo *repo,
ret = TRUE;
out:
+ g_free (uri_string);
g_free (template);
g_clear_object (&msg);
g_clear_object (&tempf);
@@ -111,7 +136,7 @@ store_object (OstreeRepo *repo,
if (!fetch_uri (repo, soup, obj_uri, &filename, error))
goto out;
- if (!ostree_repo_store_packfile (repo, object, filename, objtype, error))
+ if (!ostree_repo_store_packfile (repo, object, filename, objtype, did_exist, error))
goto out;
ret = TRUE;
@@ -144,7 +169,9 @@ store_tree_recurse (OstreeRepo *repo,
if (!store_object (repo, soup, base_uri, rev, OSTREE_OBJECT_TYPE_META, &did_exist, error))
goto out;
- if (!did_exist)
+ if (did_exist)
+ log_verbose ("Already have tree %s", rev);
+ else
{
if (!ostree_repo_load_variant (repo, rev, &metatype, &tree, error))
goto out;
@@ -158,8 +185,8 @@ store_tree_recurse (OstreeRepo *repo,
}
/* PARSE OSTREE_SERIALIZED_TREE_VARIANT */
- g_variant_get_child (tree, 2, "@a(ss)", &files_variant);
- g_variant_get_child (tree, 3, "@a(sss)", &dirs_variant);
+ files_variant = g_variant_get_child_value (tree, 2);
+ dirs_variant = g_variant_get_child_value (tree, 3);
n = g_variant_n_children (files_variant);
for (i = 0; i < n; i++)
@@ -167,7 +194,7 @@ store_tree_recurse (OstreeRepo *repo,
const char *filename;
const char *checksum;
- g_variant_get_child (files_variant, i, "(ss)", &filename, &checksum);
+ g_variant_get_child (files_variant, i, "(&s&s)", &filename, &checksum);
if (!store_object (repo, soup, base_uri, checksum, OSTREE_OBJECT_TYPE_FILE, &did_exist, error))
goto out;
@@ -180,13 +207,13 @@ store_tree_recurse (OstreeRepo *repo,
const char *tree_checksum;
const char *meta_checksum;
- g_variant_get_child (dirs_variant, i, "(sss)",
+ g_variant_get_child (dirs_variant, i, "(&s&s&s)",
&dirname, &tree_checksum, &meta_checksum);
- if (!store_tree_recurse (repo, soup, base_uri, tree_checksum, error))
+ if (!store_object (repo, soup, base_uri, meta_checksum, OSTREE_OBJECT_TYPE_META, &did_exist, error))
goto out;
- if (!store_object (repo, soup, base_uri, meta_checksum, OSTREE_OBJECT_TYPE_META, &did_exist, error))
+ if (!store_tree_recurse (repo, soup, base_uri, tree_checksum, error))
goto out;
}
}
@@ -219,7 +246,9 @@ store_commit_recurse (OstreeRepo *repo,
if (!store_object (repo, soup, base_uri, rev, OSTREE_OBJECT_TYPE_META, &did_exist, error))
goto out;
- if (!did_exist)
+ if (did_exist)
+ log_verbose ("Already have commit %s", rev);
+ else
{
if (!ostree_repo_load_variant (repo, rev, &metatype, &commit, error))
goto out;
diff --git a/tests/t0010-pull.sh b/tests/t0010-pull.sh
index e05dfa6..6bc7ff6 100755
--- a/tests/t0010-pull.sh
+++ b/tests/t0010-pull.sh
@@ -21,7 +21,7 @@ set -e
. libtest.sh
-echo '1..1'
+echo '1..2'
setup_fake_remote_repo1
cd ${test_tmpdir}
@@ -30,3 +30,10 @@ $OSTREE init
$OSTREE remote add origin $(cat httpd-address)/ostree/gnomerepo
$OSTREE pull origin main
echo "ok pull"
+
+cd ${test_tmpdir}
+$OSTREE checkout origin/main checkout-origin-main
+cd checkout-origin-main
+assert_file_has_content firstfile '^first$'
+assert_file_has_content baz/cow '^moo$'
+echo "ok pull contents"
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]