[IMP] use rsync instead of cp for filestore copy

Replace mkdir + rm -rf + cp -a sequence with rsync --delete:

Before (3 commands):
  sudo mkdir -p "$dst_path"
  sudo rm -rf "$dst_path"
  sudo cp -a "$src_path" "$dst_path"

After (2 commands):
  sudo mkdir -p "$(dirname "$dst_path")"
  sudo rsync -a --delete "${src_path}/" "${dst_path}/"

Benefits:
- Incremental copy: only transfers changed files on re-run
- Atomic delete + copy: --delete removes extra files in destination
- Preserves all attributes like cp -a
- Faster for large filestores when re-running migration

Added rsync to required commands check.
This commit is contained in:
Stéphan Sainléger
2026-02-02 21:59:14 +01:00
parent 67c2d5a061
commit 60d25124c4

View File

@@ -11,7 +11,7 @@ readonly FILESTORE_SUBPATH="var/lib/odoo/filestore"
check_required_commands() { check_required_commands() {
local missing=() local missing=()
for cmd in docker compose sudo; do for cmd in docker compose sudo rsync; do
if ! command -v "$cmd" &>/dev/null; then if ! command -v "$cmd" &>/dev/null; then
missing+=("$cmd") missing+=("$cmd")
fi fi
@@ -62,9 +62,8 @@ copy_filestore() {
local src_path="${DATASTORE_PATH}/${from_service}/${FILESTORE_SUBPATH}/${from_db}" local src_path="${DATASTORE_PATH}/${from_service}/${FILESTORE_SUBPATH}/${from_db}"
local dst_path="${DATASTORE_PATH}/${to_service}/${FILESTORE_SUBPATH}/${to_db}" local dst_path="${DATASTORE_PATH}/${to_service}/${FILESTORE_SUBPATH}/${to_db}"
sudo mkdir -p "$dst_path" sudo mkdir -p "$(dirname "$dst_path")"
sudo rm -rf "$dst_path" sudo rsync -a --delete "${src_path}/" "${dst_path}/"
sudo cp -a "$src_path" "$dst_path"
echo "Filestore ${from_service}/${from_db} copied to ${to_service}/${to_db}." echo "Filestore ${from_service}/${from_db} copied to ${to_service}/${to_db}."
} }