From: "Shawn O. Pearce" <spearce@spearce.org>
To: Nicolas Pitre <nico@cam.org>
Cc: Junio C Hamano <gitster@pobox.com>, git@vger.kernel.org
Subject: Re: [PATCH] Make list of features auto-managed.
Date: Fri, 22 Jun 2007 00:33:29 -0400 [thread overview]
Message-ID: <20070622043329.GE17393@spearce.org> (raw)
In-Reply-To: <alpine.LFD.0.99.0706212337030.20596@xanadu.home>
Nicolas Pitre <nico@cam.org> wrote:
> First of all, I mentioned at the time that using a . for separator
> between the tagged version and the number of commits since then in the
> git-describe output was a bad idea. You just made the perfect
> demonstration of that. If it was just me I'd change that . for a + or a
> : like the original patch did.
I preferred + as well, but we wound up with - in the final patch,
and GIT-VERSION-GEN replaces the - with a . because that makes RPM
happier or something:
VN=$(echo "$VN" | sed -e 's/-/./g');
> Now you say that you don't want to wait for the release to happen before
> using this cool new feature. Well, I'd reply that life is tough.
In comparsion to other things we all must deal with in life, this
is a cakewalk. ;-) But yes, your point is well made.
> Either you
> trick Junio into making a release sooner because the feature is just too
> valuable to wait. Or you try the feature (git-blame -w) and hope for
> the best. Certainly in that case you can predict the behavior of
> older git-blame versions if you pass it -w which they don't understand?
I think that's where we are. I can develop the feature, trick
git-gui into enabling it, but most end-users won't be able to use
it until Junio makes a 1.5.3-rc* or 1.5.3 final. Tough for them.
Tricking Junio is very hard, he isn't easily tricked. A good
quality for a mantainer to have.
> > I'd like to at least gracefully fail by
> > disabling an option, or suggesting the user upgrade their plumbing,
> > if an option isn't supported.
>
> Well you should be able to just try the option and detect it when it
> isn't supported.
Sure.
Except sometimes we have been lax about option checking and don't
always fail (though we usually do, but haven't always). And on
Windows doing a fork+exec to poll an option is expensive. Worse,
some options are destructive. For example `update-ref -d`.
Should I run `update-ref -d refs/heads/master` to see if the
-d option is supported by update-ref, so that I know if I should
create a particular UI widget or not? No, of course not. I should
use a special temporary name, like GITGUI_TEST_FEATURE. But now
I have to create and delete a temporary item just to decide if a
UI feature should be enabled. And if the feature doesn't exist,
then I have to cleanup the temporary item "by hand".
Annoying. Like this email thread I'm sure has become.
> > Unlike how we gracefully fail with a useful error message say
> > when an early 1.4 release that doesn't support offset deltas is
> > given a packfile with an OFS_DELTA in it (corrupt pack, recently
> > rediscussed on list). Or when a 1.5.1 client tries to checkout
> > a tree that uses the new subproject mode in 1.5.2 (missing blob,
> > recently discussed on #git).
>
> Those are different as you have an older version that couldn't
> anticipate the future. In your case you can "anticipate the past".
Yes, however my point here is that I think we have historically
been bad about making our software reasonably future-proof.
The .pack file has a version field, with value 2. REF_DELTA is not
supported by those binaries that predated its introduction. They are
unable to properly unpack, index or read a packfile using REF_DELTA.
Why did the .pack version stay at 2 if REF_DELTA is used in the file?
The packed-refs file was introduced without a version header
(whoops). Later Junio had to wedge things into there in order to
get a version header of sorts so we could have the tag deref values
cached in the packed-refs.
We weren't strict enough in checking file modes in the tree parser
(yes, that was actually a real bug) but basically we didn't think
ahead to what an older binary should do when a future binary used a
file mode we didn't understand. For example, the user setuid bit.
Or the new dirlink thing, which isn't even a valid mode in UNIX.
I think we are getting a little better at it, but in general we
have a really poor track record in this area.
--
Shawn.
next prev parent reply other threads:[~2007-06-22 4:33 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-21 4:59 [PATCH] Introduce git version --list-features for porcelain use Shawn O. Pearce
2007-06-21 5:47 ` Junio C Hamano
2007-06-21 6:10 ` Shawn O. Pearce
2007-06-21 7:02 ` Junio C Hamano
2007-06-21 9:00 ` [PATCH] Make list of features auto-managed Junio C Hamano
2007-06-21 9:18 ` Junio C Hamano
2007-06-21 15:55 ` Nicolas Pitre
2007-06-21 19:32 ` Junio C Hamano
2007-06-22 3:25 ` Shawn O. Pearce
2007-06-22 3:58 ` Junio C Hamano
2007-06-22 4:07 ` Nicolas Pitre
2007-06-22 4:33 ` Shawn O. Pearce [this message]
2007-06-22 5:15 ` Nicolas Pitre
2007-06-22 9:59 ` Josef Weidendorfer
2007-06-22 14:03 ` Catalin Marinas
2007-06-21 11:58 ` [PATCH] Introduce git version --list-features for porcelain use Johannes Schindelin
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=20070622043329.GE17393@spearce.org \
--to=spearce@spearce.org \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=nico@cam.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.
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.