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

[PATCH] Windows: Always normalize paths to Windows-style

From
Stepan Kasal <kasal@ucw.cz>
Date
Apr 28, 2014, 14:29 UTC
Message-ID
<20140428142931.GA12056@camelia.ucw.cz>
In-Reply-To
<CABPQNSbDkE+Vff=4MmPO9oMfjRay6Oin51zZRoZ8mOEhGoaD3Q@mail.gmail.com>
From: Heiko Voigt <hvoigt@hvoigt.net>
Date: Thu, 22 Mar 2012 19:17:03 +0100

It appears that `pwd` returns the POSIX-style or the DOS-style path depending which style the previous `cd` used. To normalize, enforce `pwd -W` in scripts.

>From the original e-mail exchange:
On Thu, Mar 22, 2012 at 11:13:37AM +0100, Sebastian Schuberth wrote:
Show 8 quoted lines
> On Wed, Mar 21, 2012 at 22:21, Johannes Sixt <j6t@kdbg.org> wrote:
>
> > I build git and run its tests outside the msysgit environment. Does that
> > explain the difference? (And I use CMD.)
>
> It does not make a difference for me. I started cmd.exe at
> c:\msysgit\git\t, added c:\msysgit\bin temporarily to PATH, and ran
> "sh t5526-fetch-submodules.sh -i -v", and the test still fails.

Yes it probably does. Johannes said that he runs the tests outside of the msysgit folder. That way there is only one path the submodule script gets reported and not two like '/c/msysgit/git' and '/git'.

That would explain to me why it is passing.

I am afraid that the only solution is to patch msys itself to report the long absolute path when passing window style paths to cd. Currently when I do

	cd c:/msysgit/git
I will end up in '/git' instead of the long path.

I found that there is a -W option to pwd in msys bash which makes it always return the real windows path. A normalization in that direction is unique and thus might be more robust. Have a look at the attached patch. With this at least t5526 passes. I was not able to run the whole testsuite properly at the moment. I can have a look at that tomorrow.

What do you think?
Cheers Heiko
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---

Hello, this is another patch that lives in msysGit for a long time. Originally, it had two parts: (Cf https://github.com/msysgit/git/commit/64a8a03 )

1) adding alias pwd='pwd -W' to git-sh-setup.sh
   This one went upstream, though as a shell function.
2) revert of commit 4dce7d9b by Johannes Sixt <j6t@kdbg.org>
This mingw-specific commit was created less than 3 weeks before
it was reverted.  And it stayed reverted for two years.

Could you please either accept this patch, or revert 4dce7d9b ? (Both alternatives are exactly the same.)

Have a nice day,
	Stepan Kasal
 git-submodule.sh | 3 ---
 1 file changed, 3 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 4a30087..247273e 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -285,9 +285,6 @@ module_clone()
 	# resolve any symlinks that might be present in $PWD
 	a=$(cd_to_toplevel && cd "$gitdir" && pwd)/
 	b=$(cd_to_toplevel && cd "$sm_path" && pwd)/
-	# normalize Windows-style absolute paths to POSIX-style absolute paths
-	case $a in [a-zA-Z]:/*) a=/${a%%:*}${a#*:} ;; esac
-	case $b in [a-zA-Z]:/*) b=/${b%%:*}${b#*:} ;; esac
 	# Remove all common leading directories after a sanity check
 	if test "${a#$b}" != "$a" || test "${b#$a}" != "$b"; then
 		die "$(eval_gettext "Gitdir '\$a' is part of the submodule path '\$b' or vice versa")"
-- 
1.9.2.msysgit.0.158.g6070cee
Previous: Erik Faye-LundNext: Stepan Kasal
Message 6 of 18 in “Sleep 1 millisecond in poll() to avoid busy wait”
  1. Sleep 1 millisecond in poll() to avoid busy waitStepan Kasal, Apr 28, 2014
  2. Erik Faye-LundApr 28, 2014
  3. Stepan KasalApr 28, 2014
  4. poll/select: prevent busy-waitingStepan Kasal, Apr 28, 2014
  5. Erik Faye-LundApr 28, 2014
  6. Windows: Always normalize paths to Windows-styleStepan Kasal, Apr 28, 2014
  7. Stepan KasalApr 28, 2014
  8. Heiko VoigtMay 7, 2014
  9. Junio C HamanoMay 7, 2014
  10. Stepan KasalMay 8, 2014
  11. Junio C HamanoMay 8, 2014
  12. Revert "submodules: fix ambiguous absolute paths under Windows"Stepan Kasal, May 8, 2014
  13. Johannes SixtApr 28, 2014
  14. Sleep 1 millisecond in poll() to avoid busy waitStepan Kasal, Apr 28, 2014
  15. Erik Faye-LundApr 28, 2014
  16. Junio C HamanoApr 28, 2014
  17. Stepan KasalApr 29, 2014
  18. Junio C HamanoApr 29, 2014

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.