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

Reply via email to