git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2] t1404: add a bunch of tests of D/F conflicts

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Oct 28, 2017, 16:42 UTC
Message-ID
<20171028164249.ufro5weobwadfonv@genre.crustytoothpaste.net>
In-Reply-To
<20171026063250.dckc22ocr3zjmsxv@sigill.intra.peff.net>
On Wed, Oct 25, 2017 at 11:32:51PM -0700, Jeff King wrote:
Show 10 quoted lines
> On Wed, Oct 25, 2017 at 10:03:09AM +0200, Michael Haggerty wrote:
> 
> > > Yeah. It's supported by dash and many other shells, but we do try to
> > > avoid it[1]. I think in this case we could just drop it (but keep
> > > setting the "local foo" ones to empty with "foo=".
> > 
> > I do wish that we could allow "local", as it avoids a lot of headaches
> > and potential breakage. According to [1],
> 
> Agreed.

This would be useful. Debian requires that all implementations that implement /bin/sh support local and a small number of other features.

There is discussion in the Austin Group issue tracker about adding this feature to POSIX, but it's gotten bogged down over lexical versus dynamic scoping. Everyone agrees that it's a desirable feature, though.

Show 7 quoted lines
> > He mentions that ksh93 doesn't support "local", but that it differs from
> > POSIX in many other ways, too.
> 
> Yes, the conclusion we came to in the thread I linked earlier is the
> same: ksh is affected, but that shell is a problem for other reasons. I
> don't know if anybody tested with "modern" ksh like mksh, though. Should
> be easy enough:

As far as I can tell, bash, dash, posh, mksh, pdksh, zsh, and busybox sh all support local. From my reading of the documentation, so does sh on FreeBSD, NetBSD, and OpenBSD. Not all of these are good choices for a POSIXy sh, though.

ksh93 will support local if you alias it to typeset, but only when called from functions defined with "function", not normal shell-style functions. I have a gist[0] that does absurd things to work around that, but I wouldn't recommend that for production use.

Solaris 11.1's man page doesn't document local in sh (which is a ksh88 variant) and ksh is ksh93, so it doesn't appear to support it. Solaris 11.3 documents bash, so it's a non-issue there.

It's my understanding that using ksh as a POSIXy sh variant is very common on proprietary Unices, so its lack of compatibility may be a dealbreaker. Then again, many of those systems may have bash installed.

Show 19 quoted lines
> > Perhaps we could slip in a couple of "local" as a compatibility test to
> > see if anybody complains, like we did with a couple of C features recently.
> 
> That sounds reasonable to me. But from the earlier conversation, beware
> that:
> 
>   local x
>   ...
>   x=5
> 
> is not necessarily enough to notice the problem on broken shells (they
> may complain that "local" is not a command, and quietly stomp on the
> global). I think:
> 
>   local x=5
> 
> would be enough (though depend on how you use $x, the failure mode might
> be pretty subtle). Or we could even add an explicit test in t0000 like
> the example above.

I'd recommend an explicit test for this. It's much easier to track down that way than seeing other failure scenarios. People will also usually complain about failing tests.

[0] https://gist.github.com/bk2204/9dd24df0e4499a02a300578ebdca4728
-- 
brian m. carlson / brian with sandals: Houston, Texas, US
https://www.crustytoothpaste.net/~bmc | My opinion only
OpenPGP: https://keybase.io/bk2204
Previous: Jeff KingNext: Junio C Hamano
Message 8 of 14 in “Fix an error-handling path when locking refs”
  1. 0/2 Fix an error-handling path when locking refsMichael Haggerty, Oct 24, 2017
  2. 1/2 t1404: add a bunch of tests of D/F conflictsMichael Haggerty, Oct 24, 2017
  3. Eric SunshineOct 24, 2017
  4. Jeff KingOct 24, 2017
  5. Michael HaggertyOct 25, 2017
  6. Michael HaggertyOct 25, 2017
  7. Jeff KingOct 26, 2017
  8. brian m. carlsonOct 28, 2017
  9. Junio C HamanoOct 29, 2017
  10. brian m. carlsonOct 29, 2017
  11. 2/2 files_transaction_prepare(): fix handling of ref lock failureMichael Haggerty, Oct 24, 2017
  12. Jeff KingOct 24, 2017
  13. Junio C HamanoOct 25, 2017
  14. Jeff KingOct 24, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.