From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 09/13] t: add lib-loose.sh
Date: Mon, 19 May 2025 08:12:53 -0700 [thread overview]
Message-ID: <xmqqh61gprbe.fsf@gitster.g> (raw)
In-Reply-To: <20250516045002.GI22242@coredump.intra.peff.net> (Jeff King's message of "Fri, 16 May 2025 00:50:02 -0400")
Jeff King <peff@peff.net> writes:
> +# 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 &&
Nice to have this comment.
We probably could also do
printf "%s %d\0" "$2" "$size"
to cope with possible leading space padding, but your version makes
the intent a lot clearer.
> + cat tmp_loose.content
> + } >tmp_loose.raw &&
OK, a loose object file is a deflated bytestream of object header
followed by the payload, and because the header records the size
of the payload, we need to read the payload to its end first.
> + oid=$(test-tool $test_hash_algo <tmp_loose.raw) &&
And hashing the raw gives us the object name.
> + suffix=${oid#??} &&
> + prefix=${oid%$suffix} &&
> + dir=$1/$prefix &&
> + file=$dir/$suffix &&
OK.
> + test-tool zlib deflate <tmp_loose.raw >tmp_loose.zlib &&
> + mkdir -p "$dir" &&
> + mv tmp_loose.zlib "$file" &&
Ah, you are being very careful. As this is merely a test, we
probably could do without tmp_loose.zlib but I do not mind it being
careful.
> + rm tmp_loose.raw tmp_loose.content &&
> + echo "$oid"
> +}
> diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh
> index d96d02ad7d..317da6869c 100755
> --- a/t/t1006-cat-file.sh
> +++ b/t/t1006-cat-file.sh
> @@ -3,6 +3,7 @@
> test_description='git cat-file'
>
> . ./test-lib.sh
> +. "$TEST_DIRECTORY/lib-loose.sh"
>
> test_cmdmode_usage () {
> test_expect_code 129 "$@" 2>err &&
> @@ -657,12 +658,12 @@ test_expect_success 'setup bogus data' '
> bogus_short_type="bogus" &&
> bogus_short_content="bogus" &&
> bogus_short_size=$(strlen "$bogus_short_content") &&
> - bogus_short_oid=$(echo_without_newline "$bogus_short_content" | git hash-object -t $bogus_short_type --literally -w --stdin) &&
> + bogus_short_oid=$(echo_without_newline "$bogus_short_content" | loose_obj .git/objects $bogus_short_type) &&
>
> bogus_long_type="abcdefghijklmnopqrstuvwxyz1234679" &&
> bogus_long_content="bogus" &&
> bogus_long_size=$(strlen "$bogus_long_content") &&
> - bogus_long_oid=$(echo_without_newline "$bogus_long_content" | git hash-object -t $bogus_long_type --literally -w --stdin)
> + bogus_long_oid=$(echo_without_newline "$bogus_long_content" | loose_obj .git/objects $bogus_long_type)
> '
Nice.
next prev parent reply other threads:[~2025-05-19 15:12 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-16 4:49 [PATCH 0/13] dropping support for non-standard object types Jeff King
2025-05-16 4:49 ` [PATCH 01/13] object-file.h: fix typo in variable declaration Jeff King
2025-05-16 4:49 ` [PATCH 02/13] cat-file: make --allow-unknown-type a noop Jeff King
2025-05-16 9:52 ` Patrick Steinhardt
2025-05-19 6:16 ` Jeff King
2025-05-19 7:22 ` Patrick Steinhardt
2025-05-16 16:47 ` Junio C Hamano
2025-05-16 4:49 ` [PATCH 03/13] object-file: drop OBJECT_INFO_ALLOW_UNKNOWN_TYPE flag Jeff King
2025-05-16 4:49 ` [PATCH 04/13] cat-file: use type enum instead of buffer for -t option Jeff King
2025-05-16 16:56 ` Junio C Hamano
2025-05-16 4:49 ` [PATCH 05/13] oid_object_info_convert(): stop using string for object type Jeff King
2025-05-16 4:49 ` [PATCH 06/13] fsck: stop using object_info->type_name strbuf Jeff King
2025-05-16 9:52 ` Patrick Steinhardt
2025-05-19 14:26 ` Junio C Hamano
2025-05-19 17:00 ` Jeff King
2025-05-16 4:49 ` [PATCH 07/13] oid_object_info(): drop type_name strbuf Jeff King
2025-05-19 14:58 ` Junio C Hamano
2025-05-16 4:49 ` [PATCH 08/13] t/helper: add zlib test-tool Jeff King
2025-05-19 15:03 ` Junio C Hamano
2025-05-19 17:03 ` Jeff King
2025-05-21 13:44 ` Junio C Hamano
2025-05-16 4:50 ` [PATCH 09/13] t: add lib-loose.sh Jeff King
2025-05-16 9:52 ` Patrick Steinhardt
2025-05-19 6:17 ` Jeff King
2025-05-19 15:12 ` Junio C Hamano [this message]
2025-05-16 4:50 ` [PATCH 10/13] hash-object: stop allowing unknown types Jeff King
2025-05-19 15:15 ` Junio C Hamano
2025-05-16 4:50 ` [PATCH 11/13] hash-object: merge HASH_* and INDEX_* flags Jeff King
2025-05-16 9:52 ` Patrick Steinhardt
2025-05-16 4:50 ` [PATCH 12/13] hash-object: handle --literally with OPT_NEGBIT Jeff King
2025-05-19 15:30 ` Junio C Hamano
2025-05-16 4:50 ` [PATCH 13/13] object-file: drop support for writing objects with unknown types Jeff King
2025-05-16 9:52 ` Patrick Steinhardt
2025-05-19 15:32 ` Junio C Hamano
2025-05-16 16:36 ` [PATCH 0/13] dropping support for non-standard object types Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqh61gprbe.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.