Git wants to ensure that you do not read .git owned by other users. But we fetch+build as 'build' user, and run tests as root user. Those tests calculate git topdir using git rev-parse --show-toplevel, which git now fails. Setting safe.directory, seems wrong. Let's just use bash to figure out the top dir.
		
			
				
	
	
		
			128 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
# Generic functions to save, change, and restore configuration files
 | 
						|
 | 
						|
set -e
 | 
						|
 | 
						|
build_path=$(pwd)
 | 
						|
while [ "${build_path}" != "/" -a ! -d "${build_path}/.git" ]; do
 | 
						|
	build_path=$(dirname ${build_path})
 | 
						|
done
 | 
						|
if [ ! -d "${build_path}/.git" ]; then
 | 
						|
	echo "Not inside git directory" 1>&2
 | 
						|
	exit 1
 | 
						|
fi
 | 
						|
 | 
						|
# Save the configuration files in tmp.
 | 
						|
save_config ()
 | 
						|
{
 | 
						|
	[ ! -d tmp ] && mkdir tmp
 | 
						|
	find config -depth -type f -print | sed -e 's/config\///' |
 | 
						|
	while read file
 | 
						|
	do
 | 
						|
		mkdir -p "tmp/$(dirname "$file")"
 | 
						|
		[ -f "/$file" ] && cp -dp "/$file" "tmp/$file" || true
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
# Copy the config files from config to the system
 | 
						|
change_config ()
 | 
						|
{
 | 
						|
	find config -depth -type f -print | sed -e 's/config\///' |
 | 
						|
	while read file
 | 
						|
	do
 | 
						|
		cp -f "config/$file" "/$file"
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
# Restored the config files in the system.
 | 
						|
# The config files must be saved before with save_config ().
 | 
						|
restore_config ()
 | 
						|
{
 | 
						|
	find config -depth -type f -print | sed -e 's/config\///' |
 | 
						|
	while read file
 | 
						|
	do
 | 
						|
		if [ -f "tmp/$file" ]; then
 | 
						|
			cp -dp "tmp/$file" "/$file"
 | 
						|
			rm "tmp/$file"
 | 
						|
		else
 | 
						|
			rm -f "/$file"
 | 
						|
		fi
 | 
						|
		d="$(dirname "tmp/$file")"
 | 
						|
		while [ -n "$d" ] && [ "$d" != "." ]
 | 
						|
		do
 | 
						|
			rmdir "$d" 2>/dev/null || true
 | 
						|
			d="$(dirname "$d")"
 | 
						|
		done
 | 
						|
	done
 | 
						|
 | 
						|
	rmdir tmp 2>/dev/null || true
 | 
						|
}
 | 
						|
 | 
						|
prepare_chroot ()
 | 
						|
{
 | 
						|
	mkdir tmp/root
 | 
						|
	cp -rfdp config_chroot/* tmp/root/
 | 
						|
 | 
						|
	lists=/root/tests/common/config_chroot.list
 | 
						|
	[ -f config_chroot.list ] && lists="$lists config_chroot.list"
 | 
						|
	cat $lists | grep -v "#" | while read f
 | 
						|
	do
 | 
						|
		# Create parent directory if needed
 | 
						|
		d=$(dirname tmp/root/$f)
 | 
						|
		[ -d $d ] || mkdir -p $d
 | 
						|
		# Create hard link
 | 
						|
		ln $f tmp/root/$f
 | 
						|
	done
 | 
						|
 | 
						|
	# Copy existing gcda
 | 
						|
	mkdir -p tmp/root$build_path/lib
 | 
						|
	mkdir -p tmp/root$build_path/libmisc
 | 
						|
	mkdir -p tmp/root$build_path/src
 | 
						|
	find "$build_path" -name "*.gcda" | while read f
 | 
						|
	do
 | 
						|
		ln $f tmp/root/$f
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
clean_chroot ()
 | 
						|
{
 | 
						|
	# Remove copied files
 | 
						|
	lists=/root/tests/common/config_chroot.list
 | 
						|
	[ -f config_chroot.list ] && lists="$lists config_chroot.list"
 | 
						|
	cat $lists | grep -v "#" | while read f
 | 
						|
	do
 | 
						|
		rm -f tmp/root/$f
 | 
						|
		# Remove parent directory if empty
 | 
						|
		d=$(dirname tmp/root/$f)
 | 
						|
		rmdir -p --ignore-fail-on-non-empty $d
 | 
						|
	done
 | 
						|
 | 
						|
	find "$build_path" -name "*.gcda" | while read f
 | 
						|
	do
 | 
						|
		rm -f tmp/root/$f
 | 
						|
	done
 | 
						|
	find tmp/root -name "*.gcda" | while read f
 | 
						|
	do
 | 
						|
		g=${f#tmp/root}
 | 
						|
		mv "$f" "$g"
 | 
						|
	done
 | 
						|
	rmdir tmp/root$build_path/lib
 | 
						|
	rmdir tmp/root$build_path/libmisc
 | 
						|
	rmdir tmp/root$build_path/src
 | 
						|
	rmdir tmp/root$build_path
 | 
						|
	rmdir tmp/root/root/build
 | 
						|
	rmdir tmp/root/root
 | 
						|
 | 
						|
	find config_chroot -type f | while read f
 | 
						|
	do
 | 
						|
		f=${f#config_chroot/}
 | 
						|
		rm -f tmp/root/$f
 | 
						|
	done
 | 
						|
 | 
						|
	find config_chroot -depth -type d | while read d
 | 
						|
	do
 | 
						|
		d=${d#config_chroot}
 | 
						|
		[ -d "tmp/root$d" ] && rmdir tmp/root$d
 | 
						|
	done
 | 
						|
}
 | 
						|
 |