Re: [PATCH 1/1] t/test-lib: make `test_dir_is_empty` more robust
- From
Eric Sunshine <sunshine@sunshineco.com>
- Date
- Aug 5, 2018, 05:23 UTC
- Message-ID
- <CAPig+cQSryjWrFZML_g0fR5oq6dzVaWPXm_4R-Jg_ay1R2DzbQ@mail.gmail.com>
- In-Reply-To
- <20180805041956.GI258270@aiede.svl.corp.google.com>
On Sun, Aug 5, 2018 at 12:20 AM Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 16 quoted lines
> William Chargin wrote:
> > test_dir_is_empty () {
> > test_path_is_dir "$1" &&
> > - if test -n "$(ls -a1 "$1" | egrep -v '^\.\.?$')"
> > + if test "$(ls -A1 "$1" | wc -c)" != 0
>
> Another portability gotcha: wc output includes a space on Mac so this
> test would always return true there. How about
>
> if test -n "$(ls -A1 "$1")"
>
> "ls -A" was added in POSIX.1-2017. [...]
> That's very recent, but the widespread implementation it mentions is
> less so. This would be our first use of "ls -A", so I'd be interested
> to hear from people on more obscure platforms. It does seem to be
> widespread.A simpler approach, without the portability concerns of -A, would be to remove the "." and ".." lines from the top of the listing:
ls -f1 "$1" | sed '1,2d'
If we're worried about -f not being sufficiently portable, then an even simpler approach would be to check whether the output of 'ls -a1' has more lines than the two expected ("." and ".."):
test $(ls -a1 "$1" | wc -l) -gt 2
I think I favor this final implementation over the others.