btrfs-progs: restore: use long option for the path regex
authorDavid Sterba <dsterba@suse.cz>
Wed, 15 May 2013 22:26:04 +0000 (00:26 +0200)
committerDavid Sterba <dsterba@suse.cz>
Fri, 9 Aug 2013 12:32:30 +0000 (14:32 +0200)
Current way of specifying the path to match is not very comfortable, but
the feature itself is very useful. Let's save the short option -m for a
more user friendly syntax and keep a long option --path-regex with the
current syntax.

CC: Peter Stuge <peter@stuge.se>
Signed-off-by: David Sterba <dsterba@suse.cz>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
cmds-restore.c

index 3be6e71..a9a8da7 100644 (file)
@@ -32,6 +32,7 @@
 #include <lzo/lzo1x.h>
 #include <zlib.h>
 #include <regex.h>
+#include <getopt.h>
 
 #include "ctree.h"
 #include "disk-io.h"
@@ -967,6 +968,11 @@ out:
        return ret;
 }
 
+static struct option long_options[] = {
+       { "path-regex", 1, NULL, 256},
+       { 0, 0, 0, 0}
+};
+
 const char * const cmd_restore_usage[] = {
        "btrfs restore [options] <device>",
        "Try to restore files from a damaged filesystem (unmounted)",
@@ -979,6 +985,10 @@ const char * const cmd_restore_usage[] = {
        "-f <offset>     filesystem location",
        "-u <block>      super mirror",
        "-d              find dir",
+       "--path-regex <regex>",
+       "                restore only filenames matching regex,",
+       "                you have to use following syntax (possibly quoted):",
+       "                ^/(|home(|/username(|/Desktop(|/.*))))$",
        NULL
 };
 
@@ -993,6 +1003,7 @@ int cmd_restore(int argc, char **argv)
        int len;
        int ret;
        int opt;
+       int option_index = 0;
        int super_mirror = 0;
        int find_dir = 0;
        int list_roots = 0;
@@ -1001,7 +1012,8 @@ int cmd_restore(int argc, char **argv)
        regex_t match_reg, *mreg = NULL;
        char reg_err[256];
 
-       while ((opt = getopt(argc, argv, "sviot:u:df:r:lcm:")) != -1) {
+       while ((opt = getopt_long(argc, argv, "sviot:u:df:r:lc", long_options,
+                                       &option_index)) != -1) {
 
                switch (opt) {
                        case 's':
@@ -1059,7 +1071,8 @@ int cmd_restore(int argc, char **argv)
                        case 'c':
                                match_cflags |= REG_ICASE;
                                break;
-                       case 'm':
+                       /* long option without single letter alternative */
+                       case 256:
                                match_regstr = optarg;
                                break;
                        default: