ls-files: fix "--format" output of relative paths
Fix a bug introduced with the "--format" option in
ce74de93
(ls-files: introduce "--format" option, 2022-07-23),
where relative paths were computed using the output buffer,
which could lead to random garbage data in the output.
Signed-off-by: Adam Johnson <me@adamj.eu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ce74de931d
commit
cfb62dd006
@ -89,12 +89,15 @@ static void write_name(const char *name)
|
|||||||
|
|
||||||
static void write_name_to_buf(struct strbuf *sb, const char *name)
|
static void write_name_to_buf(struct strbuf *sb, const char *name)
|
||||||
{
|
{
|
||||||
const char *rel = relative_path(name, prefix_len ? prefix : NULL, sb);
|
struct strbuf buf = STRBUF_INIT;
|
||||||
|
const char *rel = relative_path(name, prefix_len ? prefix : NULL, &buf);
|
||||||
|
|
||||||
if (line_terminator)
|
if (line_terminator)
|
||||||
quote_c_style(rel, sb, NULL, 0);
|
quote_c_style(rel, sb, NULL, 0);
|
||||||
else
|
else
|
||||||
strbuf_addstr(sb, rel);
|
strbuf_addstr(sb, rel);
|
||||||
|
|
||||||
|
strbuf_release(&buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *get_tag(const struct cache_entry *ce, const char *tag)
|
static const char *get_tag(const struct cache_entry *ce, const char *tag)
|
||||||
|
@ -54,6 +54,22 @@ test_expect_success 'git ls-files --format path v.s. -s' '
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git ls-files --format with relative path' '
|
||||||
|
cat >expect <<-\EOF &&
|
||||||
|
../o1.txt
|
||||||
|
../o2.txt
|
||||||
|
../o3.txt
|
||||||
|
../o4.txt
|
||||||
|
../o5.txt
|
||||||
|
../o6.txt
|
||||||
|
EOF
|
||||||
|
mkdir sub &&
|
||||||
|
cd sub &&
|
||||||
|
git ls-files --format="%(path)" ":/" >../actual &&
|
||||||
|
cd .. &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'git ls-files --format with -m' '
|
test_expect_success 'git ls-files --format with -m' '
|
||||||
echo change >o1.txt &&
|
echo change >o1.txt &&
|
||||||
cat >expect <<-\EOF &&
|
cat >expect <<-\EOF &&
|
||||||
|
Loading…
Reference in New Issue
Block a user