bin/pull-local: Add --commit-metadata-only

It might be "local", but e.g. we may be crossing filesystems. So there
are valid use cases for only wanting to pull the commit metadata with
`pull-local`.

Closes: #1769
Approved by: cgwalters
This commit is contained in:
Jonathan Lebon 2018-10-31 13:32:47 -04:00 committed by Atomic Bot
parent 34a8867749
commit 1dcebe8846
2 changed files with 18 additions and 2 deletions

View File

@ -32,6 +32,7 @@
#include "otutil.h" #include "otutil.h"
static char *opt_remote; static char *opt_remote;
static gboolean opt_commit_only;
static gboolean opt_disable_fsync; static gboolean opt_disable_fsync;
static gboolean opt_untrusted; static gboolean opt_untrusted;
static gboolean opt_bareuseronly_files; static gboolean opt_bareuseronly_files;
@ -46,6 +47,7 @@ static int opt_depth = 0;
*/ */
static GOptionEntry options[] = { static GOptionEntry options[] = {
{ "commit-metadata-only", 0, 0, G_OPTION_ARG_NONE, &opt_commit_only, "Fetch only the commit metadata", NULL },
{ "remote", 0, 0, G_OPTION_ARG_STRING, &opt_remote, "Add REMOTE to refspec", "REMOTE" }, { "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 }, { "disable-fsync", 0, 0, G_OPTION_ARG_NONE, &opt_disable_fsync, "Do not invoke fsync()", NULL },
{ "untrusted", 0, 0, G_OPTION_ARG_NONE, &opt_untrusted, "Verify checksums of local sources (always enabled for HTTP pulls)", NULL }, { "untrusted", 0, 0, G_OPTION_ARG_NONE, &opt_untrusted, "Verify checksums of local sources (always enabled for HTTP pulls)", NULL },
@ -110,6 +112,8 @@ ostree_builtin_pull_local (int argc, char **argv, OstreeCommandInvocation *invoc
pullflags |= OSTREE_REPO_PULL_FLAGS_UNTRUSTED; pullflags |= OSTREE_REPO_PULL_FLAGS_UNTRUSTED;
if (opt_bareuseronly_files) if (opt_bareuseronly_files)
pullflags |= OSTREE_REPO_PULL_FLAGS_BAREUSERONLY_FILES; pullflags |= OSTREE_REPO_PULL_FLAGS_BAREUSERONLY_FILES;
if (opt_commit_only)
pullflags |= OSTREE_REPO_PULL_FLAGS_COMMIT_ONLY;
if (opt_disable_fsync) if (opt_disable_fsync)
ostree_repo_set_disable_fsync (repo, TRUE); ostree_repo_set_disable_fsync (repo, TRUE);

View File

@ -21,7 +21,7 @@
set -euo pipefail set -euo pipefail
echo "1..$((85 + ${extra_basic_tests:-0}))" echo "1..$((86 + ${extra_basic_tests:-0}))"
CHECKOUT_U_ARG="" CHECKOUT_U_ARG=""
CHECKOUT_H_ARGS="-H" CHECKOUT_H_ARGS="-H"
@ -762,7 +762,19 @@ echo "ok subdir noent"
if ! skip_one_without_user_xattrs; then if ! skip_one_without_user_xattrs; then
cd ${test_tmpdir} cd ${test_tmpdir}
mkdir repo3 mkdir repo4
ostree_repo_init repo4 --mode=bare-user
${CMD_PREFIX} ostree --repo=repo4 pull-local --commit-metadata-only repo test2
csum1=$($OSTREE rev-parse test2)
csum2=$(${CMD_PREFIX} ostree --repo=repo4 rev-parse test2)
assert_streq "${csum1}" "${csum2}"
test -f repo4/state/$csum1.commitpartial
echo "ok pull-local --commit-metadata-only"
rm -rf repo4
fi
if ! skip_one_without_user_xattrs; then
cd ${test_tmpdir}
ostree_repo_init repo3 --mode=bare-user ostree_repo_init repo3 --mode=bare-user
${CMD_PREFIX} ostree --repo=repo3 pull-local --remote=aremote repo test2 ${CMD_PREFIX} ostree --repo=repo3 pull-local --remote=aremote repo test2
${CMD_PREFIX} ostree --repo=repo3 rev-parse aremote/test2 ${CMD_PREFIX} ostree --repo=repo3 rev-parse aremote/test2