git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 7/7] t0000: verify that real_path() removes extra slashes

From
Nguyen Thai Ngoc Duy <pclouds@gmail.com>
Date
Sep 5, 2012, 10:52 UTC
Message-ID
<CACsJy8DAbp1uDsNFFk1g9tuEV1qMnM2DZtxOwp5H9_VE7VwO1g@mail.gmail.com>
In-Reply-To
<7v1uihbqhf.fsf@alter.siamese.dyndns.org>
On Wed, Sep 5, 2012 at 1:19 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 19 quoted lines
> mhagger@alum.mit.edu writes:
>
>> From: Michael Haggerty <mhagger@alum.mit.edu>
>>
>> These tests already pass, but make sure they don't break in the
>> future.
>>
>> Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
>> ---
>>
>> It would be great if somebody would check whether these tests pass on
>> Windows, and if not, give me a tip about how to fix them.
>
> I think this (perhaps unwarranted) removal of the double leading
> slashes is the root cause of
>
>     http://thread.gmane.org/gmane.comp.version-control.git/204469
>
> (people involved in that thread Cc'ed).

I gave up on that thread because I did not have a proper environment to further troubleshoot. Thanks Mike for giving me the clue about real_path(). I traced link_alt_odb_entry() and it does this:

	if (!is_absolute_path(entry) && relative_base) {
		strbuf_addstr(&pathbuf, real_path(relative_base));
		strbuf_addch(&pathbuf, '/');
	}
	strbuf_add(&pathbuf, entry, len);
	normalize_path_copy(pathbuf.buf, pathbuf.buf);

The culprit might be normalize_path_copy (I don't have Windows to test whether real_path() strips the leading slash in //server/somewhere). I tested normalize_path_copy() separately and it does strip leading slashes, so it needs to be fixed. Something like maybe:

diff --git a/path.c b/path.c
index 66acd24..ad2881c 100644
--- a/path.c
+++ b/path.c
@@ -503,6 +503,10 @@ int normalize_path_copy(char *dst, const char *src)
                *dst++ = *src++;
                *dst++ = *src++;
        }
+#ifdef WIN32
+       else if (src[0] == '/' && src[1] == '/')
+               *dst++ = *src++;
+#endif
        dst0 = dst;

        if (is_dir_sep(*src)) {

I'm not suitable for following this up as I don't have environment to
test it. Maybe some msysgit guy want to step in?
-- 
Duy
Previous: Junio C HamanoNext: Junio C Hamano
Message 16 of 25 in “Fix some bugs in abspath.c”
  1. 0/7 Fix some bugs in abspath.cmhagger@alum.mit.edu, Sep 4, 2012
  2. 1/7 t0000: verify that absolute_path() fails if passed the empty stringmhagger@alum.mit.edu, Sep 4, 2012
  3. 2/7 absolute_path(): reject the empty stringmhagger@alum.mit.edu, Sep 4, 2012
  4. 3/7 t0000: verify that real_path() fails if passed the empty stringmhagger@alum.mit.edu, Sep 4, 2012
  5. 4/7 real_path(): reject the empty stringmhagger@alum.mit.edu, Sep 4, 2012
  6. 5/7 t0000: verify that real_path() works correctly with absolute pathsmhagger@alum.mit.edu, Sep 4, 2012
  7. Johannes SixtSep 5, 2012
  8. Michael HaggertySep 6, 2012
  9. Junio C HamanoSep 6, 2012
  10. Michael HaggertySep 9, 2012
  11. Junio C HamanoSep 9, 2012
  12. Junio C HamanoSep 9, 2012
  13. 6/7 real_path(): properly handle nonexistent top-level pathsmhagger@alum.mit.edu, Sep 4, 2012
  14. 7/7 t0000: verify that real_path() removes extra slashesmhagger@alum.mit.edu, Sep 4, 2012
  15. Junio C HamanoSep 4, 2012
  16. Nguyen Thai Ngoc DuySep 5, 2012
  17. Junio C HamanoSep 6, 2012
  18. Nguyen Thai Ngoc DuySep 6, 2012
  19. Junio C HamanoSep 6, 2012
  20. Nguyen Thai Ngoc DuySep 7, 2012
  21. Johannes SixtSep 5, 2012
  22. Michael HaggertySep 6, 2012
  23. Junio C HamanoSep 4, 2012
  24. Junio C HamanoSep 4, 2012
  25. Nguyen Thai Ngoc DuySep 5, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.