diff options
author | Giuseppe Scrivano <gscrivan@redhat.com> | 2014-10-23 15:38:44 +0200 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2014-10-24 11:18:45 -0400 |
commit | 7973a58607ebb8be9e75cbad71c02ac1b2f9c752 (patch) | |
tree | 7820bdc00e2bfcdd679aa0ecb9f7e599711131e8 | |
parent | 0c89abee6d1142b6b20ba2539eceece2cbd3b9eb (diff) | |
download | ostree-7973a58607ebb8be9e75cbad71c02ac1b2f9c752.tar.gz |
checkout: permit checkout of a single file
fixes a coredump when using a command like:
$ ostree --repo=repo checkout -U --subpath=/usr/lib/passwd \
fedora-atomic/rawhide/x86_64/docker-host usrlib-new
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
-rw-r--r-- | Makefile-tests.am | 1 | ||||
-rw-r--r-- | src/libostree/ostree-repo-checkout.c | 10 | ||||
-rwxr-xr-x | tests/test-repo-checkout-subpath.sh | 34 |
3 files changed, 45 insertions, 0 deletions
diff --git a/Makefile-tests.am b/Makefile-tests.am index e5caa686..088d2fa9 100644 --- a/Makefile-tests.am +++ b/Makefile-tests.am @@ -45,6 +45,7 @@ testfiles = test-basic \ test-admin-deploy-uboot \ test-admin-instutil-set-kargs \ test-admin-upgrade-not-backwards \ + test-repo-checkout-subpath \ test-setuid \ test-delta \ test-xattrs \ diff --git a/src/libostree/ostree-repo-checkout.c b/src/libostree/ostree-repo-checkout.c index 29639963..03efd601 100644 --- a/src/libostree/ostree-repo-checkout.c +++ b/src/libostree/ostree-repo-checkout.c @@ -587,6 +587,16 @@ checkout_tree_at (OstreeRepo *self, } } + if (g_file_info_get_file_type (source_info) != G_FILE_TYPE_DIRECTORY) + { + ret = checkout_one_file_at (self, (GFile *) source, + source_info, + destination_dfd, destination, + g_file_info_get_name (source_info), + mode, TRUE, + cancellable, error); + goto out; + } dir_enum = g_file_enumerate_children ((GFile*)source, OSTREE_GIO_FAST_QUERYINFO, G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, diff --git a/tests/test-repo-checkout-subpath.sh b/tests/test-repo-checkout-subpath.sh new file mode 100755 index 00000000..db21fef7 --- /dev/null +++ b/tests/test-repo-checkout-subpath.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# +# Copyright (C) 2011,2013 Colin Walters <walters@verbum.org> +# Copyright (C) 2014 Red Hat, Inc. +# +# 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 "bare" +echo "ok setup" + +echo '1..2' + +repopath=${test_tmpdir}/ostree-srv/gnomerepo + +ostree --repo=repo checkout -U --subpath=/ test2 checkedout + +ostree --repo=repo checkout -U --subpath=/firstfile test2 checkedout2 |