From 5af7e8e8c242aabf3a65d317f833aee5396bc545 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Mon, 8 Jun 2015 10:11:11 -0700 Subject: [PATCH] pull-local: Support --depth option Like pull, allow pull-local to mirror another another repository by specifying how many parents to traverse. https://bugzilla.gnome.org/show_bug.cgi?id=750581 --- Makefile-tests.am | 1 + src/ostree/ot-builtin-pull-local.c | 4 +++ tests/test-local-pull-depth.sh | 52 ++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100755 tests/test-local-pull-depth.sh diff --git a/Makefile-tests.am b/Makefile-tests.am index a7829893..cce78f39 100644 --- a/Makefile-tests.am +++ b/Makefile-tests.am @@ -37,6 +37,7 @@ testfiles = test-basic \ test-pull-metalink \ test-pull-summary-sigs \ test-pull-resume \ + test-local-pull-depth \ test-gpg-signed-commit \ test-admin-upgrade-unconfigured \ test-admin-deploy-syslinux \ diff --git a/src/ostree/ot-builtin-pull-local.c b/src/ostree/ot-builtin-pull-local.c index 94db6917..ed87d806 100644 --- a/src/ostree/ot-builtin-pull-local.c +++ b/src/ostree/ot-builtin-pull-local.c @@ -32,10 +32,12 @@ static char *opt_remote; static gboolean opt_disable_fsync; +static int opt_depth = 0; static GOptionEntry options[] = { { "remote", 0, 0, G_OPTION_ARG_STRING, &opt_remote, "Add REMOTE to refspec", "REMOTE" }, { "disable-fsync", 0, 0, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke fsync()", NULL }, + { "depth", 0, 0, G_OPTION_ARG_INT, &opt_depth, "Traverse DEPTH parents (-1=infinite) (default: 0)", "DEPTH" }, { NULL } }; @@ -137,6 +139,8 @@ ostree_builtin_pull_local (int argc, char **argv, GCancellable *cancellable, GEr if (opt_remote) g_variant_builder_add (&builder, "{s@v}", "override-remote-name", g_variant_new_variant (g_variant_new_string (opt_remote))); + g_variant_builder_add (&builder, "{s@v}", "depth", + g_variant_new_variant (g_variant_new_int32 (opt_depth))); if (!ostree_repo_pull_with_options (repo, src_repo_uri, g_variant_builder_end (&builder), diff --git a/tests/test-local-pull-depth.sh b/tests/test-local-pull-depth.sh new file mode 100755 index 00000000..4f8988dc --- /dev/null +++ b/tests/test-local-pull-depth.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# +# Copyright (C) 2015 Dan Nicholson +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +set -e + +. $(dirname $0)/libtest.sh + +setup_test_repository "archive-z2" + +echo "1..1" + +cd ${test_tmpdir} +mkdir repo2 +${CMD_PREFIX} ostree --repo=repo2 init --mode="archive-z2" + +${CMD_PREFIX} ostree --repo=repo2 pull-local repo +find repo2/objects -name '*.commit' | wc -l > commitcount +assert_file_has_content commitcount "^1$" + +${CMD_PREFIX} ostree --repo=repo2 pull-local --depth=0 repo +find repo2/objects -name '*.commit' | wc -l > commitcount +assert_file_has_content commitcount "^1$" + +${CMD_PREFIX} ostree --repo=repo2 pull-local --depth=1 repo +find repo2/objects -name '*.commit' | wc -l > commitcount +assert_file_has_content commitcount "^2$" + +${CMD_PREFIX} ostree --repo=repo2 pull-local --depth=1 repo +find repo2/objects -name '*.commit' | wc -l > commitcount +assert_file_has_content commitcount "^2$" + +${CMD_PREFIX} ostree --repo=repo2 pull-local --depth=-1 repo +find repo2/objects -name '*.commit' | wc -l > commitcount +assert_file_has_content commitcount "^2$" + +echo "ok local pull depth"