ln: add the --relative option
authorHarald Hoyer <harald@redhat.com>
Thu, 22 Mar 2012 20:51:20 +0000 (20:51 +0000)
committerPádraig Brady <P@draigBrady.com>
Thu, 22 Mar 2012 20:51:20 +0000 (20:51 +0000)
commit15b8318e93a947d1422e9a927f699eda1085cf0d
treed992d1a8f2dbc137446b6691c9144543c3e79cf6
parentb1428e3152afa3139a2968dd530e507ddd312051
ln: add the --relative option

With the "--relative --symbolic" options, ln computes the relative
symbolic link for the user.

So, ln works just as cp, but creates relative symbolic links instead
of copying the file.

I miss this feature since the beginning of using ln.

$ tree ./
/
`-- usr
    |-- bin
    `-- lib
        `-- foo
            `-- foo

4 directories, 1 file

$ ln -s -v --relative usr/lib/foo/foo usr/bin/foo
‘usr/bin/foo’ -> ‘../lib/foo/foo’

$ tree ./
/
`-- usr
    |-- bin
    |   `-- foo -> ../lib/foo/foo
    `-- lib
        `-- foo
            `-- foo

4 directories, 2 files

$ ln -s -v --relative usr/bin/foo usr/lib/foo/link-to-foo
‘usr/lib/foo/link-to-foo’ -> ‘foo’

$ tree ./
/
`-- usr
    |-- bin
    |   `-- foo -> ../lib/foo/foo
    `-- lib
        `-- foo
            |-- link-to-foo -> foo
            `-- foo

4 directories, 3 files

* src/Makefile.am: Reference the relpath module.
* src/ln.c (usage): Mention the new option.
(do_link): Call the relative conversion if specified.
(convert_abs_rel): Perform the relative conversion
using the relpath module.
* tests/ln/relative: Add a new test.
* tests/Makefile.am: Reference the new test.
* doc/coreutils.texi: Document the new feature.
* NEWS: Mention the new feature.
NEWS
doc/coreutils.texi
src/Makefile.am
src/ln.c
tests/Makefile.am
tests/ln/relative [new file with mode: 0755]