mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
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>
31 lines
802 B
Bash
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"
|
|
}
|