diff options
author | Anand Jain <anand.jain@oracle.com> | 2013-02-01 15:56:26 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2013-02-01 16:55:05 +0100 |
commit | e260954a9e847c1e3ed0d2f457e256eb4726f5f2 (patch) | |
tree | 998a43c4c53b550326ea4148000a5db12e1d7738 | |
parent | 64f9c407590e1ec0e1a699234fb7354e11624c9e (diff) | |
download | btrfs-progs-e260954a9e847c1e3ed0d2f457e256eb4726f5f2.tar.gz btrfs-progs-e260954a9e847c1e3ed0d2f457e256eb4726f5f2.tar.bz2 btrfs-progs-e260954a9e847c1e3ed0d2f457e256eb4726f5f2.zip |
Btrfs-progs: make printing subvol extensible to newer layouts
Currently you can print subvol in a list or table format.
This patch will provide a way to extend this to other formats
like the upcoming raw format.
Signed-off-by: Anand Jain <anand.jain@oracle.com>
-rw-r--r-- | btrfs-list.c | 26 | ||||
-rw-r--r-- | btrfs-list.h | 3 | ||||
-rw-r--r-- | cmds-subvolume.c | 24 |
3 files changed, 39 insertions, 14 deletions
diff --git a/btrfs-list.c b/btrfs-list.c index a166c8b2..1ca7bc4e 100644 --- a/btrfs-list.c +++ b/btrfs-list.c @@ -54,12 +54,12 @@ struct { { .name = "ID", .column_name = "ID", - .need_print = 1, + .need_print = 0, }, { .name = "gen", .column_name = "Gen", - .need_print = 1, + .need_print = 0, }, { .name = "cgen", @@ -74,7 +74,7 @@ struct { { .name = "top level", .column_name = "Top Level", - .need_print = 1, + .need_print = 0, }, { .name = "otime", @@ -94,7 +94,7 @@ struct { { .name = "path", .column_name = "Path", - .need_print = 1, + .need_print = 0, }, { .name = NULL, @@ -1415,21 +1415,25 @@ static void print_all_volume_info_tab_head() } static void print_all_volume_info(struct root_lookup *sorted_tree, - int is_tab_result) + int layout) { struct rb_node *n; struct root_info *entry; - if (is_tab_result) + if (layout == BTRFS_LIST_LAYOUT_TABLE) print_all_volume_info_tab_head(); n = rb_first(&sorted_tree->root); while (n) { entry = rb_entry(n, struct root_info, sort_node); - if (is_tab_result) - print_single_volume_info_table(entry); - else + switch (layout) { + case BTRFS_LIST_LAYOUT_DEFAULT: print_single_volume_info_default(entry); + break; + case BTRFS_LIST_LAYOUT_TABLE: + print_single_volume_info_table(entry); + break; + } n = rb_next(n); } } @@ -1455,7 +1459,7 @@ int btrfs_list_subvols(int fd, struct root_lookup *root_lookup) int btrfs_list_subvols_print(int fd, struct btrfs_list_filter_set *filter_set, struct btrfs_list_comparer_set *comp_set, - int is_tab_result, int full_path) + int layout, int full_path) { struct root_lookup root_lookup; struct root_lookup root_sort; @@ -1468,7 +1472,7 @@ int btrfs_list_subvols_print(int fd, struct btrfs_list_filter_set *filter_set, __filter_and_sort_subvol(&root_lookup, &root_sort, filter_set, comp_set, top_id); - print_all_volume_info(&root_sort, is_tab_result); + print_all_volume_info(&root_sort, layout); __free_all_subvolumn(&root_lookup); return 0; diff --git a/btrfs-list.h b/btrfs-list.h index 2870c718..e6268588 100644 --- a/btrfs-list.h +++ b/btrfs-list.h @@ -18,6 +18,9 @@ #include "kerncompat.h" +#define BTRFS_LIST_LAYOUT_DEFAULT 0 +#define BTRFS_LIST_LAYOUT_TABLE 1 + /* * one of these for each root we find. */ diff --git a/cmds-subvolume.c b/cmds-subvolume.c index d46064af..596bd628 100644 --- a/cmds-subvolume.c +++ b/cmds-subvolume.c @@ -422,8 +422,19 @@ static int cmd_subvol_list(int argc, char **argv) BTRFS_LIST_FILTER_TOPID_EQUAL, top_id); - ret = btrfs_list_subvols_print(fd, filter_set, comparer_set, - is_tab_result, + /* by default we shall print the following columns*/ + btrfs_list_setup_print_column(BTRFS_LIST_OBJECTID); + btrfs_list_setup_print_column(BTRFS_LIST_GENERATION); + btrfs_list_setup_print_column(BTRFS_LIST_TOP_LEVEL); + btrfs_list_setup_print_column(BTRFS_LIST_PATH); + + if (is_tab_result) + ret = btrfs_list_subvols_print(fd, filter_set, comparer_set, + BTRFS_LIST_LAYOUT_TABLE, + !is_list_all && !is_only_in_path); + else + ret = btrfs_list_subvols_print(fd, filter_set, comparer_set, + BTRFS_LIST_LAYOUT_DEFAULT, !is_list_all && !is_only_in_path); if (ret) return 19; @@ -630,7 +641,14 @@ static int cmd_subvol_get_default(int argc, char **argv) btrfs_list_setup_filter(&filter_set, BTRFS_LIST_FILTER_ROOTID, default_id); - ret = btrfs_list_subvols_print(fd, filter_set, NULL, 0, 1); + /* by default we shall print the following columns*/ + btrfs_list_setup_print_column(BTRFS_LIST_OBJECTID); + btrfs_list_setup_print_column(BTRFS_LIST_GENERATION); + btrfs_list_setup_print_column(BTRFS_LIST_TOP_LEVEL); + btrfs_list_setup_print_column(BTRFS_LIST_PATH); + + ret = btrfs_list_subvols_print(fd, filter_set, NULL, + BTRFS_LIST_LAYOUT_DEFAULT, 1); if (ret) return 19; return 0; |