From: Nicolas Pitre <nico@cam.org>
To: Junio C Hamano <junkio@cox.net>
Cc: git@vger.kernel.org, Linus Torvalds <torvalds@osdl.org>,
Stephen Hemminger <shemminger@osdl.org>
Subject: Re: Recent and near future backward incompatibilities
Date: Sun, 15 Oct 2006 11:34:20 -0400 (EDT) [thread overview]
Message-ID: <Pine.LNX.4.64.0610151133450.17085@xanadu.home> (raw)
In-Reply-To: <7v4pu62ite.fsf@assigned-by-dhcp.cox.net>
On Sat, 14 Oct 2006, Junio C Hamano wrote:
> It was brought to my attention that the public git.git
> repository cannot be cloned with older versions of git. More
> precisely, packs generated with post 16854571 (NOT contained in
> v1.4.2.3 but in the current "master" and more importantly in
> v1.4.3-rc3 which I tagged tonight) can contain deltas that are
> not compatible with the version of git before d60fc1c8, which
> means that v1.1.6 and older (v1.2.0 and later are Ok).
Ahhhhhh. DAMN !
> One thing we can and should immediately do is to revert 16854571
> for now until we decide how to resolve this issue cleanly.
>
> These are what needs to happen but one of them is quite tricky:
>
> - the reusing of delta is what makes pack-objects practical,
> and it is expensive to look into existing delta to see if it
> is version 2 or version 3 before deciding to reuse each delta
> data, so even if we update pack-objects so that we can tell
> it to generate a pack that contains only version 2 deltas, it
> would be very expensive to do so and may not be practical.
Why not? After all users of GIT versions that don't understand pack
version 3 should be a very small minority by now.
> am not sure how to resolve this issue efficiently right now;
> we need a bit of thinking.
Actually it doesn't have to be that expensive to convert deltas v2 to
deltas v3 on the fly. They can be inflated, parsed, the copy ops that
exceed 0x10000 converted into multiple ops of smaller copy blocks, then
deflated. This is certainly much less costly than rematching deltas
from scratch.
Well I'd say you just revert pack v3 generation patch for now and
release v1.4.3 without it. Pack v3 generation can wait a bit longer
until we implement the above or users of GIT that can read packs v2 only
are so few that we shouldn't care anymore and tell them to use an
intermediate version of GIT in order to clone the latest. It is not
like if that makes such a big difference on pack size anyway (much less
than delta with offsets to base actually).
> - we need to add .git/config item that tells pack-objects to
> never generate version 3 delta for that particular
> repository. This is similar to the way we would need to
> control the use of delta-base-offset representation currently
> cooking in "next".
This is different. The delta-base-offset representation is decided at
run time every time a pack is generated and regardless if delta data is
being reused from another pack or regenerated afresh, and so with no
cost. So this is no issue for users of old GIT versions since the
native GIT protocol already handle it in a backward compatible manner.
The only issue here concerns users that don't use the native GIT
protocol. But in this case they have two options: either they switch to
the native protocol, or they upgrade to the latest GIT version which
can always be pulled with the native GIT protocol.
> We may have a similar issue when enabling generation of loose
> objects with new style headers. This is already controlled with
> the core.legacyheaders configuration item.
Sure, but those are never passed through the native GIT protocol which
makes it a much less critical issue.
Not being able to upgrade to the latest GIT in order to actually cope
with the new format because the primary GIT repository started to feed
old GIT versions with that new format unconditionally really is a
problem though.
I think we should not bend backward too much with repository
compatibility issues as long as there is no interoperability issues at
the protocol level. But the GIT protocol must always remain
interoperable with whatever GIT version still in use.
Nicolas
next prev parent reply other threads:[~2006-10-15 15:34 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-15 6:29 Recent and near future backward incompatibilities Junio C Hamano
2006-10-15 7:44 ` [PATCH] pack-objects: use of version 3 delta is now optional Junio C Hamano
2006-10-15 9:09 ` Jakub Narebski
2006-10-15 15:53 ` Nicolas Pitre
2006-10-15 18:10 ` Junio C Hamano
2006-10-15 18:18 ` Jakub Narebski
2006-10-15 18:51 ` Nicolas Pitre
2006-10-16 4:45 ` Junio C Hamano
2006-10-16 13:27 ` Nicolas Pitre
2006-10-15 18:30 ` Nicolas Pitre
2006-10-15 20:00 ` A Large Angry SCM
2006-10-16 2:52 ` Nicolas Pitre
2006-10-15 18:57 ` Linus Torvalds
2006-10-16 13:43 ` Nicolas Pitre
2006-10-17 16:12 ` Junio C Hamano
2006-10-17 16:51 ` Nicolas Pitre
2006-10-15 19:29 ` A Large Angry SCM
2006-10-15 14:52 ` Recent and near future backward incompatibilities Horst H. von Brand
2006-10-15 15:34 ` Nicolas Pitre [this message]
2006-10-15 18:14 ` Junio C Hamano
2006-10-15 22:40 ` Theodore Tso
2006-10-15 23:52 ` Linus Torvalds
2006-10-16 2:13 ` Stephen Hemminger
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.LNX.4.64.0610151133450.17085@xanadu.home \
--to=nico@cam.org \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=shemminger@osdl.org \
--cc=torvalds@osdl.org \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).