提交 69e74918 编写于 作者: J Jeff King 提交者: Junio C Hamano

quote_path: fix collapsing of relative paths

The code tries to collapse identical leading components
between the prefix and the path. So if we're in "dir1", the
path "dir1/file" should become just "file". However, we were
ending up with "../dir1/file". The included test expected
the wrong output.

The "len" parameter to quote_path can be negative to mean
"this is a NUL terminated string".  Simply count it so that
the loop can rely on it being the length of the path.
Signed-off-by: NJeff King <peff@peff.net>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 2f02b25f
......@@ -68,7 +68,7 @@ cat > expect << \EOF
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: ../dir1/modified
# modified: modified
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
......
......@@ -82,12 +82,13 @@ static void wt_status_print_trailer(struct wt_status *s)
}
static char *quote_path(const char *in, int len,
struct strbuf *out, const char *prefix)
struct strbuf *out, const char *prefix)
{
if (len > 0)
strbuf_grow(out, len);
strbuf_setlen(out, 0);
if (len < 0)
len = strlen(in);
strbuf_grow(out, len);
strbuf_setlen(out, 0);
if (prefix) {
int off = 0;
while (prefix[off] && off < len && prefix[off] == in[off])
......@@ -104,7 +105,7 @@ static char *quote_path(const char *in, int len,
strbuf_addstr(out, "../");
}
for (; (len < 0 && *in) || len > 0; in++, len--) {
for ( ; len > 0; in++, len--) {
int ch = *in;
switch (ch) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册