Add -l/--long/--size option to git-ls-tree command, which displays object size of an entry after object id (left-justified with minimum width of 7 characters). Signed-off-by: Jakub Narebski <jnareb@xxxxxxxxx> --- This is to be used in 'tree' view in gitweb, controlled by the %feature hash. Documentation/git-ls-tree.txt | 14 +++++++++++++- builtin-ls-tree.c | 34 ++++++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/Documentation/git-ls-tree.txt b/Documentation/git-ls-tree.txt index 7899394..367f9bb 100644 --- a/Documentation/git-ls-tree.txt +++ b/Documentation/git-ls-tree.txt @@ -9,7 +9,7 @@ git-ls-tree - List the contents of a tree object SYNOPSIS -------- [verse] -'git-ls-tree' [-d] [-r] [-t] [-z] +'git-ls-tree' [-d] [-r] [-t] [-l] [-z] [--name-only] [--name-status] [--full-name] [--abbrev=[<n>]] <tree-ish> [paths...] @@ -36,6 +36,11 @@ OPTIONS Show tree entries even when going to recurse them. Has no effect if '-r' was not passed. '-d' implies '-t'. +-l:: +--long:: +--size:: + Show object size of entries. + -z:: \0 line termination on output. @@ -65,6 +70,13 @@ Output Format When the `-z` option is not used, TAB, LF, and backslash characters in pathnames are represented as `\t`, `\n`, and `\\`, respectively. +When the `-l` option is used, format changes to + + <mode> SP <type> SP <object> SP <object size> TAB <file> + +Object size identified by <objest> is given in bytes, and left-justified +with minimum width of 7 characters. + Author ------ diff --git a/builtin-ls-tree.c b/builtin-ls-tree.c index 1cb4dca..0c2eef7 100644 --- a/builtin-ls-tree.c +++ b/builtin-ls-tree.c @@ -15,6 +15,7 @@ static int line_termination = '\n'; #define LS_TREE_ONLY 2 #define LS_SHOW_TREES 4 #define LS_NAME_ONLY 8 +#define LS_SHOW_SIZE 16 static int abbrev; static int ls_options; static const char **pathspec; @@ -22,7 +23,7 @@ static int chomp_prefix; static const char *ls_tree_prefix; static const char ls_tree_usage[] = - "git-ls-tree [-d] [-r] [-t] [-z] [--name-only] [--name-status] [--full-name] [--abbrev[=<n>]] <tree-ish> [path...]"; + "git-ls-tree [-d] [-r] [-t] [-l] [-z] [--name-only] [--name-status] [--full-name] [--abbrev[=<n>]] <tree-ish> [path...]"; static int show_recursive(const char *base, int baselen, const char *pathname) { @@ -55,10 +56,11 @@ static int show_recursive(const char *base, int baselen, const char *pathname) } static int show_tree(const unsigned char *sha1, const char *base, int baselen, - const char *pathname, unsigned mode, int stage) + const char *pathname, unsigned mode, int stage) { int retval = 0; const char *type = blob_type; + unsigned long size; if (S_ISDIRLNK(mode)) { /* @@ -92,13 +94,21 @@ static int show_tree(const unsigned char *sha1, const char *base, int baselen, (baselen < chomp_prefix || memcmp(ls_tree_prefix, base, chomp_prefix))) return 0; - if (!(ls_options & LS_NAME_ONLY)) - printf("%06o %s %s\t", mode, type, - abbrev ? find_unique_abbrev(sha1,abbrev) - : sha1_to_hex(sha1)); + if (!(ls_options & LS_NAME_ONLY)) { + if (ls_options & LS_SHOW_SIZE) { + sha1_object_info(sha1, &size); + printf("%06o %s %s %7lu\t", mode, type, + abbrev ? find_unique_abbrev(sha1, abbrev) + : sha1_to_hex(sha1), + size); + } else + printf("%06o %s %s\t", mode, type, + abbrev ? find_unique_abbrev(sha1, abbrev) + : sha1_to_hex(sha1)); + } write_name_quoted(base + chomp_prefix, baselen - chomp_prefix, - pathname, - line_termination, stdout); + pathname, + line_termination, stdout); putchar(line_termination); return retval; } @@ -126,12 +136,20 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix) case 't': ls_options |= LS_SHOW_TREES; break; + case 'l': + ls_options |= LS_SHOW_SIZE; + break; case '-': if (!strcmp(argv[1]+2, "name-only") || !strcmp(argv[1]+2, "name-status")) { ls_options |= LS_NAME_ONLY; break; } + if (!strcmp(argv[1]+2, "long") || + !strcmp(argv[1]+2, "size")) { + ls_options |= LS_SHOW_SIZE; + break; + } if (!strcmp(argv[1]+2, "full-name")) { chomp_prefix = 0; break; -- 1.5.1.4 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html