From: Taylor Blau <me@ttaylorr.com>
To: Jeff King <peff@peff.net>
Cc: fox <fox.gbr@townlong-yak.com>,
Eric Sunshine <sunshine@sunshineco.com>,
git@vger.kernel.org
Subject: Re: Bug report: v2.47.0 cannot fetch version 1 pack indexes
Date: Tue, 22 Oct 2024 11:18:36 -0400 [thread overview]
Message-ID: <ZxfCTO+COaoablPe@nand.local> (raw)
In-Reply-To: <20241022051402.GB1247135@coredump.intra.peff.net>
On Tue, Oct 22, 2024 at 01:14:02AM -0400, Jeff King wrote:
> > > +static char *pack_path_from_idx(const char *idx_path)
> > > +{
> > > + size_t len;
> > > + if (!strip_suffix(idx_path, ".idx", &len))
> > > + BUG("idx path does not end in .idx: %s", idx_path);
> > > + return xstrfmt("%.*s.pack", (int)len, idx_path);
> > > +}
> > > +
> > > struct packed_git *parse_pack_index(unsigned char *sha1, const char *idx_path)
> > > {
> > > - const char *path = sha1_pack_name(sha1);
> > > + char *path = pack_path_from_idx(idx_path);
> >
> > Huh. I would have thought we have such a helper function already. I
> > guess we probably do, but that it's also defined statically because it's
> > so easy to write.
>
> I thought so, too, but couldn't find one. We have pack_bitmap_filename()
> (and so on for .rev and .midx files) that goes from .pack to those
> extensions. But here we want to go from .idx to .pack. I think most
> stuff goes from ".pack" because that's what we store in the packed_git
> struct.
>
> There's also sha1_pack_index_name(), but that goes from a csum-file hash
> to a filename.
>
> I grepped around and strip_suffix() seems to be par for the course in
> similar situations within pack/repack code, so I think it's OK here.
It would kind of be nice to have a convenient function like:
const char *pack_ext_name(const struct packed_git *p,
const char *ext);
in our codebase, but that is well outside the scope of this patch ;-).
> > In any case, this looks like the right thing to do here. It would be
> > nice to have a corresponding test here, since unlike the other
> > finalize_object_file() changes, this one can be provoked
> > deterministically.
> >
> > Would you mind submitting this as a bona-fide patch, which I can then
> > pick up and start merging down?
>
> Yeah, the test is easy:
>
> diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh
> index 58189c9f7d..50a7b98813 100755
> --- a/t/t5550-http-fetch-dumb.sh
> +++ b/t/t5550-http-fetch-dumb.sh
> @@ -507,4 +507,14 @@ test_expect_success 'fetching via http alternates works' '
> git -c http.followredirects=true clone "$HTTPD_URL/dumb/alt-child.git"
> '
>
> +test_expect_success 'dumb http can fetch index v1' '
> + server=$HTTPD_DOCUMENT_ROOT_PATH/idx-v1.git &&
> + git init --bare "$server" &&
> + git -C "$server" --work-tree=. commit --allow-empty -m foo &&
> + git -C "$server" -c pack.indexVersion=1 gc &&
> +
> + git clone "$HTTPD_URL/dumb/idx-v1.git" &&
> + git -C idx-v1 fsck
> +'
> +
> test_done
Beautifully written. I wondered why you didn't use `test_commit -C
$server`, but it's because that repository is bare, and so needs
`--work-tree=.`, so what you wrote here makes sense.
> I raised some other more philosophical issues in the other part of the
> thread, but assuming the answer is "no, let's do the simplest thing",
> then I think this approach is OK.
>
> I'd also like to see if I can clean things up around parse_pack_index(),
> whose semantics I'm changing here (and which violates all manner of
> assumptions that we usually have about packed_git structs). It's used
> only by the dumb-http code, and I think we want to refactor it a bit so
> that nobody else is tempted to use it.
>
> I'll try to send something out tonight or tomorrow.
Sounds all good. Thanks!
> -Peff
Thanks,
Taylor
next prev parent reply other threads:[~2024-10-22 15:18 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-19 23:22 Bug report: v2.47.0 cannot fetch version 1 pack indexes fox
2024-10-20 0:37 ` Eric Sunshine
2024-10-21 20:06 ` Taylor Blau
2024-10-20 1:24 ` Jeff King
2024-10-20 2:40 ` Jeff King
2024-10-21 20:33 ` Taylor Blau
2024-10-22 5:14 ` Jeff King
2024-10-22 15:18 ` Taylor Blau [this message]
2024-10-25 6:41 ` [PATCH 0/11] dumb-http pack index v1 regression + cleanups Jeff King
2024-10-25 6:43 ` [PATCH 01/11] midx: avoid duplicate packed_git entries Jeff King
2024-10-25 21:09 ` Taylor Blau
2024-10-25 6:44 ` [PATCH 02/11] t5550: count fetches in "previously-fetched .idx" test Jeff King
2024-10-25 6:58 ` [PATCH 03/11] dumb-http: store downloaded pack idx as tempfile Jeff King
2024-10-25 21:18 ` Taylor Blau
2024-10-26 6:02 ` Jeff King
2024-10-28 0:14 ` Taylor Blau
2024-10-25 7:00 ` [PATCH 04/11] packfile: drop has_pack_index() Jeff King
2024-10-25 21:27 ` Taylor Blau
2024-10-25 7:00 ` [PATCH 05/11] packfile: drop sha1_pack_name() Jeff King
2024-10-25 7:01 ` [PATCH 06/11] packfile: drop sha1_pack_index_name() Jeff King
2024-10-25 7:02 ` [PATCH 07/11] packfile: warn people away from parse_packed_git() Jeff King
2024-10-25 21:28 ` Taylor Blau
2024-10-25 7:03 ` [PATCH 08/11] http-walker: use object_id instead of bare hash Jeff King
2024-10-25 7:05 ` [PATCH 09/11] packfile: convert find_sha1_pack() to use object_id Jeff King
2024-10-25 7:06 ` [PATCH 10/11] packfile: use object_id in find_pack_entry_one() Jeff King
2024-10-25 21:33 ` Taylor Blau
2024-10-25 7:08 ` [PATCH 11/11] packfile: use oidread() instead of hashcpy() to fill object_id Jeff King
2024-10-25 21:35 ` [PATCH 0/11] dumb-http pack index v1 regression + cleanups Taylor Blau
2024-10-21 20:23 ` Bug report: v2.47.0 cannot fetch version 1 pack indexes Taylor Blau
2024-10-22 5:00 ` Jeff King
2024-10-22 15:50 ` Taylor Blau
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=ZxfCTO+COaoablPe@nand.local \
--to=me@ttaylorr.com \
--cc=fox.gbr@townlong-yak.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
--cc=sunshine@sunshineco.com \
/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.