diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 71bf0555..92d15f4a 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -1452,9 +1452,12 @@ ostree_repo_stage_directory_to_mtree (OstreeRepo *self, modified_info = create_modified_file_info (child_info, modifier); - xattrs = ostree_get_xattrs_for_file (dir, error); - if (!xattrs) - goto out; + if (!(modifier && modifier->skip_xattrs)) + { + xattrs = ostree_get_xattrs_for_file (dir, error); + if (!xattrs) + goto out; + } if (!stage_directory_meta (self, modified_info, xattrs, &child_file_checksum, cancellable, error)) @@ -1513,9 +1516,12 @@ ostree_repo_stage_directory_to_mtree (OstreeRepo *self, goto out; } - xattrs = ostree_get_xattrs_for_file (child, error); - if (!xattrs) - goto out; + if (!(modifier && modifier->skip_xattrs)) + { + xattrs = ostree_get_xattrs_for_file (child, error); + if (!xattrs) + goto out; + } if (!stage_object_impl (self, OSTREE_OBJECT_TYPE_RAW_FILE, modified_info, xattrs, file_input, NULL, diff --git a/src/libostree/ostree-repo.h b/src/libostree/ostree-repo.h index 3777d840..c1a4ebbb 100644 --- a/src/libostree/ostree-repo.h +++ b/src/libostree/ostree-repo.h @@ -137,10 +137,14 @@ gboolean ostree_repo_load_variant (OstreeRepo *self, typedef struct { volatile gint refcount; - gpointer reserved[3]; gint uid; gint gid; + + guint reserved_flags : 31; + guint skip_xattrs : 1; + + gpointer reserved[3]; } OstreeRepoCommitModifier; OstreeRepoCommitModifier *ostree_repo_commit_modifier_new (void); diff --git a/src/ostree/ot-builtin-commit.c b/src/ostree/ot-builtin-commit.c index e414a2c1..8b791189 100644 --- a/src/ostree/ot-builtin-commit.c +++ b/src/ostree/ot-builtin-commit.c @@ -38,6 +38,7 @@ static char *branch; static char **metadata_strings; static gboolean skip_if_unchanged; static gboolean tar_autocreate_parents; +static gboolean no_xattrs; static char **trees; static gint owner_uid = -1; static gint owner_gid = -1; @@ -53,6 +54,7 @@ static GOptionEntry options[] = { { "tree", 0, 0, G_OPTION_ARG_STRING_ARRAY, &trees, "Overlay the given argument as a tree", "NAME" }, { "owner-uid", 0, 0, G_OPTION_ARG_INT, &owner_uid, "Set file ownership user id", "UID" }, { "owner-gid", 0, 0, G_OPTION_ARG_INT, &owner_gid, "Set file ownership group id", "GID" }, + { "no-xattrs", 0, 0, G_OPTION_ARG_NONE, &no_xattrs, "Do not import extended attributes", NULL }, { "tar-autocreate-parents", 0, 0, G_OPTION_ARG_NONE, &tar_autocreate_parents, "When loading tar archives, automatically create parent directories as needed", NULL }, { "skip-if-unchanged", 0, 0, G_OPTION_ARG_NONE, &skip_if_unchanged, "If the contents are unchanged from previous commit, do nothing", NULL }, { NULL } diff --git a/tests/t0000-basic.sh b/tests/t0000-basic.sh index 2dff8ff9..1514f344 100755 --- a/tests/t0000-basic.sh +++ b/tests/t0000-basic.sh @@ -19,7 +19,7 @@ set -e -echo "1..22" +echo "1..23" . libtest.sh @@ -169,3 +169,7 @@ $OSTREE show test2 > test2-commit-text assert_file_has_content test2-commit-text "'FOO'.*'BAR'" assert_file_has_content test2-commit-text "'KITTENS'.*'CUTE'" echo "ok metadata commit with strings" + +cd ${test_tmpdir}/checkout-test2-4 +$OSTREE commit -b test2 -s "no xattrs" --no-xattrs +echo "ok commit with no xattrs"