mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-06 00:44:07 +01:00
fix: pre-landing review fixes (pass 4)
The pack's staged-blob list comes from the copied index, holds only blobs staged against HEAD (not every tracked blob), skips gitlinks whose commit the superproject lacks, and dies with its own message when pack-objects fails. The live-checkout test covers a gitlink entry and a valueless remote key replayed as true. CHANGELOG names the staged-blob carry. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
ecf3ad78e6
commit
f7eeda8aa3
3 files changed
+15
-9
No files matched your search
@@ -626,15 +626,19 @@ cmd_pack() {
|
||||
git -C "$tmp/.git" config --add "${entry%%$'\n'*}" "${entry#*$'\n'}"
|
||||
done < <(git -C "$gitdir" config --local --null --get-regexp '^(remote|branch)\.' 2>/dev/null || true)
|
||||
# The checkout's index rides along so the VM's status matches, except a
|
||||
# split index, whose shared half lives only in the original git dir. Its
|
||||
# staged blobs are not behind any ref, so they travel as a pack of their
|
||||
# own; without them the VM's write-tree (gstack-wtree) cannot read a
|
||||
# split index, whose shared half lives only in the original git dir. The
|
||||
# blobs staged against HEAD are behind no ref, so they travel as a pack of
|
||||
# their own; without them the VM's write-tree (gstack-wtree) cannot read a
|
||||
# staged file.
|
||||
if [ "$(git -C "$src" config --bool core.splitIndex 2>/dev/null)" != true ]; then
|
||||
cp "$(cd "$src" && cd "$(dirname "$(git rev-parse --git-path index)")" && pwd)/index" "$tmp/.git/index"
|
||||
git -C "$src" ls-files -s | awk '{print $2}' | sort -u \
|
||||
| git -C "$src" pack-objects -q --stdout 2>/dev/null \
|
||||
| git -C "$tmp/.git" unpack-objects -q
|
||||
# Read the copy, not the live index, so the pack matches it; a gitlink's
|
||||
# sha (mode 160000) is a submodule commit this object store lacks.
|
||||
GIT_INDEX_FILE="$tmp/.git/index" git -C "$src" diff --cached --raw --no-abbrev HEAD \
|
||||
| awk '$2 != "160000" && $4 !~ /^0+$/ {print $4}' \
|
||||
| git -C "$src" pack-objects -q --stdout \
|
||||
| git -C "$tmp/.git" unpack-objects -q \
|
||||
|| die "pack: could not snapshot the staged blobs of $src"
|
||||
fi
|
||||
(
|
||||
cd "$src"
|
||||
|
||||
Reference in new issue
Block a user