summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnand Jain <anand.jain@oracle.com>2013-02-01 15:56:26 +0800
committerDavid Sterba <dsterba@suse.cz>2013-02-01 16:55:05 +0100
commite260954a9e847c1e3ed0d2f457e256eb4726f5f2 (patch)
tree998a43c4c53b550326ea4148000a5db12e1d7738
parent64f9c407590e1ec0e1a699234fb7354e11624c9e (diff)
downloadbtrfs-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.c26
-rw-r--r--btrfs-list.h3
-rw-r--r--cmds-subvolume.c24
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;