2011-10-15 13:07:26 -04:00
#!/bin/bash
#
# Copyright (C) 2011 Colin Walters <walters@verbum.org>
#
2011-11-10 13:17:04 -05:00
# 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.
2011-10-15 13:07:26 -04:00
#
2011-11-10 13:17:04 -05:00
# This library is distributed in the hope that it will be useful,
2011-10-15 13:07:26 -04:00
# but WITHOUT ANY WARRANTY; without even the implied warranty of
2011-11-10 13:17:04 -05:00
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
2011-10-15 13:07:26 -04:00
#
2011-11-10 13:17:04 -05:00
# 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.
2011-10-15 13:07:26 -04:00
set -e
2013-09-09 17:01:32 -04:00
echo "1..41"
2011-10-31 22:42:14 -04:00
2013-05-01 15:26:21 -04:00
. $( dirname $0 ) /libtest.sh
2011-10-15 13:07:26 -04:00
2012-09-15 12:44:57 -04:00
setup_test_repository "bare"
2011-10-31 22:42:14 -04:00
echo "ok setup"
2011-11-03 23:08:28 -04:00
$OSTREE checkout test2 checkout-test2
2011-10-31 22:42:14 -04:00
echo "ok checkout"
2011-11-03 23:08:28 -04:00
$OSTREE rev-parse test2
$OSTREE rev-parse 'test2^'
$OSTREE rev-parse 'test2^^' 2>/dev/null && ( echo 1>& 2 "rev-parse test2^^ unexpectedly succeeded!" ; exit 1)
2011-11-02 13:22:13 -04:00
echo "ok rev-parse"
2014-07-11 14:00:45 -04:00
checksum = $( $OSTREE rev-parse test2)
partial = ${ checksum : 0 : 6 }
echo "partial:" $partial
echo "corresponds to:" $checksum
$OSTREE rev-parse test2 > checksum
$OSTREE rev-parse $partial > partial-results
assert_file_has_content checksum $( cat partial-results)
echo "ok shortened checksum"
2013-07-24 14:05:12 -04:00
( cd repo && ostree rev-parse test2)
echo "ok repo-in-cwd"
2013-06-29 14:51:08 -04:00
$OSTREE refs > reflist
assert_file_has_content reflist '^test2$'
rm reflist
echo "ok refs"
2011-10-31 22:42:14 -04:00
cd checkout-test2
assert_has_file firstfile
assert_has_file baz/cow
assert_file_has_content baz/cow moo
assert_has_file baz/deeper/ohyeah
echo "ok content"
2011-11-08 18:11:42 -05:00
rm firstfile
$OSTREE commit -b test2 -s delete
2011-10-31 22:42:14 -04:00
cd $test_tmpdir
2011-11-03 23:08:28 -04:00
$OSTREE checkout test2 $test_tmpdir /checkout-test2-2
2011-10-31 22:42:14 -04:00
cd $test_tmpdir /checkout-test2-2
assert_not_has_file firstfile
assert_has_file baz/saucer
echo "ok removal"
2011-10-15 13:07:26 -04:00
mkdir -p a/nested/tree
echo one > a/nested/tree/1
echo two2 > a/nested/2
echo 3 > a/nested/3
touch a/4
echo fivebaby > a/5
touch a/6
echo whee > 7
mkdir -p another/nested/tree
echo anotherone > another/nested/tree/1
echo whee2 > another/whee
# FIXME - remove grep for .
2011-11-27 18:03:05 -05:00
$OSTREE commit -b test2 -s "Another commit"
echo "ok commit"
2011-10-31 22:42:14 -04:00
cd ${ test_tmpdir }
2011-11-03 23:08:28 -04:00
$OSTREE checkout test2 $test_tmpdir /checkout-test2-3
2011-10-31 22:42:14 -04:00
cd checkout-test2-3
2011-10-15 13:07:26 -04:00
assert_has_file a/nested/2
assert_file_has_content a/nested/2 'two2'
echo "ok stdin contents"
2011-11-04 10:53:47 -04:00
cd ${ test_tmpdir } /checkout-test2-3
echo 4 > four
mkdir -p yet/another/tree
echo leaf > yet/another/tree/green
echo helloworld > yet/message
2011-11-16 17:48:29 -05:00
rm a/5
2011-11-04 10:53:47 -04:00
$OSTREE commit -b test2 -s "Current directory"
echo "ok cwd commit"
cd ${ test_tmpdir }
$OSTREE checkout test2 $test_tmpdir /checkout-test2-4
cd checkout-test2-4
assert_file_has_content yet/another/tree/green 'leaf'
assert_file_has_content four '4'
echo "ok cwd contents"
2011-11-16 17:48:29 -05:00
cd ${ test_tmpdir }
$OSTREE diff test2^ test2 > diff-test2
assert_file_has_content diff-test2 'D */a/5'
assert_file_has_content diff-test2 'A */yet$'
assert_file_has_content diff-test2 'A */yet/message$'
assert_file_has_content diff-test2 'A */yet/another/tree/green$'
echo "ok diff revisions"
cd ${ test_tmpdir } /checkout-test2-4
echo afile > oh-look-a-file
$OSTREE diff test2 ./ > ${ test_tmpdir } /diff-test2-2
rm oh-look-a-file
cd ${ test_tmpdir }
2013-03-26 08:29:30 -04:00
assert_file_has_content diff-test2-2 'A *oh-look-a-file$'
2011-11-16 17:48:29 -05:00
echo "ok diff cwd"
2011-11-16 23:09:32 -05:00
cd ${ test_tmpdir } /checkout-test2-4
rm four
mkdir four
touch four/other
$OSTREE diff test2 ./ > ${ test_tmpdir } /diff-test2-2
cd ${ test_tmpdir }
assert_file_has_content diff-test2-2 'M */four$'
echo "ok diff file changing type"
2011-11-18 18:50:53 -05:00
cd ${ test_tmpdir }
mkdir repo2
2012-05-04 10:04:32 -04:00
${ CMD_PREFIX } ostree --repo= repo2 init
${ CMD_PREFIX } ostree --repo= repo2 pull-local repo
2012-05-01 17:43:26 -04:00
echo "ok pull-local"
2011-11-18 18:50:53 -05:00
cd ${ test_tmpdir }
2012-05-04 10:04:32 -04:00
${ CMD_PREFIX } ostree --repo= repo2 checkout test2 test2-checkout-from-local-clone
2011-11-18 18:50:53 -05:00
cd test2-checkout-from-local-clone
assert_file_has_content yet/another/tree/green 'leaf'
echo "ok local clone checkout"
2011-12-15 16:12:31 -05:00
$OSTREE checkout -U test2 checkout-user-test2
echo "ok user checkout"
2011-12-21 20:10:10 -05:00
$OSTREE commit -b test2 -s "Another commit" --tree= ref = test2
echo "ok commit from ref"
2011-12-22 15:59:47 -05:00
$OSTREE commit -b trees/test2 -s 'ref with / in it' --tree= ref = test2
echo "ok commit ref with /"
2011-12-22 18:47:30 -05:00
old_rev = $( $OSTREE rev-parse test2)
$OSTREE commit --skip-if-unchanged -b test2 -s 'should not be committed' --tree= ref = test2
new_rev = $( $OSTREE rev-parse test2)
assert_streq " ${ old_rev } " " ${ new_rev } "
echo "ok commit --skip-if-unchanged"
2012-01-05 18:56:21 -05:00
cd ${ test_tmpdir } /checkout-test2-4
$OSTREE commit -b test2 -s "no xattrs" --no-xattrs
echo "ok commit with no xattrs"
2012-01-22 13:27:38 -05:00
cd ${ test_tmpdir }
cat > test-statoverride.txt <<EOF
+2048 /a/nested/3
EOF
cd ${ test_tmpdir } /checkout-test2-4
$OSTREE commit -b test2 -s "with statoverride" --statoverride= ../test-statoverride.txt
echo "ok commit statoverridde"
2012-02-27 05:58:42 -05:00
cd ${ test_tmpdir }
$OSTREE prune
echo "ok prune didn't fail"
2012-03-05 11:32:48 -05:00
cd ${ test_tmpdir }
$OSTREE cat test2 /yet/another/tree/green > greenfile-contents
assert_file_has_content greenfile-contents "leaf"
echo "ok cat-file"
2012-03-06 08:57:31 -05:00
cd ${ test_tmpdir }
$OSTREE checkout --subpath /yet/another test2 checkout-test2-subpath
cd checkout-test2-subpath
assert_file_has_content tree/green "leaf"
echo "ok checkout subpath"
2012-03-06 11:37:50 -05:00
cd ${ test_tmpdir }
$OSTREE checkout --union test2 checkout-test2-union
find checkout-test2-union | wc -l > union-files-count
$OSTREE checkout --union test2 checkout-test2-union
find checkout-test2-union | wc -l > union-files-count.new
cmp union-files-count{ ,.new}
cd checkout-test2-union
assert_file_has_content ./yet/another/tree/green "leaf"
echo "ok checkout union 1"
2012-04-03 23:45:48 -04:00
2012-04-16 21:21:50 -04:00
cd ${ test_tmpdir }
rm -rf shadow-repo
mkdir shadow-repo
2012-05-04 10:04:32 -04:00
${ CMD_PREFIX } ostree --repo= shadow-repo init
${ CMD_PREFIX } ostree --repo= shadow-repo config set core.parent $( pwd ) /repo
2012-04-16 21:21:50 -04:00
rm -rf test2-checkout
parent_rev_test2 = $( ostree --repo= repo rev-parse test2)
2012-05-04 10:04:32 -04:00
${ CMD_PREFIX } ostree --repo= shadow-repo checkout " ${ parent_rev_test2 } " test2-checkout
2012-04-16 21:21:50 -04:00
echo "ok checkout from shadow repo"
2013-05-01 12:15:02 -04:00
cd ${ test_tmpdir }
rm -f expected-fail
$OSTREE checkout test2 --subpath /enoent 2>/dev/null || touch expected-fail
assert_has_file expected-fail
echo "ok subdir enoent"
cd ${ test_tmpdir }
$OSTREE checkout test2 --allow-noent --subpath /enoent 2>/dev/null
echo "ok subdir noent"
2013-06-29 11:44:26 -04:00
cd ${ test_tmpdir }
mkdir repo3
${ CMD_PREFIX } ostree --repo= repo3 init
${ CMD_PREFIX } ostree --repo= repo3 pull-local --remote= aremote repo test2
ostree --repo= repo3 rev-parse aremote/test2
echo "ok pull-local with --remote arg"
2013-06-29 14:02:17 -04:00
cd ${ test_tmpdir }
ostree --repo= repo3 prune
find repo3/objects -name '*.commit' > objlist-before-prune
rm repo3/refs/heads/* repo3/refs/remotes/* -rf
ostree --repo= repo3 prune --refs-only
find repo3/objects -name '*.commit' > objlist-after-prune
if cmp -s objlist-before-prune objlist-after-prune; then
echo "Prune didn't delete anything!" ; exit 1
fi
rm repo3 objlist-before-prune objlist-after-prune -rf
echo "ok prune"
2014-07-20 12:20:51 -04:00
cd ${ test_tmpdir }
rm repo3 -rf
${ CMD_PREFIX } ostree --repo= repo3 init --mode= archive-z2
${ CMD_PREFIX } ostree --repo= repo3 pull-local --remote= aremote repo test2
rm repo3/refs/remotes -rf
mkdir repo3/refs/remotes
ostree --repo= repo3 prune --refs-only
find repo3/objects -name '*.filez' > file-objects
if test -s file-objects; then
assert_not_reached "prune didn't delete all objects"
fi
echo "ok prune in archive-z2 deleted everything"
2013-07-01 10:18:26 -04:00
cd ${ test_tmpdir }
$OSTREE commit -b test3 -s "Another commit" --tree= ref = test2
ostree --repo= repo refs > reflist
assert_file_has_content reflist '^test3$'
ostree --repo= repo refs --delete test3
ostree --repo= repo refs > reflist
assert_not_file_has_content reflist '^test3$'
echo "ok reflist --delete"
2013-07-17 19:47:40 -04:00
cd ${ test_tmpdir }
rm -rf test2-checkout
$OSTREE checkout test2 test2-checkout
( cd test2-checkout && $OSTREE commit --link-checkout-speedup -b test2 -s "tmp" )
echo "ok commit with link speedup"
2013-07-01 10:18:26 -04:00
2013-07-27 20:12:07 -04:00
cd ${ test_tmpdir }
$OSTREE ls test2
echo "ok ls with no argument"
2014-07-20 22:32:39 -04:00
cd ${ test_tmpdir }
if $OSTREE ls test2 /baz/cow/notadir 2>errmsg; then
assert_not_reached
fi
assert_file_has_content errmsg "Not a directory"
echo "ok ls of not a directory"
2013-08-14 10:10:08 +02:00
cd ${ test_tmpdir }
$OSTREE show test2
echo "ok show with non-checksum"
2013-08-14 11:25:32 +02:00
cd ${ test_tmpdir }
checksum = $( $OSTREE commit -b test4 -s "Third commit" )
$OSTREE show test4 > show-output
assert_file_has_content show-output "Third commit"
assert_file_has_content show-output " commit $checksum "
echo "ok show full output"
2013-08-14 11:47:30 +02:00
cd ${ test_tmpdir }
checksum1 = $( $OSTREE commit -b test5 -s "First commit" )
checksum2 = $( $OSTREE commit -b test5 -s "Second commit" )
$OSTREE log test5 > log-output
assert_file_has_content log-output "First commit"
assert_file_has_content log-output " commit $checksum1 "
assert_file_has_content log-output "Second commit"
assert_file_has_content log-output " commit $checksum2 "
echo "ok log output"
2013-08-14 12:42:13 +02:00
cd ${ test_tmpdir }
checksum1 = $( $OSTREE commit -b test6 -s "First commit" )
checksum2 = $( $OSTREE commit -b test6 -s "Second commit" )
$OSTREE show test6 > show-output
assert_file_has_content show-output " commit $checksum2 "
$OSTREE reset test6 $checksum1
$OSTREE show test6 > show-output
assert_file_has_content show-output " commit $checksum1 "
echo "ok basic reset"
2013-08-28 17:32:21 -04:00
cd ${ test_tmpdir }
rm checkout-test2 -rf
$OSTREE checkout test2 checkout-test2
touch checkout-test2/sometestfile
$OSTREE commit -s sometest -b test2 checkout-test2
echo "ok commit with directory filename"
2013-09-09 17:01:32 -04:00
$OSTREE commit -b test2 -s "Metadata string" --add-metadata-string= FOO = BAR --add-metadata-string= KITTENS = CUTE --add-detached-metadata-string= SIGNATURE = HANCOCK --tree= ref = test2
$OSTREE show --print-metadata-key= FOO test2 > test2-meta
assert_file_has_content test2-meta "BAR"
$OSTREE show --print-metadata-key= KITTENS test2 > test2-meta
assert_file_has_content test2-meta "CUTE"
$OSTREE show --print-detached-metadata-key= SIGNATURE test2 > test2-meta
assert_file_has_content test2-meta "HANCOCK"
echo "ok metadata commit with strings"
2013-09-26 14:00:36 -04:00
cd ${ test_tmpdir }
rm repo2 -rf
mkdir repo2
${ CMD_PREFIX } ostree --repo= repo2 init
${ CMD_PREFIX } ostree --repo= repo2 pull-local repo
2014-07-22 15:42:56 -04:00
ostree --repo= repo2 show --print-detached-metadata-key= SIGNATURE test2 > test2-meta
assert_file_has_content test2-meta "HANCOCK"
2013-09-26 14:00:36 -04:00
echo "ok pull-local after commit metadata"
2013-09-28 12:00:16 -04:00
cd ${ test_tmpdir }
${ CMD_PREFIX } ostree --repo= repo remote --set= tls-permissive= true add aremote http://remote.example.com/repo testos/buildmaster/x86_64-runtime
assert_file_has_content repo/config 'tls-permissive=true'
assert_file_has_content repo/config 'remote\.example\.com'
echo "ok remote add with set"
2013-10-27 18:20:12 +01:00
cd ${ test_tmpdir }
${ CMD_PREFIX } ostree --repo= repo remote show-url aremote > aremote-url.txt
assert_file_has_content aremote-url.txt 'http.*remote\.example\.com/repo'
echo "ok remote show-url"
2013-12-12 14:56:19 -08:00
cd ${ test_tmpdir }
rm -rf test2-checkout
$OSTREE checkout test2 test2-checkout
stat '--format=%Y' test2-checkout/baz/cow > cow-mtime
assert_file_has_content cow-mtime 0
echo "ok content mtime"
2014-01-17 10:32:34 -05:00
cd ${ test_tmpdir }
rm -rf test2-checkout
mkdir -p test2-checkout
cd test2-checkout
mkfifo afifo
if $OSTREE commit -b test2 -s "Attempt to commit a FIFO" 2>../errmsg; then
assert_not_reached "Committing a FIFO unexpetedly succeeded!"
assert_file_has_content ../errmsg "Unsupported file type"
fi
echo "ok commit of fifo was rejected"
2014-06-18 18:24:41 -04:00
cd ${ test_tmpdir }
rm -rf test2-checkout
mkdir -p test2-checkout
cd test2-checkout
touch should-not-be-fsynced
$OSTREE commit -b test2 -s "Unfsynced commit" --fsync= false