summaryrefslogtreecommitdiff
path: root/src/chroot-tools/librechroot.gpl2
blob: 1b5d90a49f922796ee9f1f69cbf68a3235628979 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash
# Contains code derived from devtools' "makechrootpkg"

# Copyright 2011-2012 The Arch Linux Development Team
# Copyright 2012 Luke Shumaker
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

sync() {
	if [[ $CHROOTCOPY = root ]]; then
		error "Cannot sync the root copy with itself"
		exit 1
	fi

	lock_open_read 8 "$rootdir" \
		"Waiting for existing lock on \`$rootdir' to be released"

	stat_busy 'Creating clean working copy'
	local use_rsync=false
	if type -P btrfs >/dev/null; then
		[[ -d $copydir ]] && btrfs subvolume delete "$copydir" &>/dev/null
		btrfs subvolume snapshot "$rootdir" "$copydir" &>/dev/null || use_rsync=true
	else
		use_rsync=true
	fi

	if $use_rsync; then
		mkdir -p "$copydir"
		rsync -a --delete -q -W -x "$rootdir/" "$copydir"
	fi
	stat_done

	lock_close 8
}