mirror of
https://github.com/flatpak/flatpak.git
synced 2026-01-31 11:01:22 -05:00
Currently when the user doesn't specify a branch to the run command, for apps it will use the current branch and for runtimes it just tries to use "master" and fails if that doesn't work. Since runtimes don't have current branches, it would be nice if we could determine the right one to use rather than just erroring out. So this commit changes the implementation so that it looks at each installed runtime and if only one matches it is used. If there's more than one match the user is prompted to choose. This is the first interactivity added to the run command but I don't think that's an issue; any time it's run in a non-interactive shell it will error out upon encountering ambiguity. Also, add a couple unit tests for the success path and error paths. Fixes https://github.com/flatpak/flatpak/issues/2780 Closes: #2788 Approved by: matthiasclasen
178 lines
5.9 KiB
Bash
Executable File
178 lines
5.9 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (C) 2011 Colin Walters <walters@verbum.org>
|
|
#
|
|
# 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 -euo pipefail
|
|
|
|
. $(dirname $0)/libtest.sh
|
|
|
|
skip_without_bwrap
|
|
|
|
echo "1..2"
|
|
|
|
make_extension () {
|
|
local ID=$1
|
|
local VERSION=$2
|
|
|
|
local DIR=`mktemp -d`
|
|
|
|
cat > ${DIR}/metadata <<EOF
|
|
[Runtime]
|
|
name=${ID}
|
|
EOF
|
|
mkdir -p ${DIR}/usr
|
|
mkdir -p ${DIR}/files
|
|
touch ${DIR}/usr/exists
|
|
touch ${DIR}/usr/extension-$ID:$VERSION
|
|
|
|
${FLATPAK} build-export --runtime ${GPGARGS-} repos/test ${DIR} ${VERSION}
|
|
rm -rf ${DIR}
|
|
|
|
${FLATPAK} --user install -y test-repo $ID $VERSION
|
|
}
|
|
|
|
add_extensions () {
|
|
local DIR=$1
|
|
|
|
mkdir -p $DIR/files/foo/ext1
|
|
mkdir -p $DIR/files/foo/ext2
|
|
mkdir -p $DIR/files/foo/ext3
|
|
mkdir -p $DIR/files/foo/ext4
|
|
mkdir -p $DIR/files/foo/none
|
|
mkdir -p $DIR/files/foo/dir
|
|
mkdir -p $DIR/files/foo/dir2
|
|
mkdir -p $DIR/files/foo/multiversion
|
|
|
|
cat >> $DIR/metadata <<EOF
|
|
[Extension org.test.Extension1]
|
|
directory=foo/ext1
|
|
|
|
[Extension org.test.Extension2]
|
|
directory=foo/ext2
|
|
version=master
|
|
|
|
[Extension org.test.Extension3]
|
|
directory=foo/ext3
|
|
version=not-master
|
|
|
|
[Extension org.test.Extension4]
|
|
directory=foo/ext4
|
|
version=not-master
|
|
|
|
[Extension org.test.None]
|
|
directory=foo/none
|
|
|
|
[Extension org.test.Dir]
|
|
directory=foo/dir
|
|
subdirectories=true
|
|
|
|
[Extension org.test.Dir2]
|
|
directory=foo/dir2
|
|
subdirectories=true
|
|
|
|
[Extension org.test.Multiversion]
|
|
directory=foo/multiversion
|
|
versions=not-master;master
|
|
subdirectories=true
|
|
|
|
EOF
|
|
}
|
|
|
|
mkdir -p repos
|
|
ostree init --repo=repos/test --mode=archive-z2
|
|
. $(dirname $0)/make-test-runtime.sh repos/test org.test.Platform master "" bash ls cat echo readlink > /dev/null
|
|
. $(dirname $0)/make-test-app.sh repos/test "" master "" > /dev/null
|
|
|
|
# Modify platform metadata
|
|
ostree checkout -U --repo=repos/test runtime/org.test.Platform/${ARCH}/master platform
|
|
add_extensions platform
|
|
ostree commit --repo=repos/test --owner-uid=0 --owner-gid=0 --no-xattrs --canonical-permissions --branch=runtime/org.test.Platform/${ARCH}/master -s "modified metadata" platform
|
|
${FLATPAK} build-update-repo repos/test
|
|
|
|
${FLATPAK} remote-add --user --no-gpg-verify test-repo repos/test
|
|
${FLATPAK} --user install -y test-repo org.test.Platform master
|
|
${FLATPAK} --user install -y test-repo org.test.Hello master
|
|
|
|
make_extension org.test.Extension1 master
|
|
make_extension org.test.Extension1 not-master
|
|
make_extension org.test.Extension2 master
|
|
make_extension org.test.Extension2 not-master
|
|
make_extension org.test.Extension3 master
|
|
make_extension org.test.Extension3 not-master
|
|
make_extension org.test.Extension4 master
|
|
make_extension org.test.Dir.foo master
|
|
make_extension org.test.Dir.bar master
|
|
make_extension org.test.Multiversion.master master
|
|
make_extension org.test.Multiversion.notmaster not-master
|
|
|
|
assert_has_extension_file () {
|
|
local prefix=$1
|
|
local file=$2
|
|
run_sh org.test.Hello "test -f $prefix/foo/$file" || (echo 1>&2 "Couldn't find '$file'"; exit 1)
|
|
}
|
|
|
|
assert_not_has_extension_file () {
|
|
local prefix=$1
|
|
local file=$2
|
|
if run_sh org.test.Hello "test -f $prefix/foo/$file" ; then
|
|
echo 1>&2 "File '$file' exists";
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
assert_has_extension_file /usr ext1/exists
|
|
assert_has_extension_file /usr ext1/extension-org.test.Extension1:master
|
|
assert_has_extension_file /usr ext2/exists
|
|
assert_has_extension_file /usr ext2/extension-org.test.Extension2:master
|
|
assert_has_extension_file /usr ext3/exists
|
|
assert_has_extension_file /usr ext3/extension-org.test.Extension3:not-master
|
|
assert_not_has_extension_file /usr ext4/exists
|
|
assert_has_extension_file /usr dir/foo/exists
|
|
assert_has_extension_file /usr dir/foo/extension-org.test.Dir.foo:master
|
|
assert_has_extension_file /usr dir/bar/extension-org.test.Dir.bar:master
|
|
assert_not_has_extension_file /usr dir2/foo/exists
|
|
run_sh org.test.Hello "ls -lR /usr/foo/multiversion"
|
|
assert_has_extension_file /usr multiversion/master/extension-org.test.Multiversion.master:master
|
|
assert_has_extension_file /usr multiversion/notmaster/extension-org.test.Multiversion.notmaster:not-master
|
|
|
|
echo "ok runtime extensions"
|
|
|
|
# Modify app metadata
|
|
ostree checkout -U --repo=repos/test app/org.test.Hello/${ARCH}/master hello
|
|
add_extensions hello
|
|
ostree commit --repo=repos/test --owner-uid=0 --owner-gid=0 --no-xattrs --canonical-permissions --branch=app/org.test.Hello/${ARCH}/master -s "modified metadata" hello
|
|
${FLATPAK} build-update-repo repos/test
|
|
|
|
${FLATPAK} --user update -y org.test.Hello master
|
|
|
|
assert_has_extension_file /app ext1/exists
|
|
assert_has_extension_file /app ext1/extension-org.test.Extension1:master
|
|
assert_has_extension_file /app ext2/exists
|
|
assert_has_extension_file /app ext2/extension-org.test.Extension2:master
|
|
assert_has_extension_file /app ext3/exists
|
|
assert_has_extension_file /app ext3/extension-org.test.Extension3:not-master
|
|
assert_not_has_extension_file /app ext4/exists
|
|
assert_has_extension_file /app dir/foo/exists
|
|
assert_has_extension_file /app dir/foo/extension-org.test.Dir.foo:master
|
|
assert_has_extension_file /app dir/bar/extension-org.test.Dir.bar:master
|
|
assert_not_has_extension_file /app dir2/foo/exists
|
|
assert_has_extension_file /app multiversion/master/extension-org.test.Multiversion.master:master
|
|
assert_has_extension_file /app multiversion/notmaster/extension-org.test.Multiversion.notmaster:not-master
|
|
|
|
echo "ok app extensions"
|