Commit 0af05a48 authored by Jan Steffens's avatar Jan Steffens
Browse files

Use Btrfs snapshots for chroot copies, when available

This is much faster than using Rsync to clone.

Rsync stays available when the chroots are not on a Btrfs.
parent 174ff59d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ if ${clean_first} || [ ! -d "${chroots}/${repo}-${arch}" ]; then
		exec 9>${copy}.lock
		flock 9

		{ type -P btrfs && btrfs subvolume delete ${copy}; } &>/dev/null
		rm -rf ${copy}
	done
	exec 9>&-
+12 −2
Original line number Diff line number Diff line
@@ -127,8 +127,18 @@ if [ ! -d "$copydir" -o "$clean_first" -eq "1" ]; then
	fi

	echo -n 'creating clean working copy...'
	use_rsync=false
	if type -P btrfs >/dev/null; then
		[ -d $copydir ] && btrfs subvolume delete "$copydir" &>/dev/null
		btrfs subvolume snapshot "$chrootdir/root" "$copydir" &>/dev/null || use_rsync=true
	else
		use_rsync=true
	fi

	if $use_rsync; then
		mkdir -p "$copydir"
		rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir"
	fi
	echo 'done'

	# Drop the read lock again
+4 −0
Original line number Diff line number Diff line
@@ -181,6 +181,10 @@ else
		exit 1
	fi

	if { type -P btrfs && btrfs subvolume create "${working_dir}"; } &>/dev/null; then
		chmod 0755 "${working_dir}"
	fi

	mkdir -p "${working_dir}/var/lib/pacman/sync"
	mkdir -p "${working_dir}/etc/"