summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.cz>2013-05-16 00:26:04 +0200
committerDavid Sterba <dsterba@suse.cz>2013-08-09 14:32:30 +0200
commitf6e4a423eb8a9573ef8550fac7ceb875027acd7f (patch)
tree3432e3af3c7474a7d3351ac3f5a20ba4f69b0b78
parent65b01dcc5a6a261227faeaeb7a182a619d1ce4cc (diff)
btrfs-progs: restore: use long option for the path regex
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>
-rw-r--r--cmds-restore.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/cmds-restore.c b/cmds-restore.c
index 3be6e719..a9a8da70 100644
--- a/cmds-restore.c
+++ b/cmds-restore.c
@@ -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: