Hello, promissed patch for ls to disable hard links highlighting is attached. A simple test case is included.
Kamil On Friday 20 March 2009 13:43:03 Kamil Dudka wrote: > On Friday 20 of March 2009 12:15:34 Pádraig Brady wrote: > > Wes Morgan wrote: > > > The new "hard link" highlighting would be nicer if it was optional. I > > > have lots of files with an "original" name that are also hard links to > > > a canonicalized version in another directory hierarchy. Instead of > > > showing the original coloring based on the extension, they show the > > > hard link coloring. Perhaps a special code for dircolors that tells > > > "ls" to ignore a class of highlighting and continue searching for > > > another match. > > > > That change was made recently: > > http://lists.gnu.org/archive/html/bug-coreutils/2008-10/msg00172.html > > Kamil indicated in that bug report that existing colors should take > > precedence over the hardlink color. This is the case for executable files > > for example, but not files whose color depends on name. > > Only security-important attributes are preferred before hard links. In any > other cases the behavior is equivalent to symbolic link. I propose a > one-line patch like this: > http://git.savannah.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=f3f1ccfd >871ee395e7fafc051c1b7dedb39fdfc9 > > With the patch user can choose to not highlight hardlinks in his own > profile. > > IMHO it's not common to distribute Linux (or any other systems) with tons > of hard-linked files. The hard links are mostly created by user. It should > be visible at first glance if the file is hard-linked unintentionally (e.g. > by omitting -s option of ln). > > The patch will be ready next week. Also any other ideas are welcome. > > Kamil
From a38f1a826e0f5eaade2c12bb668dc7b059372d9a Mon Sep 17 00:00:00 2001 From: Kamil Dudka <[email protected]> Date: Mon, 23 Mar 2009 19:29:41 +0100 Subject: [PATCH] ls: make possible to disable hard links highlighting src/ls.c (print_color_indicator): Skip hard link checking if not colored. tests/ls/hardlink: Add test case for disabled hard link highlighting. --- src/ls.c | 2 +- tests/ls/hardlink | 22 +++++++++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/ls.c b/src/ls.c index fa6a59a..d30e5a0 100644 --- a/src/ls.c +++ b/src/ls.c @@ -4008,7 +4008,7 @@ print_color_indicator (const char *name, mode_t mode, int linkok, type = C_CAP; else if ((mode & S_IXUGO) != 0) type = C_EXEC; - else if (1 < nlink) + else if (is_colored (C_HARDLINK) && (1 < nlink)) type = C_HARDLINK; } else if (S_ISDIR (mode)) diff --git a/tests/ls/hardlink b/tests/ls/hardlink index d65bb7a..28dbf64 100755 --- a/tests/ls/hardlink +++ b/tests/ls/hardlink @@ -26,19 +26,35 @@ working_umask_or_skip_ touch file file1 || framework_failure ln file1 file2 || skip_test_ "can't create hard link" -code='44;37' +code_hl='44;37' +code_png='01;35' fail=0 # regular file - not hard linked -LS_COLORS="hl=$code" ls -U1 --color=always file > out || fail=1 +LS_COLORS="hl=$code_hl" ls -U1 --color=always file > out || fail=1 printf "file\n" > out_ok || fail=1 compare out out_ok || fail=1 # hard links -LS_COLORS="hl=$code" ls -U1 --color=always file1 file2 > out || fail=1 +LS_COLORS="hl=$code_hl" ls -U1 --color=always file1 file2 > out || fail=1 printf "\033[0m\033[44;37mfile1\033[0m \033[44;37mfile2\033[0m \033[m" > out_ok || fail=1 compare out out_ok || fail=1 +# hard links and png +mv file2 file2.png || framework_failure +LS_COLORS="hl=$code_hl:*.png=$code_png" ls -U1 --color=always file1 file2.png > out || fail=1 +printf "\033[0m\033[44;37mfile1\033[0m +\033[44;37mfile2.png\033[0m +\033[m" > out_ok || fail=1 +compare out out_ok || fail=1 + +# hard links and png (hard links highlighting disabled) +LS_COLORS="hl=:*.png=$code_png" ls -U1 --color=always file1 file2.png > out || fail=1 +printf "file1 +\033[0m\033[01;35mfile2.png\033[0m +\033[m" > out_ok || fail=1 +compare out out_ok || fail=1 + Exit $fail -- 1.6.1.2
_______________________________________________ Bug-coreutils mailing list [email protected] http://lists.gnu.org/mailman/listinfo/bug-coreutils
