From c60ba579661ed502d361eca0e7ce94c8a6544fc7 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 7 May 2015 15:43:36 -0400 Subject: Windows: Remove cygwin ssh, the newer version of which has stopped honoring the setting of HOME. Instead, copy msysgit's ssh into PATH. --- Build/BundledPrograms.hs | 5 +++-- Build/NullSoftInstaller.hs | 5 ++++- debian/changelog | 2 ++ doc/bugs/rsync_on_windows_broken_by_upgrade.mdwn | 26 ++++++++++++++++++++---- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/Build/BundledPrograms.hs b/Build/BundledPrograms.hs index 1e826cb10..4ceee3b52 100644 --- a/Build/BundledPrograms.hs +++ b/Build/BundledPrograms.hs @@ -35,13 +35,14 @@ bundledPrograms = catMaybes #endif , Just "rsync" #ifndef darwin_HOST_OS +#ifndef mingw32_HOST_OS -- OS X has ssh installed by default. -- Linux probably has ssh, but not guaranteed. - -- On Windows, msysgit provides ssh, but not in PATH, - -- so we ship our own. + -- On Windows, msysgit provides ssh. , Just "ssh" , Just "ssh-keygen" #endif +#endif #ifndef mingw32_HOST_OS , Just "sh" #endif diff --git a/Build/NullSoftInstaller.hs b/Build/NullSoftInstaller.hs index 0abd07f95..e9a22d843 100644 --- a/Build/NullSoftInstaller.hs +++ b/Build/NullSoftInstaller.hs @@ -92,7 +92,7 @@ uninstaller = "git-annex-uninstall.exe" gitInstallDir :: Exp FilePath gitInstallDir = fromString "$PROGRAMFILES\\Git" --- This intentionall has a different name than git-annex or +-- This intentionally has a different name than git-annex or -- git-annex-webapp, since it is itself treated as an executable file. -- Also, on XP, the filename is displayed, not the description. startMenuItem :: Exp FilePath @@ -152,6 +152,9 @@ makeInstaller gitannex license htmlhelp extrabins launchers = nsis $ do section "cmd" [] $ do setOutPath "$INSTDIR\\cmd" mapM_ addfile (gitannex:extrabins) + -- copy msysgit's ssh into cmd so it's always in PATH + -- (bin is only in PATH from git bash) + copyFiles [] "$INSTDIR\\bin\\ssh.exe" "$INSTDIR\\cmd\\ssh.exe" section "meta" [] $ do setOutPath "$INSTDIR\\doc\\git\\html" addfile htmlhelp diff --git a/debian/changelog b/debian/changelog index ef1357324..d59e21bcc 100644 --- a/debian/changelog +++ b/debian/changelog @@ -36,6 +36,8 @@ git-annex (5.20150421) UNRELEASED; urgency=medium Closes: #698559 (fsck can still need to write to the repository if it find problems, but a successful fsck can be done read-only) + * Windows: Remove cygwin ssh, the newer version of which has stopped + honoring the setting of HOME. Instead, copy msysgit's ssh into PATH. -- Joey Hess Tue, 21 Apr 2015 15:54:10 -0400 diff --git a/doc/bugs/rsync_on_windows_broken_by_upgrade.mdwn b/doc/bugs/rsync_on_windows_broken_by_upgrade.mdwn index 47f061659..cb58e009f 100644 --- a/doc/bugs/rsync_on_windows_broken_by_upgrade.mdwn +++ b/doc/bugs/rsync_on_windows_broken_by_upgrade.mdwn @@ -14,10 +14,13 @@ Problem doesn't seem to affect the bundled ssh, just rsync. --[[Joey]] > So the workaround is to > delete Git/bin/ssh.exe and leave Git/cmd/ssh.exe. Then rsync works. > However, this may screw up git's use of ssh or other stuff. +> +> Particularly, cygwin's ssh doesn't honor HOME anymore, instead using +> the getpwent home, which doesn't exist. > > Also, see > [[webapp_fails_to_connect_to_ssh_repository___40__windows__41__]] -> which is the inverse of this bug. +> which is the inverse of this bug perhaps, or at least seems related. > > Using 2 ssh's that try to use config from different places seems like > a losing propisition. Need to find an rsync that works with git's ssh. @@ -38,13 +41,28 @@ Problem doesn't seem to affect the bundled ssh, just rsync. --[[Joey]] >>> Possible fixes: >>> >>> * Roll the bundled ssh and rsync back to the older versions. ->>> (But, this seems like it would leave ->>> [[webapp_fails_to_connect_to_ssh_repository___40__windows__41__]] ->>> unfixed, unless the old version of ssh didn't have that problem.) +>>> +>>> **This works**. And, seems that the older version of ssh from cygwin +>>> looks at HOME, rather than getpwent home which the newer +>>> cygwin ssh does. +>>> >>> * Roll the bundled rsync back, drop ssh. Rely on msysgit's bundled ssh, >>> copying it into cmd so it's in PATH. Check: Does this combo work? +>>> +>>> **This works**! rsync 3.0.9 works ok with msysgit's bundled ssh. +>>> rsync 3.1.1 is the one that needs a newer ssh. +>>> +>>> Note that this means we're using an old version of rsync +>>> from cygwin with libraries from a newer cygwin. That might prove +>>> fragile as cygwin is upgraded. +>>> >>> * Hope that msysgit gets updated to include a newer version of ssh >>> which works with the new rsync. +>>> +>>> (Seems reasonable as a long-term plan, assuming that the +>>> new rsync's problem with ssh is that it needs a new one, and not some +>>> special cygwin thing.) +>>> >>> * Get rsync from somewhere else, perhaps msysgit. (Maybe also get ssh >>> from msysgit?) >>> * Keep the new rsync from cygwin, and build ssh from source, -- cgit v1.2.3