* [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
@ 2015-01-13 5:53 Fan Chengniang
2015-01-14 15:46 ` David Sterba
0 siblings, 1 reply; 10+ messages in thread
From: Fan Chengniang @ 2015-01-13 5:53 UTC (permalink / raw)
To: linux-btrfs; +Cc: Fan Chengniang
make btrfs qgroups show human readable sizes
using --human-readable option, example:
qgroupid rfer excl max_rfer max_excl parent child
-------- ---- ---- -------- -------- ------ -----
0/5 299.58MiB 299.58MiB 400.00MiB 0.00B 1/1 ---
0/265 299.58MiB 16.00KiB 0.00B 320.00MiB 1/1 ---
0/266 299.58MiB 16.00KiB 350.00MiB 0.00B --- ---
1/1 599.16MiB 299.59MiB 800.00MiB 0.00B --- 0/5,0/265
Signed-off-by: Fan Chengniang <fancn.fnst@cn.fujitsu.com>
---
v2:
- change -h option to --human-readable
- merge need_print and human_readable into format
- add print_group_size function
Documentation/btrfs-qgroup.txt | 2 ++
cmds-qgroup.c | 10 +++++-
qgroup.c | 69 ++++++++++++++++++++++++++++--------------
qgroup.h | 1 +
4 files changed, 58 insertions(+), 24 deletions(-)
diff --git a/Documentation/btrfs-qgroup.txt b/Documentation/btrfs-qgroup.txt
index 3e13373..d8ed028 100644
--- a/Documentation/btrfs-qgroup.txt
+++ b/Documentation/btrfs-qgroup.txt
@@ -73,6 +73,8 @@ print max exclusive size of qgroup.
list all qgroups which impact the given path(include ancestral qgroups)
-f::::
list all qgroups which impact the given path(exclude ancestral qgroups)
+--human-readable::::
+print sizes in human readable format (e.g., 1KiB 234MiB 2GiB).
--sort=[\+/-]<attr>[,[+/-]<attr>]...::::
list qgroups in order of <attr>.
+
diff --git a/cmds-qgroup.c b/cmds-qgroup.c
index 957fbc9..ba6f19b 100644
--- a/cmds-qgroup.c
+++ b/cmds-qgroup.c
@@ -216,6 +216,8 @@ static const char * const cmd_qgroup_show_usage[] = {
"(include ancestral qgroups)",
"-f list all qgroups which impact the given path"
"(exclude ancestral qgroups)",
+ "--human-readable",
+ " print sizes in human readable format (e.g., 1KiB 234MiB 2GiB)",
"--sort=qgroupid,rfer,excl,max_rfer,max_excl",
" list qgroups in order of qgroupid,"
"rfer,max_rfer or max_excl",
@@ -234,6 +236,7 @@ static int cmd_qgroup_show(int argc, char **argv)
int c;
u64 qgroupid;
int filter_flag = 0;
+ int option_index = 0;
struct btrfs_qgroup_comparer_set *comparer_set;
struct btrfs_qgroup_filter_set *filter_set;
@@ -241,16 +244,21 @@ static int cmd_qgroup_show(int argc, char **argv)
comparer_set = btrfs_qgroup_alloc_comparer_set();
struct option long_options[] = {
{"sort", 1, NULL, 'S'},
+ {"human-readable", 0, NULL, 0},
{0, 0, 0, 0}
};
optind = 1;
while (1) {
c = getopt_long(argc, argv, "pcreFf",
- long_options, NULL);
+ long_options, &option_index);
if (c < 0)
break;
switch (c) {
+ case 0:
+ if (option_index == 1)
+ btrfs_qgroup_setup_human_readable();
+ break;
case 'p':
btrfs_qgroup_setup_print_column(
BTRFS_QGROUP_PARENT);
diff --git a/qgroup.c b/qgroup.c
index 1a4866c..ce87fe4 100644
--- a/qgroup.c
+++ b/qgroup.c
@@ -20,10 +20,14 @@
#include <sys/ioctl.h>
#include "ctree.h"
#include "ioctl.h"
+#include "utils.h"
#define BTRFS_QGROUP_NFILTERS_INCREASE (2 * BTRFS_QGROUP_FILTER_MAX)
#define BTRFS_QGROUP_NCOMPS_INCREASE (2 * BTRFS_QGROUP_COMP_MAX)
+#define BTRFS_QGROUP_FORMAT_PRINT 1
+#define BTRFS_QGROUP_FORMAT_HUMAN (1U << 1)
+
struct qgroup_lookup {
struct rb_root root;
};
@@ -79,54 +83,54 @@ struct btrfs_qgroup_list {
static struct {
char *name;
char *column_name;
- int need_print;
+ unsigned int format;
int max_len;
} btrfs_qgroup_columns[] = {
{
.name = "qgroupid",
.column_name = "Qgroupid",
- .need_print = 1,
+ .format = BTRFS_QGROUP_FORMAT_PRINT,
.max_len = 8,
},
{
.name = "rfer",
.column_name = "Rfer",
- .need_print = 1,
- .max_len = 4,
+ .format = BTRFS_QGROUP_FORMAT_PRINT,
+ .max_len = 12,
},
{
.name = "excl",
.column_name = "Excl",
- .need_print = 1,
- .max_len = 4,
+ .format = BTRFS_QGROUP_FORMAT_PRINT,
+ .max_len = 12,
},
{ .name = "max_rfer",
.column_name = "Max_rfer",
- .need_print = 0,
- .max_len = 8,
+ .format = 0,
+ .max_len = 12,
},
{
.name = "max_excl",
.column_name = "Max_excl",
- .need_print = 0,
- .max_len = 8,
+ .format = 0,
+ .max_len = 12,
},
{
.name = "parent",
.column_name = "Parent",
- .need_print = 0,
+ .format = 0,
.max_len = 7,
},
{
.name = "child",
.column_name = "Child",
- .need_print = 0,
+ .format = 0,
.max_len = 5,
},
{
.name = NULL,
.column_name = NULL,
- .need_print = 0,
+ .format = 0,
},
};
@@ -140,11 +144,19 @@ void btrfs_qgroup_setup_print_column(enum btrfs_qgroup_column_enum column)
BUG_ON(column < 0 || column > BTRFS_QGROUP_ALL);
if (column < BTRFS_QGROUP_ALL) {
- btrfs_qgroup_columns[column].need_print = 1;
+ btrfs_qgroup_columns[column].format |= BTRFS_QGROUP_FORMAT_PRINT;
return;
}
for (i = 0; i < BTRFS_QGROUP_ALL; i++)
- btrfs_qgroup_columns[i].need_print = 1;
+ btrfs_qgroup_columns[i].format |= BTRFS_QGROUP_FORMAT_PRINT;
+}
+
+void btrfs_qgroup_setup_human_readable(void)
+{
+ btrfs_qgroup_columns[BTRFS_QGROUP_RFER].format |= BTRFS_QGROUP_FORMAT_HUMAN;
+ btrfs_qgroup_columns[BTRFS_QGROUP_EXCL].format |= BTRFS_QGROUP_FORMAT_HUMAN;
+ btrfs_qgroup_columns[BTRFS_QGROUP_MAX_RFER].format |= BTRFS_QGROUP_FORMAT_HUMAN;
+ btrfs_qgroup_columns[BTRFS_QGROUP_MAX_EXCL].format |= BTRFS_QGROUP_FORMAT_HUMAN;
}
static int print_parent_column(struct btrfs_qgroup *qgroup)
@@ -189,6 +201,17 @@ static void print_qgroup_column_add_blank(enum btrfs_qgroup_column_enum column,
printf(" ");
}
+static int print_qgroup_size(u64 size, unsigned int format)
+{
+ int len;
+ if (format & BTRFS_QGROUP_FORMAT_HUMAN)
+ len = printf("%s", pretty_size(size));
+ else
+ len = printf("%llu", size);
+
+ return len;
+}
+
static void print_qgroup_column(struct btrfs_qgroup *qgroup,
enum btrfs_qgroup_column_enum column)
{
@@ -203,11 +226,11 @@ static void print_qgroup_column(struct btrfs_qgroup *qgroup,
print_qgroup_column_add_blank(BTRFS_QGROUP_QGROUPID, len);
break;
case BTRFS_QGROUP_RFER:
- len = printf("%llu", qgroup->rfer);
+ len = print_qgroup_size(qgroup->rfer, btrfs_qgroup_columns[column].format);
print_qgroup_column_add_blank(BTRFS_QGROUP_RFER, len);
break;
case BTRFS_QGROUP_EXCL:
- len = printf("%llu", qgroup->excl);
+ len = print_qgroup_size(qgroup->excl, btrfs_qgroup_columns[column].format);
print_qgroup_column_add_blank(BTRFS_QGROUP_EXCL, len);
break;
case BTRFS_QGROUP_PARENT:
@@ -215,11 +238,11 @@ static void print_qgroup_column(struct btrfs_qgroup *qgroup,
print_qgroup_column_add_blank(BTRFS_QGROUP_PARENT, len);
break;
case BTRFS_QGROUP_MAX_RFER:
- len = printf("%llu", qgroup->max_rfer);
+ len = print_qgroup_size(qgroup->max_rfer, btrfs_qgroup_columns[column].format);
print_qgroup_column_add_blank(BTRFS_QGROUP_MAX_RFER, len);
break;
case BTRFS_QGROUP_MAX_EXCL:
- len = printf("%llu", qgroup->max_excl);
+ len = print_qgroup_size(qgroup->max_excl, btrfs_qgroup_columns[column].format);
print_qgroup_column_add_blank(BTRFS_QGROUP_MAX_EXCL, len);
break;
case BTRFS_QGROUP_CHILD:
@@ -236,7 +259,7 @@ static void print_single_qgroup_table(struct btrfs_qgroup *qgroup)
int i;
for (i = 0; i < BTRFS_QGROUP_ALL; i++) {
- if (!btrfs_qgroup_columns[i].need_print)
+ if (!(btrfs_qgroup_columns[i].format & BTRFS_QGROUP_FORMAT_PRINT))
continue;
print_qgroup_column(qgroup, i);
@@ -252,7 +275,7 @@ static void print_table_head()
int len;
for (i = 0; i < BTRFS_QGROUP_ALL; i++) {
- if (!btrfs_qgroup_columns[i].need_print)
+ if (!(btrfs_qgroup_columns[i].format & BTRFS_QGROUP_FORMAT_PRINT))
continue;
printf("%s", btrfs_qgroup_columns[i].name);
len = btrfs_qgroup_columns[i].max_len -
@@ -263,7 +286,7 @@ static void print_table_head()
}
printf("\n");
for (i = 0; i < BTRFS_QGROUP_ALL; i++) {
- if (!btrfs_qgroup_columns[i].need_print)
+ if (!(btrfs_qgroup_columns[i].format & BTRFS_QGROUP_FORMAT_PRINT))
continue;
len = strlen(btrfs_qgroup_columns[i].name);
@@ -957,7 +980,7 @@ static void update_columns_max_len(struct btrfs_qgroup *bq)
int i;
for (i = 0; i < BTRFS_QGROUP_ALL; i++) {
- if (!btrfs_qgroup_columns[i].need_print)
+ if (!(btrfs_qgroup_columns[i].format & BTRFS_QGROUP_FORMAT_PRINT))
continue;
__update_columns_max_len(bq, i);
}
diff --git a/qgroup.h b/qgroup.h
index 653cf1c..cc8ae29 100644
--- a/qgroup.h
+++ b/qgroup.h
@@ -83,6 +83,7 @@ u64 btrfs_get_path_rootid(int fd);
int btrfs_show_qgroups(int fd, struct btrfs_qgroup_filter_set *,
struct btrfs_qgroup_comparer_set *);
void btrfs_qgroup_setup_print_column(enum btrfs_qgroup_column_enum column);
+void btrfs_qgroup_setup_human_readable(void);
struct btrfs_qgroup_filter_set *btrfs_qgroup_alloc_filter_set(void);
void btrfs_qgroup_free_filter_set(struct btrfs_qgroup_filter_set *filter_set);
int btrfs_qgroup_setup_filter(struct btrfs_qgroup_filter_set **filter_set,
--
1.9.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
2015-01-13 5:53 [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes Fan Chengniang
@ 2015-01-14 15:46 ` David Sterba
2015-01-14 18:20 ` Roman Mamedov
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: David Sterba @ 2015-01-14 15:46 UTC (permalink / raw)
To: Fan Chengniang; +Cc: linux-btrfs
On Tue, Jan 13, 2015 at 01:53:39PM +0800, Fan Chengniang wrote:
> make btrfs qgroups show human readable sizes
> using --human-readable option, example:
That's too long to type and the idea was to add all the long options
that force the specific unit base, ie. --kbytes/--mbytes/..., --raw,
--si and --iec. We can possibly make the human readable the default
because that's what I'd expect to see to have a quick overview and can
use the other options otherwise.
The geopt parser accepts short options if they're unique, so --kb or
even --k works as a very convenient shorcut for frequent commandline
use.
> qgroupid rfer excl max_rfer max_excl parent child
> -------- ---- ---- -------- -------- ------ -----
> 0/5 299.58MiB 299.58MiB 400.00MiB 0.00B 1/1 ---
> 0/265 299.58MiB 16.00KiB 0.00B 320.00MiB 1/1 ---
> 0/266 299.58MiB 16.00KiB 350.00MiB 0.00B --- ---
> 1/1 599.16MiB 299.59MiB 800.00MiB 0.00B --- 0/5,0/265
The values should be also aligned to the right.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
2015-01-14 15:46 ` David Sterba
@ 2015-01-14 18:20 ` Roman Mamedov
2015-01-15 12:02 ` David Sterba
2015-01-15 1:01 ` Qu Wenruo
2015-01-15 1:17 ` Fan Chengniang/樊成酿
2 siblings, 1 reply; 10+ messages in thread
From: Roman Mamedov @ 2015-01-14 18:20 UTC (permalink / raw)
To: dsterba; +Cc: Fan Chengniang, linux-btrfs
On Wed, 14 Jan 2015 16:46:33 +0100
David Sterba <dsterba@suse.cz> wrote:
> On Tue, Jan 13, 2015 at 01:53:39PM +0800, Fan Chengniang wrote:
> > make btrfs qgroups show human readable sizes
> > using --human-readable option, example:
>
> That's too long to type and the idea was to add all the long options
> that force the specific unit base, ie. --kbytes/--mbytes/..., --raw,
> --si and --iec. We can possibly make the human readable the default
> because that's what I'd expect to see to have a quick overview and can
> use the other options otherwise.
>
> The geopt parser accepts short options if they're unique, so --kb or
> even --k works as a very convenient shorcut for frequent commandline
> use.
FWIW both of the GNU coreutils "df" and "ls" use the "-h, --human-readable"
combination of options. Also the human-readable sizes are not the default format with those.
Why not follow the rule of the least surprise and just adopt the same behavior?
--
With respect,
Roman
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
2015-01-14 15:46 ` David Sterba
2015-01-14 18:20 ` Roman Mamedov
@ 2015-01-15 1:01 ` Qu Wenruo
2015-01-15 12:05 ` David Sterba
2015-01-15 1:17 ` Fan Chengniang/樊成酿
2 siblings, 1 reply; 10+ messages in thread
From: Qu Wenruo @ 2015-01-15 1:01 UTC (permalink / raw)
To: dsterba, Fan Chengniang, linux-btrfs
-------- Original Message --------
Subject: Re: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show
human readable sizes
From: David Sterba <dsterba@suse.cz>
To: Fan Chengniang <fancn.fnst@cn.fujitsu.com>
Date: 2015年01月14日 23:46
> On Tue, Jan 13, 2015 at 01:53:39PM +0800, Fan Chengniang wrote:
>> make btrfs qgroups show human readable sizes
>> using --human-readable option, example:
> That's too long to type
It's completely OK to make the option shorter and make it consistent
with other parts,
(BTW, fi df uses -h, no long option, why not keey consistent with it?)
but IMHO, isn't the bash-completion script a better solution for all the
btrfs subcommands and options length?
Complicated commands like git have a quite good bash-completion script,
and with it
option length is never a problem (except some case in git config, where
some options can't be completed).
Thanks,
Qu
> and the idea was to add all the long options
> that force the specific unit base, ie. --kbytes/--mbytes/..., --raw,
> --si and --iec. We can possibly make the human readable the default
> because that's what I'd expect to see to have a quick overview and can
> use the other options otherwise.
>
> The geopt parser accepts short options if they're unique, so --kb or
> even --k works as a very convenient shorcut for frequent commandline
> use.
>
>> qgroupid rfer excl max_rfer max_excl parent child
>> -------- ---- ---- -------- -------- ------ -----
>> 0/5 299.58MiB 299.58MiB 400.00MiB 0.00B 1/1 ---
>> 0/265 299.58MiB 16.00KiB 0.00B 320.00MiB 1/1 ---
>> 0/266 299.58MiB 16.00KiB 350.00MiB 0.00B --- ---
>> 1/1 599.16MiB 299.59MiB 800.00MiB 0.00B --- 0/5,0/265
> The values should be also aligned to the right.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
2015-01-14 15:46 ` David Sterba
2015-01-14 18:20 ` Roman Mamedov
2015-01-15 1:01 ` Qu Wenruo
@ 2015-01-15 1:17 ` Fan Chengniang/樊成酿
2015-01-15 12:30 ` David Sterba
2 siblings, 1 reply; 10+ messages in thread
From: Fan Chengniang/樊成酿 @ 2015-01-15 1:17 UTC (permalink / raw)
To: dsterba; +Cc: linux-btrfs
在 2015年01月14日 23:46, David Sterba 写道:
> On Tue, Jan 13, 2015 at 01:53:39PM +0800, Fan Chengniang wrote:
>> make btrfs qgroups show human readable sizes
>> using --human-readable option, example:
> That's too long to type and the idea was to add all the long options
> that force the specific unit base, ie. --kbytes/--mbytes/..., --raw,
> --si and --iec. We can possibly make the human readable the default
> because that's what I'd expect to see to have a quick overview and can
> use the other options otherwise.
>
> The geopt parser accepts short options if they're unique, so --kb or
> even --k works as a very convenient shorcut for frequent commandline
> use.
I have sent a mail for your advise of adding options. In that mail, I
asked whether I should use --human-readable and add --kbytes --mbytes ...
But you have not reply to me.
So, your advise is add --kbytes --mbytes ... and make human-readable
default behaviour?
>> qgroupid rfer excl max_rfer max_excl parent child
>> -------- ---- ---- -------- -------- ------ -----
>> 0/5 299.58MiB 299.58MiB 400.00MiB 0.00B 1/1 ---
>> 0/265 299.58MiB 16.00KiB 0.00B 320.00MiB 1/1 ---
>> 0/266 299.58MiB 16.00KiB 350.00MiB 0.00B --- ---
>> 1/1 599.16MiB 299.59MiB 800.00MiB 0.00B --- 0/5,0/265
> The values should be also aligned to the right.
It is aligned to left before my patch. I just keep it.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
2015-01-14 18:20 ` Roman Mamedov
@ 2015-01-15 12:02 ` David Sterba
0 siblings, 0 replies; 10+ messages in thread
From: David Sterba @ 2015-01-15 12:02 UTC (permalink / raw)
To: Roman Mamedov; +Cc: dsterba, Fan Chengniang, linux-btrfs
On Wed, Jan 14, 2015 at 11:20:29PM +0500, Roman Mamedov wrote:
> On Wed, 14 Jan 2015 16:46:33 +0100
> David Sterba <dsterba@suse.cz> wrote:
>
> > On Tue, Jan 13, 2015 at 01:53:39PM +0800, Fan Chengniang wrote:
> > > make btrfs qgroups show human readable sizes
> > > using --human-readable option, example:
> >
> > That's too long to type and the idea was to add all the long options
> > that force the specific unit base, ie. --kbytes/--mbytes/..., --raw,
> > --si and --iec. We can possibly make the human readable the default
> > because that's what I'd expect to see to have a quick overview and can
> > use the other options otherwise.
> >
> > The geopt parser accepts short options if they're unique, so --kb or
> > even --k works as a very convenient shorcut for frequent commandline
> > use.
>
> FWIW both of the GNU coreutils "df" and "ls" use the "-h, --human-readable"
> combination of options. Also the human-readable sizes are not the default format with those.
> Why not follow the rule of the least surprise and just adopt the same behavior?
I was not aware of the existing long option, makes sense to add them as
an alias of -h/-H.
I'm not sure what to do about the default output. 'ls' prints raw bytes,
'df' prints a raw number that's in Kilobytes, without a suffix. To
follow principle of least surprise in the context of btrfs-progs is to
print the human readable by default, like 'fi df/show' has been doing.
My rationale behind the default is to give a quick overview to user, I
type 'df -h' all the time and haven't used a plain 'df' since long. The
ability to quickly recognize and comprehend numbers goes down after 5-6
digits, while the numbers + largest suffix are within that limit.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
2015-01-15 1:01 ` Qu Wenruo
@ 2015-01-15 12:05 ` David Sterba
2015-01-15 20:41 ` btrfs command completion Was: " Duncan
0 siblings, 1 reply; 10+ messages in thread
From: David Sterba @ 2015-01-15 12:05 UTC (permalink / raw)
To: Qu Wenruo; +Cc: dsterba, Fan Chengniang, linux-btrfs
On Thu, Jan 15, 2015 at 09:01:37AM +0800, Qu Wenruo wrote:
> > On Tue, Jan 13, 2015 at 01:53:39PM +0800, Fan Chengniang wrote:
> >> make btrfs qgroups show human readable sizes
> >> using --human-readable option, example:
> > That's too long to type
> It's completely OK to make the option shorter and make it consistent
> with other parts,
> (BTW, fi df uses -h, no long option, why not keey consistent with it?)
I'm for adding the --human-readable variants where applicable.
> but IMHO, isn't the bash-completion script a better solution for all the
> btrfs subcommands and options length?
>
> Complicated commands like git have a quite good bash-completion script,
> and with it
> option length is never a problem (except some case in git config, where
> some options can't be completed).
A shell completion would be great of course, it's in the project ideas.
There's a starting point http://www.spinics.net/lists/linux-btrfs/msg15899.html .
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
2015-01-15 1:17 ` Fan Chengniang/樊成酿
@ 2015-01-15 12:30 ` David Sterba
2015-01-15 13:50 ` 樊成酿
0 siblings, 1 reply; 10+ messages in thread
From: David Sterba @ 2015-01-15 12:30 UTC (permalink / raw)
To: Fan Chengniang/樊成酿; +Cc: dsterba, linux-btrfs
On Thu, Jan 15, 2015 at 09:17:01AM +0800, Fan Chengniang/樊成酿 wrote:
>
> 在 2015年01月14日 23:46, David Sterba 写道:
> > On Tue, Jan 13, 2015 at 01:53:39PM +0800, Fan Chengniang wrote:
> >> make btrfs qgroups show human readable sizes
> >> using --human-readable option, example:
> > That's too long to type and the idea was to add all the long options
> > that force the specific unit base, ie. --kbytes/--mbytes/..., --raw,
> > --si and --iec. We can possibly make the human readable the default
> > because that's what I'd expect to see to have a quick overview and can
> > use the other options otherwise.
> >
> > The geopt parser accepts short options if they're unique, so --kb or
> > even --k works as a very convenient shorcut for frequent commandline
> > use.
> I have sent a mail for your advise of adding options. In that mail, I
> asked whether I should use --human-readable and add --kbytes --mbytes ...
> But you have not reply to me.
So you've sent a v2 where we can see if our ideas match or not and
continue from there. Timely replies are not always feasible, I get a lot
of mails. Patch iterations are normal, nothing new here.
> So, your advise is add --kbytes --mbytes ... and make human-readable
> default behaviour?
> >> qgroupid rfer excl max_rfer max_excl parent child
> >> -------- ---- ---- -------- -------- ------ -----
> >> 0/5 299.58MiB 299.58MiB 400.00MiB 0.00B 1/1 ---
> >> 0/265 299.58MiB 16.00KiB 0.00B 320.00MiB 1/1 ---
> >> 0/266 299.58MiB 16.00KiB 350.00MiB 0.00B --- ---
> >> 1/1 599.16MiB 299.59MiB 800.00MiB 0.00B --- 0/5,0/265
> > The values should be also aligned to the right.
> It is aligned to left before my patch. I just keep it.
Ok, take it as a hint for another patch.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
2015-01-15 12:30 ` David Sterba
@ 2015-01-15 13:50 ` 樊成酿
0 siblings, 0 replies; 10+ messages in thread
From: 樊成酿 @ 2015-01-15 13:50 UTC (permalink / raw)
To: dsterba, Fan Chengniang/樊成酿, linux-btrfs
在 2015年01月15日 20:30, David Sterba 写道:
> On Thu, Jan 15, 2015 at 09:17:01AM +0800, Fan Chengniang/樊成酿 wrote:
>> 在 2015年01月14日 23:46, David Sterba 写道:
>>> On Tue, Jan 13, 2015 at 01:53:39PM +0800, Fan Chengniang wrote:
>>>> make btrfs qgroups show human readable sizes
>>>> using --human-readable option, example:
>>> That's too long to type and the idea was to add all the long options
>>> that force the specific unit base, ie. --kbytes/--mbytes/..., --raw,
>>> --si and --iec. We can possibly make the human readable the default
>>> because that's what I'd expect to see to have a quick overview and can
>>> use the other options otherwise.
>>>
>>> The geopt parser accepts short options if they're unique, so --kb or
>>> even --k works as a very convenient shorcut for frequent commandline
>>> use.
>> I have sent a mail for your advise of adding options. In that mail, I
>> asked whether I should use --human-readable and add --kbytes --mbytes ...
>> But you have not reply to me.
> So you've sent a v2 where we can see if our ideas match or not and
> continue from there. Timely replies are not always feasible, I get a lot
> of mails. Patch iterations are normal, nothing new here.
Sorry to you because of my words. I didn't consider you have a lot of
mails. I will take your advice and improve my patch.
This is my personal mail address.
>> So, your advise is add --kbytes --mbytes ... and make human-readable
>> default behaviour?
>>>> qgroupid rfer excl max_rfer max_excl parent child
>>>> -------- ---- ---- -------- -------- ------ -----
>>>> 0/5 299.58MiB 299.58MiB 400.00MiB 0.00B 1/1 ---
>>>> 0/265 299.58MiB 16.00KiB 0.00B 320.00MiB 1/1 ---
>>>> 0/266 299.58MiB 16.00KiB 350.00MiB 0.00B --- ---
>>>> 1/1 599.16MiB 299.59MiB 800.00MiB 0.00B --- 0/5,0/265
>>> The values should be also aligned to the right.
>> It is aligned to left before my patch. I just keep it.
> Ok, take it as a hint for another patch.
I have combined them to one patch. Maybe I should seperate them.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 10+ messages in thread
* btrfs command completion Was: [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes
2015-01-15 12:05 ` David Sterba
@ 2015-01-15 20:41 ` Duncan
0 siblings, 0 replies; 10+ messages in thread
From: Duncan @ 2015-01-15 20:41 UTC (permalink / raw)
To: linux-btrfs
David Sterba posted on Thu, 15 Jan 2015 13:05:46 +0100 as excerpted:
> A shell completion would be great of course, it's in the project ideas.
> There's a starting point
> http://www.spinics.net/lists/linux-btrfs/msg15899.html .
FWIW, in case anyone is interested...
What I did here is a bit different; shell completion would be better, but
while I know bash, I don't know bash/shell completion so I couldn't write
that without learning it.
What I did is a btrfs wrapper script (which I simply called 'b', a
previously here-unused single letter command) that based on the first
parameter or two and the number of parameters, decides if what's there
matches a valid btrfs subcommand and whether it looks complete or not,
and if it's valid but incomplete, echoes the appropriate btrfs <sub> help
command and prompts for more input.
So just 'b' gives me:
------------------------------------------------------------
b: btrfs helper (common commands only)
------------------------------------------------------------
btrfs cmd (Just Enter for help):
b(alance) c(heck) d(ev) f(ilesystem) i(nspect) p(roperty)
qg(roup) qu(ota) rec(eive) rep(lace) resc(ue) rest(ore)
sc(rub) se(nd) su(bvolume) v(ersion):
There it waits for further input.
If I then add an 'f', or if I had typed 'b f' (or 'b fi' or
'b filesystem', the script checks status of btrfs <cmd> --help to see if
it's valid or not), I get this:
f
------------------------------------------------------------
btrfs filesystem action (Just Enter for help):
de(frag) df l(abel) r(esize) sh(ow) sy(nc) u(sage):
Further input.
If I then add 'df' (or if I had typed 'b fi df'), I get:
df
------------------------------------------------------------
usage: btrfs filesystem df [options] <path>
Show space usage information for a mount point
-b|--raw raw numbers in bytes
-h human friendly numbers, base 1024 (default)
-H human friendly numbers, base 1000
--iec use 1024 as a base (KiB, MiB, GiB, TiB)
--si use 1000 as a base (kB, MB, GB, TB)
-k|--kbytes show sizes in KiB, or kB with --si
-m|--mbytes show sizes in MiB, or MB with --si
-g|--gbytes show sizes in GiB, or GB with --si
-t|--tbytes show sizes in TiB, or TB with --si
------------------------------------------------------------
btrfs filesystem df usage is printed above.
Please enter additional parameters here:
Further input.
At this point it doesn't check further input, instead simply echoing back
what will be the final command and prompting whether to run it or not.
If I simply type '/'...
/
------------------------------------------------------------
btrfs filesystem df /
Final check: OK to run above command (y/N)?
Note the default to N...
If at that point I simply enter (or if I hit anything else besides y/Y),
of course it doesn't run the command, it simply exits. However, the
built command was printed above, making it simple enough to select/paste
(assuming gpm or a terminal window in X, thus mouse selection).
If I hit 'y', it executes the command.
Meanwhile, if there's more than two parameters and the first two
validate, the script assumes the user knows what they are doing and
simply executes it as-is.
b fi df /
------------------------------------------------------------
b: btrfs helper (common commands only)
------------------------------------------------------------
Data, RAID1: total=3.00GiB, used=1.74GiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=768.00MiB, used=299.89MiB
GlobalReserve, single: total=48.00MiB, used=0.00B
b fi df invalid
------------------------------------------------------------
b: btrfs helper (common commands only)
------------------------------------------------------------
ERROR: can't access 'invalid'
b fxxx df /
This one's interesting. The script checks the status of
btrfs fxxx --help and determines that btrfs doesn't consider the fxxx
valid, so it simply prints the full btrfs --help output, running it thru
$PAGER (if unset, less if it's executable, else no pager) due to length.
Anyone interested in a script such as this? Absent a bash completion
script, I found it /tremendously/ helpful with btrfs command basics, and
because it prompts with the final command before execution, it helps in
learning the commands as well. I still use it for commands I don't use
frequently enough to have memorized. While it's a bit of a hack, thus my
not posting it previously, if anyone else would find such a script
useful, I could post it.
I don't have hosting for it but I suppose it could go on the wiki if
enough other folks find it useful. It's 125 lines including comments ATM.
--
Duncan - List replies preferred. No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master." Richard Stallman
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2015-01-15 20:41 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-13 5:53 [PATCH v2 RESEND] btrfs-progs: make btrfs qgroups show human readable sizes Fan Chengniang
2015-01-14 15:46 ` David Sterba
2015-01-14 18:20 ` Roman Mamedov
2015-01-15 12:02 ` David Sterba
2015-01-15 1:01 ` Qu Wenruo
2015-01-15 12:05 ` David Sterba
2015-01-15 20:41 ` btrfs command completion Was: " Duncan
2015-01-15 1:17 ` Fan Chengniang/樊成酿
2015-01-15 12:30 ` David Sterba
2015-01-15 13:50 ` 樊成酿
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.