Merge branch 'master' into bloom
[adu.git] / adu.ggo
diff --git a/adu.ggo b/adu.ggo
index 55e5c5aaeb7c4e63de6342c9257cb2e72e91ed7b..a180f1fc43e546e1d8c789cfb45678f01aeff0cc 100644 (file)
--- a/adu.ggo
+++ b/adu.ggo
@@ -3,7 +3,7 @@
 # Licensed under the GPL v2. For licencing details see COPYING.
 
 package "adu"
-purpose "advanced disk usage
+purpose "
 
 adu creates a database containing disk usage statistics of a given
 directory. It allows to query that database to quickly retrieve
@@ -14,19 +14,6 @@ usage patterns of subdirectories and/or files owned by a given user id.
 section "General options"
 #########################
 
-option "config-file" c
-#~~~~~~~~~~~~~~~~~~~~~
-"(default='~/.adurc')"
-string typestr="filename"
-optional
-details="
-       Options may be given at the command line or in the
-       configuration file. As usual, if an option is given both at
-       the command line and in the configuration file, the command
-       line option takes precedence.
-
-"
-
 option "database-dir" d
 #~~~~~~~~~~~~~~~~~~~~~~
 "directory containing the osl tables"
@@ -42,26 +29,13 @@ option "loglevel" l
 #~~~~~~~~~~~~~~~~~~
 "Set loglevel (0-6)"
 int typestr="level"
-default="3"
+default="4"
 optional
 details="
        Log messages are always written to stderr while normal output
        goes to stdout. Lower values mean more verbose logging.
 "
 
-option "paths" p
-#~~~~~~~~~~~~~~~
-"files to take into account"
-string typestr="pattern"
-optional
-details="
-       Shell wildcard pattern that must match a file in order to be
-       included in the database in --create mode or in the output
-       for --select mode. Only the part of the filename below the
-       base directory is matched against the pattern. The default
-       is to take all files into account. See fnmatch(3) for details.
-"
-
 ###############
 section "Modes"
 ###############
@@ -69,9 +43,9 @@ section "Modes"
 defgroup "mode"
 #==============
 groupdesc="
-       adu may be started in one of two possible modes, each of which
-       corresponds to a different command line option. Exactly one
-       of these options must be given.
+       adu may be started in one of three possible modes, each of
+       which corresponds to a different command line option. Exactly
+       one of these options must be given.
 
 "
 required
@@ -81,10 +55,10 @@ groupoption "create" C
 "Create a new database"
 group="mode"
 details="
-       Traverse the given directory and track disk user on a per-user
-       basis. Results are stored in N + 1 osl tables where N is
-       the number of uids that own at least one regular file in
-       that directory.
+       Traverse the given directory and track disk usage on a
+       per-user basis. Results are stored in N + 1 osl tables where
+       N is the number of uids that own at least one regular file
+       in that directory.
 "
 
 groupoption "interactive" I
@@ -92,7 +66,12 @@ groupoption "interactive" I
 "activate interactive mode"
 group="mode"
 details="
-       In this mode, adu reads commands from stdin.
+       In this mode, adu reads commands from stdin. This makes it
+       possible to run different select queries without opening the
+       underlying osl database for each query (which is expensive).
+
+       In interactive mode, several subcommands are available, see
+       the end of this document.
 "
 
 groupoption "select" S
@@ -100,8 +79,10 @@ groupoption "select" S
 "query a database previously created with --create"
 group="mode"
 details="
-       This option prints statistics about matching subdirectories to
-       stdout. The output depends on the other options, see below.
+       This option prints statistics about matching subdirectories
+       to stdout, to an output file or pipes the output to a given
+       command, depending on the --output option. The output format
+       can be customized by specifying select options, see below.
 "
 
 ##############################
@@ -115,11 +96,10 @@ string typestr="path"
 dependon="create"
 optional
 details="
-       The base directory to be traversed recursively. Must be
-       given if --create mode was selected. A warning message is
-       printed for each subdirectory that could not be read because
-       of insufficient permission. These directories will be ignored
-       when computing statistics.
+       The base directory to be traversed recursively. A warning
+       message is printed for each subdirectory that could not be
+       read because of insufficient permissions. These directories
+       will be ignored when computing statistics.
 "
 
 option "one-file-system" x
