Files
git/t/lib-loose.sh
Jeff King b5643b60ac t: add lib-loose.sh
This commit adds a shell library for writing raw loose objects into the
object database. Normally this is done with hash-object, but the
specific intent here is to allow broken objects that hash-object may not
support.

We'll convert several cases that use "hash-object --literally" to write
objects with invalid types. That works currently, but dropping this
dependency will allow us to remove that feature and simplify the
object-writing code.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-05-16 09:43:11 -07:00

31 lines
802 B
Bash

# Support routines for hand-crafting loose objects.
# Write a loose object into the odb at $1, with object type $2 and contents
# from stdin. Writes the oid to stdout. Example:
#
# oid=$(echo foo | loose_obj .git/objects blob)
#
loose_obj () {
cat >tmp_loose.content &&
size=$(wc -c <tmp_loose.content) &&
{
# Do not quote $size here; we want the shell
# to strip whitespace that "wc" adds on some platforms.
printf "%s %s\0" "$2" $size &&
cat tmp_loose.content
} >tmp_loose.raw &&
oid=$(test-tool $test_hash_algo <tmp_loose.raw) &&
suffix=${oid#??} &&
prefix=${oid%$suffix} &&
dir=$1/$prefix &&
file=$dir/$suffix &&
test-tool zlib deflate <tmp_loose.raw >tmp_loose.zlib &&
mkdir -p "$dir" &&
mv tmp_loose.zlib "$file" &&
rm tmp_loose.raw tmp_loose.content &&
echo "$oid"
}