Просмотр исходного кода

fix(relup): create tmp dir to preserve current files

Shawn 3 лет назад
Родитель
Сommit
40ad23ee74
1 измененных файлов с 8 добавлено и 4 удалено
  1. 8 4
      build

+ 8 - 4
build

@@ -108,15 +108,19 @@ make_elixir_rel() {
 ## extract previous version .tar.gz files to _build/$PROFILE/rel/emqx before making relup
 make_relup() {
     local rel_dir="_build/$PROFILE/rel/emqx"
-    mkdir -p "${rel_dir}/lib"
-    mkdir -p "${rel_dir}/releases"
     local name_pattern
     name_pattern="${PROFILE}-$(./pkg-vsn.sh "$PROFILE" --vsn_matcher --long)"
     local releases=()
     while read -r tgzfile ; do
         local base_vsn
         base_vsn="$(echo "$tgzfile" | grep -oE "[0-9]+\.[0-9]+\.[0-9]+(-(alpha|beta|rc)\.[0-9])?(-[0-9a-f]{8})?" | head -1)"
-        tar -C "$rel_dir" -zxf "$tgzfile" --keep-old-files releases lib
+        ## we have to create tmp dir to untar old tgz, as `tar --skip-old-files` is not supported on all plantforms
+        local tmp_dir
+        tmp_dir="$(mktemp -d -t emqx.XXXXXXX)"
+        tar -C "$tmp_dir" -zxf "$tgzfile"
+        cp -npr "$tmp_dir/releases"/* "${rel_dir}/releases/" || true
+        cp -npr "$tmp_dir/lib"/* "${rel_dir}/lib/" || true
+        rm -rf "$tmp_dir"
         releases+=( "$base_vsn" )
     done < <("$FIND" _upgrade_base -maxdepth 1 -name "${name_pattern}.tar.gz" -type f)
     if [ ${#releases[@]} -eq 0 ]; then
@@ -185,7 +189,7 @@ make_tgz() {
     ## create tar after change dir (for windows)
     ## to avoid creating an extra level of 'emqx' dir in the .tar.gz file
     pushd "${tard}/emqx" >/dev/null
-    tar -zcf "../${target_name}" *
+    tar -zcf "../${target_name}" -- *
     popd >/dev/null
     mv "${tard}/${target_name}" "${target}"
     case "$SYSTEM" in