realpath: let --relative-to default to --relative-base
authorEric Blake <eblake@redhat.com>
Wed, 14 Mar 2012 19:42:59 +0000 (13:42 -0600)
committerEric Blake <eblake@redhat.com>
Thu, 15 Mar 2012 18:24:05 +0000 (12:24 -0600)
Most of the time, if someone wants to filter which paths are
relative while leaving all others absolute, they also want to
to the filtering based on the same --relative-to directory.
Make this easier to specify.

* src/realpath.c (main): Convert error to default.
* doc/coreutils.texi (realpath invocation): Document this.
* tests/misc/realpath: Adjust test to match.
* NEWS: Document it.

NEWS
doc/coreutils.texi
src/realpath.c
tests/misc/realpath

diff --git a/NEWS b/NEWS
index e9b3d20..5b53eb8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -68,6 +68,9 @@ GNU coreutils NEWS                                    -*- outline -*-
   systems for which getfilecon-, ACL-check- and XATTR-check-induced syscalls
   fail with ENOTSUP or similar.
 
+  'realpath --relative-base=dir' in isolation now implies '--relative-to=dir'
+  instead of causing a usage failure.
+
   split now supports an unlimited number of split files as default behavior.
 
 
index 39c9bbf..835c245 100644 (file)
@@ -12904,14 +12904,16 @@ pertaining to file existence.
 This option is valid when used with @option{--relative-to}, and will restrict
 the output of @option{--relative-to} so that relative names are output,
 only when @var{file}s are descendants of @var{base}.  Otherwise output the
-absolute file name.  Note: this option honors the @option{-m} and @option{-e}
+absolute file name.  If @option{--relative-to} was not specified, then
+the descendants of @var{base} are printed relative to @var{base}.
+Note: this option honors the @option{-m} and @option{-e}
 options pertaining to file existence.  For example:
 
 @example
 realpath --relative-to=/usr /tmp /usr/bin
 @result{} ../tmp
 @result{} bin
-realpath --relative-base=/usr --relative-to=/usr /tmp /usr/bin
+realpath --relative-base=/usr /tmp /usr/bin
 @result{} /tmp
 @result{} bin
 @end example
index 1972764..f95535b 100644 (file)
@@ -330,10 +330,7 @@ main (int argc, char **argv)
     }
 
   if (relative_base && !relative_to)
-    {
-      error (0, 0, _("--relative-base requires --relative-to"));
-      usage (EXIT_FAILURE);
-    }
+    relative_to = relative_base;
 
   bool need_dir = (can_mode & CAN_MODE_MASK) == CAN_EXISTING;
   if (relative_to)
index 1b83a04..9484ac4 100755 (executable)
@@ -43,11 +43,8 @@ ln -s /// three || framework_failure_
 realpath -Pqz . >/dev/null || fail=1
 # Operand is required
 realpath >/dev/null && fail=1
-# --relative-base and --relative-to require params
 realpath --relative-base . --relative-to . && fail=1
-# --relative-base requires --relative-to
-realpath --relative-base=dir1 . && fail=1
-realpath --relative-base --relative-to=dir1 . && fail=1
+realpath --relative-base . && fail=1
 
 # -e --relative-* require directories
 realpath -e --relative-to=dir1/f --relative-base=. . && fail=1
@@ -78,6 +75,11 @@ out=$(realpath -sm --relative-base=/usr --relative-to=/usr /tmp /usr) || fail=1
 test "$out" = "/tmp$nl." || fail=1
 out=$(realpath -sm --relative-base=/ --relative-to=/ / /usr) || fail=1
 test "$out" = ".${nl}usr" || fail=1
+# --relative-to defaults to the value of --relative-base
+out=$(realpath -sm --relative-base=/usr /tmp /usr) || fail=1
+test "$out" = "/tmp$nl." || fail=1
+out=$(realpath -sm --relative-base=/ / /usr) || fail=1
+test "$out" = ".${nl}usr" || fail=1
 # For now, --relative-base must be a prefix of --relative-to, or all output
 # will be absolute (compare to MacOS 'relpath -d dir start end').
 out=$(realpath -sm --relative-base=/usr/local --relative-to=/usr \