Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Jun 2015 23:54:23 +0200
From:      Jilles Tjoelker <jilles@stack.nl>
To:        Xin LI <delphij@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r284162 - head/bin/ls
Message-ID:  <20150619215423.GA34741@stack.nl>
In-Reply-To: <201506081913.t58JD5KX090442@svn.freebsd.org>
References:  <201506081913.t58JD5KX090442@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Jun 08, 2015 at 07:13:05PM +0000, Xin LI wrote:
> Author: delphij
> Date: Mon Jun  8 19:13:04 2015
> New Revision: 284162
> URL: https://svnweb.freebsd.org/changeset/base/284162

> Log:
>   It has been long time that when doing 'ls -G /path/to/a/symlink', instead of
>   using the color of symbolic link, the color is determined by the link target.
>   This behavior was quite confusing.

>   Looking at the file history, it looks like that r203665 intends to fix this
>   but the issue was never actually fixed.

>   Fix this by not setting FTS_COMFOLLOW when color is requested like what was
>   done in r203665.

>   MFC after:	2 weeks

> Modified:
>   head/bin/ls/ls.c

> Modified: head/bin/ls/ls.c
> ==============================================================================
> --- head/bin/ls/ls.c	Mon Jun  8 18:59:14 2015	(r284161)
> +++ head/bin/ls/ls.c	Mon Jun  8 19:13:04 2015	(r284162)
> @@ -413,9 +413,14 @@ main(int argc, char *argv[])
>  
>  	/*
>  	 * If not -F, -P, -d or -l options, follow any symbolic links listed on
> -	 * the command line.
> +	 * the command line, unless in color mode in which case we need to
> +	 * distinguish file type for a symbolic link itself and its target.
>  	 */
> -	if (!f_nofollow && !f_longform && !f_listdir && (!f_type || f_slash))
> +	if (!f_nofollow && !f_longform && !f_listdir && (!f_type || f_slash)
> +#ifdef COLORLS
> +	    && !f_color
> +#endif
> +	    )
>  		fts_options |= FTS_COMFOLLOW;
>  
>  	/*

Hmm. This makes -G or CLICOLOR env behave like -F in that symlinks are
no longer followed by default. This at least needs a change in the man
page to document it, and I'm not sure whether -G should actually modify
ls's action beyond adding colour.

For example, in stable/10 doing ls /sys, ls -p /sys and ls -G /sys show
a directory listing of the kernel source, while ls -F /sys shows just
the symlink.

What r203665 fixed was colour, inode number, etc. when -P was given and
-F/-d/-l were not.

I'll admit that this -F/-d/-l thing is bizarre but it has grown that way
historically and I've found ls implementations that deviate from this
annoying (e.g. on some embedded systems).

-- 
Jilles Tjoelker



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150619215423.GA34741>