@matheusbsbs / matheus-bagliano / commits / e32dfec79f
Fork 0

repack: place temporary packs under .git/objects/pack/

git-pack-objects is already careful to start out its temporary packs under .git/objects/pack/ (cf. 8b4eb6b, Do not perform cross-directory renames when creating packs, 2008-09-22), but git-repack did not respond in kind so the effort was lost when the filesystem boundary is exactly at that directory. Let git-repack pass a path under .git/objects/pack/ as the base for its temporary packs. This means we might need the $PACKDIR sooner (before the pack-objects invocation), so move the mkdir up just to be safe. Also note that the only use of *.pack is in the find invocation way before the pack-objects call, so the temporary packs will not suddenly show up in any wildcards because of the directory change. Reported-by: Marat Radchenko <marat@slonopotamus.org> Signed-off-by: Thomas Rast <trast@student.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Thomas Rast committed Oct 19, 2010 at 11:50 UTC e32dfec79f99738df3c2ffca8a9b2257c9b681fb
1 file changed +3 -2
git-repack.sh
+3 -2
@@ -50,7 +50,7 @@ true)
50 esac
51
52 PACKDIR="$GIT_OBJECT_DIRECTORY/pack"
53 -PACKTMP="$GIT_OBJECT_DIRECTORY/.tmp-$$-pack"
53 +PACKTMP="$PACKDIR/.tmp-$$-pack"
54 rm -f "$PACKTMP"-*
55 trap 'rm -f "$PACKTMP"-*' 0 1 2 3 15
56
@@ -80,6 +80,8 @@ case ",$all_into_one," in
80 ;;
81 esac
82
83 +mkdir -p "$PACKDIR" || exit
84 +
85 args="$args $local ${GIT_QUIET:+-q} $no_reuse$extra"
86 names=$(git pack-objects --keep-true-parents --honor-pack-keep --non-empty --all --reflog $args </dev/null "$PACKTMP") ||
87 exit 1
@@ -88,7 +90,6 @@ if [ -z "$names" ]; then
90 fi
91
92 # Ok we have prepared all new packfiles.
91 -mkdir -p "$PACKDIR" || exit
93
94 # First see if there are packs of the same name and if so
95 # if we can move them out of the way (this can happen if we