diff options
author | Jan Steffens <jan.steffens@gmail.com> | 2011-03-13 15:19:20 +0100 |
---|---|---|
committer | Jan Steffens <jan.steffens@gmail.com> | 2011-03-22 19:47:48 +0100 |
commit | 0af05a48abb1d35380f4f4259deb163eb3b7b174 (patch) | |
tree | 6ded82b231c23421b76147e870f96d07b1385568 | |
parent | 174ff59dba8c24f544e354cd43f3b68aea91d265 (diff) | |
download | devtools-0af05a48abb1d35380f4f4259deb163eb3b7b174.tar.xz |
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.
-rwxr-xr-x | archbuild | 1 | ||||
-rwxr-xr-x | makechrootpkg | 14 | ||||
-rwxr-xr-x | mkarchroot | 4 |
3 files changed, 17 insertions, 2 deletions
@@ -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>&- diff --git a/makechrootpkg b/makechrootpkg index 1f6f20a..5bf492f 100755 --- a/makechrootpkg +++ b/makechrootpkg @@ -127,8 +127,18 @@ if [ ! -d "$copydir" -o "$clean_first" -eq "1" ]; then fi echo -n 'creating clean working copy...' - mkdir -p "$copydir" - rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir" + 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 @@ -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/" |