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