From d059274f5345f1ad226b302a572defddad32890b Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mar 29 2010 17:20:34 +0000 Subject: - a new option df --direct --- diff --git a/coreutils-df-direct.patch b/coreutils-df-direct.patch new file mode 100644 index 0000000..380f1b1 --- /dev/null +++ b/coreutils-df-direct.patch @@ -0,0 +1,188 @@ +diff --git a/doc/coreutils.texi b/doc/coreutils.texi +index fa21f03..7b8b622 100644 +--- a/doc/coreutils.texi ++++ b/doc/coreutils.texi +@@ -10104,6 +10104,13 @@ pseudo-file-systems, such as automounter entries. + Scale sizes by @var{size} before printing them (@pxref{Block size}). + For example, @option{-BG} prints sizes in units of 1,073,741,824 bytes. + ++@itemx --direct ++@opindex --direct ++@cindex direct statfs for a file ++Do not resolve mount point and show statistics directly for a file. It can be ++especially useful for NFS mount points if there is a boundary between two ++storage policies behind the mount point. ++ + @itemx --total + @opindex --total + @cindex grand total of disk size, usage and available space +diff --git a/src/df.c b/src/df.c +index b862879..a74c353 100644 +--- a/src/df.c ++++ b/src/df.c +@@ -110,6 +110,9 @@ static bool print_type; + /* If true, print a grand total at the end. */ + static bool print_grand_total; + ++/* If true, show statistics for a file instead of mount point. */ ++static bool direct_statfs; ++ + /* Grand total data. */ + static struct fs_usage grand_fsu; + +@@ -118,13 +121,15 @@ static struct fs_usage grand_fsu; + enum + { + NO_SYNC_OPTION = CHAR_MAX + 1, +- SYNC_OPTION ++ SYNC_OPTION, ++ DIRECT_OPTION + }; + + static struct option const long_options[] = + { + {"all", no_argument, NULL, 'a'}, + {"block-size", required_argument, NULL, 'B'}, ++ {"direct", no_argument, NULL, DIRECT_OPTION}, + {"inodes", no_argument, NULL, 'i'}, + {"human-readable", no_argument, NULL, 'h'}, + {"si", no_argument, NULL, 'H'}, +@@ -205,7 +210,10 @@ print_header (void) + human_readable (output_block_size, buf, opts, 1, 1)); + } + +- fputs (_(" Mounted on\n"), stdout); ++ if (direct_statfs) ++ fputs (_(" File\n"), stdout); ++ else ++ fputs (_(" Mounted on\n"), stdout); + } + + /* Is FSTYPE a type of file system that should be listed? */ +@@ -754,6 +762,17 @@ show_point (const char *point, const struct stat *statp) + static void + show_entry (char const *name, struct stat const *statp) + { ++ if (direct_statfs) ++ { ++ char *resolved = canonicalize_file_name (name); ++ if (resolved) ++ { ++ show_dev (NULL, resolved, NULL, NULL, false, false, NULL); ++ free (resolved); ++ return; ++ } ++ } ++ + if ((S_ISBLK (statp->st_mode) || S_ISCHR (statp->st_mode)) + && show_disk (name)) + return; +@@ -820,6 +839,7 @@ Mandatory arguments to long options are mandatory for short options too.\n\ + fputs (_("\ + -a, --all include dummy file systems\n\ + -B, --block-size=SIZE use SIZE-byte blocks\n\ ++ --direct show statistics for a file instead of mount point\n\ + --total produce a grand total\n\ + -h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)\n\ + -H, --si likewise, but use powers of 1000 not 1024\n\ +@@ -894,6 +914,9 @@ main (int argc, char **argv) + xstrtol_fatal (e, oi, c, long_options, optarg); + } + break; ++ case DIRECT_OPTION: ++ direct_statfs = true; ++ break; + case 'i': + inode_format = true; + break; +@@ -954,6 +977,13 @@ main (int argc, char **argv) + } + } + ++ if (direct_statfs && show_local_fs) ++ { ++ error (0, 0, _("options --direct and --local (-l) are mutually " ++ "exclusive")); ++ usage (EXIT_FAILURE); ++ } ++ + if (human_output_opts == -1) + { + if (posix_format) +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 1cb5a76..ab7abb4 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -328,6 +328,7 @@ TESTS = \ + dd/stderr \ + dd/unblock \ + dd/unblock-sync \ ++ df/direct \ + df/total-verify \ + du/2g \ + du/8gb \ +diff --git a/tests/df/direct b/tests/df/direct +new file mode 100644 +index 0000000..9088f27 +--- /dev/null ++++ b/tests/df/direct +@@ -0,0 +1,59 @@ ++#!/bin/sh ++# Ensure "df --direct" works as documented ++ ++# Copyright (C) 2010 Free Software Foundation, Inc. ++ ++# This program is free software: you can redistribute it and/or modify ++# it under the terms of the GNU General Public License as published by ++# the Free Software Foundation, either version 3 of the License, or ++# (at your option) any later version. ++ ++# This program is distributed in the hope that it will be useful, ++# but WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++# GNU General Public License for more details. ++ ++# You should have received a copy of the GNU General Public License ++# along with this program. If not, see . ++ ++if test "$VERBOSE" = yes; then ++ set -x ++ df --version ++fi ++ ++. $srcdir/test-lib.sh ++ ++df || skip_test_ "df fails" ++ ++DIR=`pwd` || framework_failure ++FILE="$DIR/file" ++touch "$FILE" || framework_failure ++echo "$FILE" > file_exp || framework_failure ++echo "Mounted on" > header_mounted_exp || framework_failure ++echo "File" > header_file_exp || framework_failure ++ ++fail=0 ++ ++df --portability "$FILE" > df_out || fail=1 ++df --portability --direct "$FILE" > df_direct_out || fail=1 ++df --portability --direct --local "$FILE" > /dev/null 2>&1 && fail=1 ++ ++# check df header ++$AWK '{ if (NR==1) print $6 " " $7; }' df_out > header_mounted_out \ ++ || framework_failure ++$AWK '{ if (NR==1) print $6; }' df_direct_out > header_file_out \ ++ || framework_failure ++compare header_mounted_out header_mounted_exp || fail=1 ++compare header_file_out header_file_exp || fail=1 ++ ++# check df output (without --direct) ++$AWK '{ if (NR==2) print $6; }' df_out > file_out \ ++ || framework_failure ++compare file_out file_exp && fail=1 ++ ++# check df output (with --direct) ++$AWK '{ if (NR==2) print $6; }' df_direct_out > file_out \ ++ || framework_failure ++compare file_out file_exp || fail=1 ++ ++Exit $fail diff --git a/coreutils.spec b/coreutils.spec index 5efab8e..ba4d842 100644 --- a/coreutils.spec +++ b/coreutils.spec @@ -1,7 +1,7 @@ Summary: A set of basic GNU tools commonly used in shell scripts Name: coreutils Version: 8.4 -Release: 6%{?dist} +Release: 7%{?dist} License: GPLv3+ Group: System Environment/Base Url: http://www.gnu.org/software/coreutils/ @@ -30,6 +30,8 @@ Patch101: coreutils-6.10-manpages.patch Patch102: coreutils-7.4-sttytcsadrain.patch #do display processor type for uname -p/-i based on uname(2) syscall Patch103: coreutils-8.2-uname-processortype.patch +#df --direct +Patch104: coreutils-df-direct.patch # sh-utils #add info about TZ envvar to date manpage @@ -124,6 +126,7 @@ Libraries for coreutils package. %patch101 -p1 -b .manpages %patch102 -p1 -b .tcsadrain %patch103 -p1 -b .sysinfo +%patch104 -p1 -b .dfdirect # sh-utils %patch703 -p1 -b .dateman @@ -145,7 +148,7 @@ Libraries for coreutils package. %patch950 -p1 -b .selinux %patch951 -p1 -b .selinuxman -chmod a+x tests/misc/sort-mb-tests +chmod a+x tests/misc/sort-mb-tests tests/df/direct #fix typos/mistakes in localized documentation(#439410, #440056) find ./po/ -name "*.p*" | xargs \ @@ -337,6 +340,9 @@ fi %{_libdir}/coreutils %changelog +* Mon Mar 29 2010 Kamil Dudka - 8.4-7 +- a new option df --direct + * Sat Mar 20 2010 Ondrej Vasik - 8.4-6 - run tput colors in colorls profile.d scripts only in the interactive mode(#450424)