From 586e51f0bc33727388df71f725dcd5c1a6f68d28 Mon Sep 17 00:00:00 2001 From: "Kyle J. McKay" Date: Sat, 10 Feb 2018 09:40:34 -0800 Subject: [PATCH] combine-packs.sh: update to latest This version improves the "move_aside" logic to better handle shared repositories. Signed-off-by: Kyle J. McKay --- jobd/combine-packs.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/jobd/combine-packs.sh b/jobd/combine-packs.sh index 6b5c198..ca984cb 100755 --- a/jobd/combine-packs.sh +++ b/jobd/combine-packs.sh @@ -17,7 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Version 1.2.1 +# Version 1.2.2 USAGE=" printf '%s\n' path-to-pack[.idx|.pack] ... | @@ -534,12 +534,20 @@ get_pack_base() { return 0 } +# atomic cp +dupe_file() { + _dupetmp="$(mktemp "$(dirname "$2")/packtmp-XXXXXX")" + cp -fp "$1" "$_dupetmp" + mv -f "$_dupetmp" "$2" +} + # add "old" prefix to passed in existing files, but be careful to hard-link # ALL the files to be renamed to the renamed name BEFORE removing anything move_aside() { for _f; do ! [ -f "$_f" ] || - ln -f "$_f" "$(dirname "$_f")/old$(basename "$_f")" + ln -f "$_f" "$(dirname "$_f")/old$(basename "$_f")" >/dev/null 2>&1 || + dupe_file "$_f" "$(dirname "$_f")/old$(basename "$_f")" done for _f; do if [ -f "$_f" ]; then -- 2.11.4.GIT