[PATCH] t1509: update prepare script to be able to run t1509 in chroot again
From: Nguyễn Thái Ngọc Duy <hidden>
Date: 2016-06-15 23:04:21
Subsystem:
the rest · Maintainer:
Linus Torvalds
Tested on Gentoo and OpenSUSE 13.1, both x86-64 Signed-off-by: Nguyễn Thái Ngọc Duy <redacted> --- On Wed, Apr 1, 2015 at 2:14 AM, Jonathan Nieder [off-list ref] wrote: > Jeff King wrote: > >> No tests, as we would need to be able to write to "/" to do >> so. > > t1509-root-worktree.sh is supposed to test the repository-at-/ case. > But I wouldn't be surprised if it's bitrotted, since people don't set > up a throwaway chroot or VM for tests too often. Can't leave it rotting. Either fix it or kill it. This is the first option. Good news is the test passes, nothing else is broken. Bad news is it does not detect the core.worktree breakage, but this on top would verify that Jeff's patch works diff --git a/t/t1509-root-worktree.sh b/t/t1509-root-worktree.sh index b6977d4..17ff4ce 100755 --- a/t/t1509-root-worktree.sh +++ b/t/t1509-root-worktree.sh @@ -224,6 +224,10 @@ test_expect_success 'setup' ' test_cmp expected result ' +test_expect_success 'no core.worktree after git init' ' + test "`git config core.worktree`" = "" +' + test_vars 'auto gitdir, root' ".git" "/" "" test_foobar_root t/t1509/prepare-chroot.sh | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-)
diff --git a/t/t1509/prepare-chroot.sh b/t/t1509/prepare-chroot.sh
index 6269117..c61afbf 100755
--- a/t/t1509/prepare-chroot.sh
+++ b/t/t1509/prepare-chroot.sh@@ -14,25 +14,42 @@ xmkdir() { R="$1" +[ "$UID" -eq 0 ] && die "This script should not be run as root, what if it does rm -rf /?" [ -n "$R" ] || die "usage: prepare-chroot.sh <root>" [ -x git ] || die "This script needs to be executed at git source code's top directory" -[ -x /bin/busybox ] || die "You need busybox" +if [ -x /bin/busybox ]; then + BB=/bin/busybox +elif [ -x /usr/bin/busybox ]; then + BB=/usr/bin/busybox +else + die "You need busybox" +fi xmkdir "$R" "$R/bin" "$R/etc" "$R/lib" "$R/dev" -[ -c "$R/dev/null" ] || die "/dev/null is missing. Do mknod $R/dev/null c 1 3 && chmod 666 $R/dev/null" +touch "$R/dev/null" echo "root:x:0:0:root:/:/bin/sh" > "$R/etc/passwd" echo "$(id -nu):x:$(id -u):$(id -g)::$(pwd)/t:/bin/sh" >> "$R/etc/passwd" echo "root::0:root" > "$R/etc/group" echo "$(id -ng)::$(id -g):$(id -nu)" >> "$R/etc/group" -[ -x "$R/bin/busybox" ] || cp /bin/busybox "$R/bin/busybox" -[ -x "$R/bin/sh" ] || ln -s /bin/busybox "$R/bin/sh" -[ -x "$R/bin/su" ] || ln -s /bin/busybox "$R/bin/su" +[ -x "$R$BB" ] || cp $BB "$R/bin/busybox" +for cmd in sh su ls expr tr basename rm mkdir mv id uname dirname cat true sed diff; do + ln -f -s /bin/busybox "$R/bin/$cmd" +done mkdir -p "$R$(pwd)" rsync --exclude-from t/t1509/excludes -Ha . "$R$(pwd)" -ldd git | grep '/' | sed 's,.*\s\(/[^ ]*\).*,\1,' | while read i; do - mkdir -p "$R$(dirname $i)" - cp "$i" "$R/$i" +# Fake perl to reduce dependency, t1509 does not use perl, but some +# env might slip through, see test-lib.sh, unset.*PERL_PATH +sed 's|^PERL_PATH=*|PERL_PATH=/bin/true|' GIT-BUILD-OPTIONS > "$R$(pwd)/GIT-BUILD-OPTIONS" +for cmd in git $BB;do + ldd $cmd | grep '/' | sed 's,.*\s\(/[^ ]*\).*,\1,' | while read i; do + mkdir -p "$R$(dirname $i)" + cp "$i" "$R/$i" + done done -echo "Execute this in root: 'chroot $R /bin/su - $(id -nu)'" +cat <<EOF +Execute this in root: +chroot $R /bin/su - $(id -nu) +IKNOWWHATIAMDOING=YES ./t1509-root-worktree.sh -v -i +EOF
--
2.3.0.rc1.137.g477eb31