@@ -128,7 +108,7 @@ option "one-file-system" x
 flag off
 dependon="create"
 details="
-       Skip directories that are on different filesystems from the
+       Skip directories that are on different file systems from the
        one that the argument being processed is on.
 "
 
@@ -146,91 +126,50 @@ details="
        users. Decreasing the value causes adu to use slightly less memory.
 "
 
-##############################
-section "Options for --select"
-##############################
-
-option "select-options" s
-#~~~~~~~~~~~~~~~~~~~~~~~~~
-"options for select mode"
-string typestr="<options>"
+option "bloom-filter-order" B
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+"use bloom filters for hard link detection"
+int typestr="order"
+dependon="create"
+default="23"
 optional
-dependon="select"
-details="
-       Try --select-options \"-h\"
-"
-
-option "print-base-dir" -
-#~~~~~~~~~~~~~~~~~~~~~~~~
-"whether to include the base-dir in the output"
-flag off
-details="
-       If this flag is given, all directories printed are prefixed
-       with the base directory. The default is to print paths relative
-       to the base dir.
-"
-
-option "no-headers" -
-#~~~~~~~~~~~~~~~~~~~~
-"supress descriptions for listings/tables"
-flag off
-dependon="select"
 details="
-       This is mostly useful to feed the output of adu to scripts.
-"
+       Allocate bloom filters of size 2^order bits. Each regular
+       file with hard link count greater than one is added to these
+       filters which allows to detect hard links on a per-user basis.
+       Greater values reduce the probability of false positives but
+       require more memory.
 
-option "global-list" -
-#~~~~~~~~~~~~~~~~~~~~~
-"how to print global directory listings"
-enum typestr="which"
-values="size","file_count","both","none"
-default="both"
-optional
-dependon="select"
-details="
-       By default adu prints two global directory listings: The
-       first prints the directory names ordered by the sum of the
-       sizes of the contained files while the second listing prints
-       them sorted by the number of files. This option can be used
-       to print only one or neither of these two listings.
+       Values less than 10 deactivate this feature so that no hard
+       links are being detected.
 "
 
-option "no-global-summary" -
-#~~~~~~~~~~~~~~~~~~~~~~~~~~~
-"do not print the summary line"
-flag off
-dependon="select"
-
-option "user-list" -
-#~~~~~~~~~~~~~~~~~~~
-"how to print per-user directory listings"
-enum typestr="which"
-values="size","file_count","both","none"
-default="both"
+option "num-bloom-filter-hash-functions" N
+#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+"number of hash functions for the bloom filters"
+int typestr="num"
+dependon="create"
+default="10"
 optional
-dependon="select"
 details="
-       Similar to the global directory listings mentioned above,
-       adu can print two directory listings per user. This option
-       controls which of the these should be printed.
+       Cause each entry which is added to the bloom filter to set
+       \"num\" bits of the bloom filter.
 "
 
-option "no-user-summary" -
-#~~~~~~~~~~~~~~~~~~~~~~~~~~~
-"do not print the user summary table"
-flag off
-dependon="select"
-
+##############################
+section "Options for --select"
+##############################
 
-option "user-summary-sort" -
-#~~~~~~~~~~~~~~~~~~~~~~~~~~~
-"how to sort the user-summary"
-enum typestr="col_spec"
-values="name","uid","dir_count","file_count","size"
-default="size"
+option "select-options" s
+#~~~~~~~~~~~~~~~~~~~~~~~~~
+"Options for select mode"
+string typestr="<options>"
 optional
 dependon="select"
 details="
-       It is enough to specify the first letter of the column specifier,
-       e.g. \"--user-summary-sort f\" sorts by file count.
+       This option takes a string whose content is another set of
+       options as described below. Select options may be specified
+       either directly in select mode, in which case you have use
+       quotes to prevent the select options from being interpreted
+       as adu options, or via the \"set\" command in interactive mode.
 "