ref-filter: add support for %(contents:size)
It's useful and efficient to be able to get the size of the contents directly without having to pipe through `wc -c`. Also the result of the following: `git for-each-ref --format='%(contents)' refs/heads/my-branch | wc -c` is off by one as `git for-each-ref` appends a newline character after the contents, which can be seen by comparing its output with the output from `git cat-file`. As with %(contents), %(contents:size) is silently ignored, if a ref points to something other than a commit or a tag: ``` $ git update-ref refs/mytrees/first HEAD^{tree} $ git for-each-ref --format='%(contents)' refs/mytrees/first $ git for-each-ref --format='%(contents:size)' refs/mytrees/first ``` Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
6e2ef8eb06
commit
b6839fda68
@ -52,6 +52,25 @@ test_atom() {
|
||||
sanitize_pgp <actual >actual.clean &&
|
||||
test_cmp expected actual.clean
|
||||
"
|
||||
# Automatically test "contents:size" atom after testing "contents"
|
||||
if test "$2" = "contents"
|
||||
then
|
||||
case $(git cat-file -t "$ref") in
|
||||
tag)
|
||||
# We cannot use $3 as it expects sanitize_pgp to run
|
||||
expect=$(git cat-file tag $ref | tail -n +6 | wc -c) ;;
|
||||
tree | blob)
|
||||
expect='' ;;
|
||||
commit)
|
||||
expect=$(printf '%s' "$3" | wc -c) ;;
|
||||
esac
|
||||
# Leave $expect unquoted to lose possible leading whitespaces
|
||||
echo $expect >expected
|
||||
test_expect_${4:-sucess} $PREREQ "basic atom: $1 contents:size" '
|
||||
git for-each-ref --format="%(contents:size)" "$ref" >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
fi
|
||||
}
|
||||
|
||||
hexlen=$(test_oid hexsz)
|
||||
|
Reference in New Issue
Block a user