diff options
author | Eric Blake <ebb9@byu.net> | 2010-01-01 07:39:29 -0700 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2010-01-01 13:41:46 -0700 |
commit | b7f2b51c42edabd516c5ecc748a654da736c912c (patch) | |
tree | 75db10733b43f2bb3c46abc58b3384e77191f8af | |
parent | 84db964925680c912c601f616d4ab07f7bc19c3c (diff) | |
download | coreutils-b7f2b51c42edabd516c5ecc748a654da736c912c.tar.xz |
ls: fix color of broken symlinks colored as target
* src/ls.c (print_color_indicator): When using 'LINK target' in
dircolors, treat broken symlink as C_ORPHAN.
* tests/misc/ls-misc (sl-dangle2, sl-dangle3, sl-dangle4)
(sl-dangle5): Test for it, and add more coverage.
* NEWS: Document it.
* THANKS: Update.
Reported by Chris Jones.
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | THANKS | 1 | ||||
-rw-r--r-- | src/ls.c | 4 | ||||
-rwxr-xr-x | tests/misc/ls-misc | 38 |
4 files changed, 46 insertions, 1 deletions
@@ -4,6 +4,10 @@ GNU coreutils NEWS -*- outline -*- ** Bug fixes + ls -l --color no longer prints "argetm" in front of dangling + symlinks when the 'LINK target' directive was given to dircolors. + [bug introduced in fileutils-4.0] + rm -r --one-file-system works once again. The rewrite to make rm use fts introduced a regression whereby a commmand of the above form would fail for all subdirectories. @@ -105,6 +105,7 @@ Chip Salzenberg chip@valinux.com Chris Clayton chris2553@googlemail.com Chris Faylor cgf@cygnus.com Chris J. Bednar cjb@AdvancedDataSolutions.com +Chris Jones cjns1989@gmail.com Chris Lesniewski ctl@mit.edu Chris Sylvain csylvain@umm.edu Chris Yeo cyeo@biking.org @@ -4164,7 +4164,9 @@ print_color_indicator (const struct fileinfo *f, bool symlink_target) type = C_STICKY; } else if (S_ISLNK (mode)) - type = ((!linkok && color_indicator[C_ORPHAN].string) + type = ((!linkok + && (!strncmp (color_indicator[C_LINK].string, "target", 6) + || color_indicator[C_ORPHAN].string)) ? C_ORPHAN : C_LINK); else if (S_ISFIFO (mode)) type = C_FIFO; diff --git a/tests/misc/ls-misc b/tests/misc/ls-misc index a0774829a..27de57c79 100755 --- a/tests/misc/ls-misc +++ b/tests/misc/ls-misc @@ -185,6 +185,44 @@ my @Tests = restore_ls_colors; }}, ], + # Test for a bug fixed after coreutils-8.2. + ['sl-dangle2', '-o --color=always l', + {OUT_SUBST => 's/.*[0-9][0-9]:[0-9][0-9] //'}, + {OUT => "l -> nowhere\n"}, + {PRE => sub {symlink 'nowhere', 'l' or die "l: $!\n"; + push_ls_colors('ln=target') + }}, + {POST => sub {unlink 'l' or die "l: $!\n"; + restore_ls_colors; }}, + ], + ['sl-dangle3', '-o --color=always l', + {OUT_SUBST => 's/.*[0-9][0-9]:[0-9][0-9] //'}, + {OUT => "$e\e[40ml$e -> \e[34mnowhere$e\n\e[m"}, + {PRE => sub {symlink 'nowhere', 'l' or die "l: $!\n"; + push_ls_colors('ln=target:or=40:mi=34:') + }}, + {POST => sub {unlink 'l' or die "l: $!\n"; + restore_ls_colors; }}, + ], + ['sl-dangle4', '-o --color=always l', + {OUT_SUBST => 's/.*[0-9][0-9]:[0-9][0-9] //'}, + {OUT => "$e\e[36ml$e -> \e[35mnowhere$e\n\e[m"}, + {PRE => sub {symlink 'nowhere', 'l' or die "l: $!\n"; + push_ls_colors('ln=34:mi=35:or=36:') + }}, + {POST => sub {unlink 'l' or die "l: $!\n"; + restore_ls_colors; }}, + ], + ['sl-dangle5', '-o --color=always l', + {OUT_SUBST => 's/.*[0-9][0-9]:[0-9][0-9] //'}, + {OUT => "$e\e[34ml$e -> \e[35mnowhere$e\n\e[m"}, + {PRE => sub {symlink 'nowhere', 'l' or die "l: $!\n"; + push_ls_colors('ln=34:mi=35:') + }}, + {POST => sub {unlink 'l' or die "l: $!\n"; + restore_ls_colors; }}, + ], + # Test for a bug that was introduced in coreutils-4.5.4; fixed in 4.5.5. # To demonstrate it, the file in question (with executable bit set) # must not be a command line argument. |