diff --git a/Build/BundledPrograms.hs b/Build/BundledPrograms.hs index 2f38b11c9e..dea93c18e9 100644 --- a/Build/BundledPrograms.hs +++ b/Build/BundledPrograms.hs @@ -20,7 +20,7 @@ bundledPrograms :: [FilePath] bundledPrograms = catMaybes [ Nothing #ifndef mingw32_HOST_OS - -- git is not included in the windows bundle; msysgit is used + -- git is not included in the windows bundle; git for windows is used , Just "git" -- Not strictly needed in PATH by git-annex, but called -- by git when it sshes to a remote. @@ -28,7 +28,6 @@ bundledPrograms = catMaybes , Just "git-receive-pack" , Just "git-shell" #endif - , Just "cp" #ifndef mingw32_HOST_OS -- using xargs on windows led to problems, so it's not used there , Just "xargs" @@ -38,7 +37,7 @@ bundledPrograms = catMaybes #ifndef mingw32_HOST_OS -- OS X has ssh installed by default. -- Linux probably has ssh, but not guaranteed. - -- On Windows, msysgit provides ssh. + -- On Windows, git provides ssh. , Just "ssh" , Just "ssh-keygen" #endif @@ -46,7 +45,6 @@ bundledPrograms = catMaybes #ifndef mingw32_HOST_OS , Just "sh" #endif - , SysConfig.gpg , ifset SysConfig.curl "curl" #ifndef darwin_HOST_OS -- wget on OSX has been problimatic, looking for certs in the wrong @@ -56,11 +54,16 @@ bundledPrograms = catMaybes #endif , SysConfig.lsof , SysConfig.gcrypt +#ifndef mingw32_HOST_OS + -- All these utilities are included in git for Windows + , SysConfig.gpg , SysConfig.sha1 , SysConfig.sha256 , SysConfig.sha512 , SysConfig.sha224 , SysConfig.sha384 + , Just "cp" +#endif #ifdef linux_HOST_OS -- used to unpack the tarball when upgrading , Just "gunzip" diff --git a/Build/NullSoftInstaller.hs b/Build/NullSoftInstaller.hs index e300036e4c..7726fdcbce 100644 --- a/Build/NullSoftInstaller.hs +++ b/Build/NullSoftInstaller.hs @@ -1,7 +1,7 @@ {- Generates a NullSoft installer program for git-annex on Windows. - - To build the installer, git-annex should already be built by cabal, - - and ssh and rsync etc, as well as cygwin libraries, already installed + - and the necessary utility programs already installed - from cygwin. - - This uses the Haskell nsis package (cabal install nsis) @@ -9,8 +9,9 @@ - git-annex-installer.exe - - The installer includes git-annex, and utilities it uses, with the - - exception of git. The user needs to install git separately, - - and the installer checks for that. + - exception of git and some utilities that are bundled with git. + - The user needs to install git separately, and the installer checks + - for that. - - Copyright 2013-2015 Joey Hess - @@ -34,6 +35,7 @@ import Utility.Path import Utility.CopyFile import Utility.SafeCommand import Utility.Process +import Utility.Exception import Build.BundledPrograms main = do @@ -42,7 +44,7 @@ main = do mustSucceed "ln" [File "dist/build/git-annex/git-annex.exe", File gitannex] let license = tmpdir licensefile mustSucceed "sh" [Param "-c", Param $ "zcat standalone/licences.gz > '" ++ license ++ "'"] - extrabins <- forM (cygwinPrograms) $ \f -> do + extrabins <- forM (winPrograms) $ \f -> do p <- searchPath f when (isNothing p) $ print ("unable to find in PATH", f) @@ -54,7 +56,7 @@ main = do let htmlhelp = tmpdir "git-annex.html" writeFile htmlhelp htmlHelpText writeFile nsifile $ makeInstaller gitannex license htmlhelp - (wrappers ++ catMaybes (extrabins ++ dllpaths)) + (catMaybes (extrabins ++ dllpaths)) [ webappscript, autostartscript ] mustSucceed "makensis" [File nsifile] removeFile nsifile -- left behind if makensis fails @@ -173,10 +175,10 @@ makeInstaller gitannex license htmlhelp extrabins launchers = nsis $ do addfile f = file [] (str f) removefilesFrom d = mapM_ (\f -> delete [RebootOK] $ fromString $ d ++ "/" ++ takeFileName f) -cygwinPrograms :: [FilePath] -cygwinPrograms = map (\p -> p ++ ".exe") bundledPrograms +winPrograms :: [FilePath] +winPrograms = map (\p -> p ++ ".exe") bundledPrograms --- msysgit opens Program Files/Git/doc/git/html/git-annex.html +-- git opens Program Files/Git/doc/git/html/git-annex.html -- when git annex --help is run. htmlHelpText :: String htmlHelpText = unlines @@ -191,15 +193,10 @@ htmlHelpText = unlines -- Find cygwin libraries used by the specified executable. findCygLibs :: FilePath -> IO [FilePath] -findCygLibs p = filter iscyg . mapMaybe parse . lines <$> readProcess "ldd" [p] +findCygLibs p = filter iscyg . mapMaybe parse . lines + <$> catchDefaultIO "" (readProcess "ldd" [p]) where parse l = case words (dropWhile isSpace l) of (dll:"=>":_dllpath:_offset:[]) -> Just dll _ -> Nothing iscyg f = "cyg" `isPrefixOf` f || "lib" `isPrefixOf` f - -wrappers :: [FilePath] -wrappers = - [ "standalone\\windows\\ssh.cmd" - , "standalone\\windows\\ssh-keygen.cmd" - ] diff --git a/Git/Hook.hs b/Git/Hook.hs index aec2563f43..f4424c60e9 100644 --- a/Git/Hook.hs +++ b/Git/Hook.hs @@ -81,7 +81,7 @@ runHook h r = do #ifndef mingw32_HOST_OS findcmd = defcmd #else - {- Like msysgit, parse the first line of the hook file, + {- Like git for windows, parse the first line of the hook file, - look for "#!", and dispatch the interpreter on the file. -} findcmd f = do l <- headMaybe . lines <$> catchDefaultIO "" (readFile f) diff --git a/debian/changelog b/debian/changelog index 95a3ff9f70..2cb63ed972 100644 --- a/debian/changelog +++ b/debian/changelog @@ -12,6 +12,8 @@ git-annex (5.20150825) UNRELEASED; urgency=medium * When gpg.program is configured, it's used to get the command to run for gpg. Useful on systems that have only a gpg2 command or want to use it instead of the gpg command. + * Windows: Switched to using git for Windows, rather than msysgit. + Using msysgit with git-annex is no longer supported. -- Joey Hess Tue, 01 Sep 2015 14:46:18 -0700 diff --git a/doc/install/Windows.mdwn b/doc/install/Windows.mdwn index 37fbc85c2c..bf95829138 100644 --- a/doc/install/Windows.mdwn +++ b/doc/install/Windows.mdwn @@ -1,7 +1,7 @@ git-annex now does Windows! -* First, [install msysgit](http://git-scm.com/downloads) (msysgit 1.9 is needed; the new "git for windows" does not currently work) - _Be sure to tell the msysgit installer to add git to the PATH._ +* First, [install git for Windows](http://git-scm.com/downloads) (msysgit is no longer supported) + _Be sure to tell the installer to add git to the PATH._ That is, select "Use Git from the Windows Command Prompt" * Then, [install git-annex](https://downloads.kitenet.net/git-annex/windows/current/) @@ -36,7 +36,7 @@ Once the prerequisites are installed, run: build Note that git from Cygwin is able to clone git-annex's git repository; -Msysgit cannot due to some characters in filenames. +Regular git for Windows cannot due to some characters in filenames. (To build the git-annex installer, you also need to install the NullSoft installer system.) diff --git a/standalone/windows/build.sh b/standalone/windows/build.sh index 8c26874b25..86b28847ce 100755 --- a/standalone/windows/build.sh +++ b/standalone/windows/build.sh @@ -63,8 +63,11 @@ cabal install nsis ghc -fforce-recomp --make Build/NullSoftInstaller.hs -fno-warn-tabs # Want to include cygwin programs in bundle, not others, since # it includes the cygwin libs that go with them. -# Currently need an older version of rsync than the one from cygwin. -if [ ! -e rsync.exe ]; then +# Currently need an different version of rsync than the one from cygwin. +# This rsync build originally comes from https://msys2.github.io/, +# and it works with the ssh bundled with git for windows. +if [ ! -e rsync.exe ] || [ "$(sha1sum rsync.exe)" != "85cb7a4d16d274fcf8069b39042965ad26abd6aa" ]; then + rm -f rsync.exe || true withcyg wget https://downloads.kitenet.net/git-annex/windows/assets/rsync.exe withcyg chmod +x rsync.exe fi diff --git a/standalone/windows/ssh-keygen.cmd b/standalone/windows/ssh-keygen.cmd deleted file mode 100644 index 3afd28f470..0000000000 --- a/standalone/windows/ssh-keygen.cmd +++ /dev/null @@ -1,31 +0,0 @@ -@rem Do not use "echo off" to not affect any child calls. - -@rem Enable extensions, the `verify other 2>nul` is a trick from the setlocal help -@verify other 2>nul -@setlocal enableDelayedExpansion -@if errorlevel 1 ( - @echo Unable to enable delayed expansion. Immediate expansion will be used. - @goto fallback -) - -@rem Get the absolute path to the parent directory, which is assumed to be the -@rem Git installation root. -@for /F "delims=" %%I in ("%~dp0..") do @set git_install_root=%%~fI -@set PATH=!git_install_root!\bin;!git_install_root!\usr\bin;!git_install_root!\mingw\bin;!PATH! - -ssh-keygen %* -@goto end - -:fallback -@rem The above script again with immediate expansion, in case delayed expansion -@rem is unavailable. -@for /F "delims=" %%I in ("%~dp0..") do @set git_install_root=%%~fI -@set PATH=%git_install_root%\bin;%git_install_root%\usr\bin;%git_install_root%\mingw\bin;%PATH% - -@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH% -@if not exist "%HOME%" @set HOME=%USERPROFILE% - -ssh-keygen %* - -:end -@rem End of script diff --git a/standalone/windows/ssh.cmd b/standalone/windows/ssh.cmd deleted file mode 100644 index ad9b5c3004..0000000000 --- a/standalone/windows/ssh.cmd +++ /dev/null @@ -1,31 +0,0 @@ -@rem Do not use "echo off" to not affect any child calls. - -@rem Enable extensions, the `verify other 2>nul` is a trick from the setlocal help -@verify other 2>nul -@setlocal enableDelayedExpansion -@if errorlevel 1 ( - @echo Unable to enable delayed expansion. Immediate expansion will be used. - @goto fallback -) - -@rem Get the absolute path to the parent directory, which is assumed to be the -@rem Git installation root. -@for /F "delims=" %%I in ("%~dp0..") do @set git_install_root=%%~fI -@set PATH=!git_install_root!\bin;!git_install_root!\usr\bin;!git_install_root!\mingw\bin;!PATH! - -ssh %* -@goto end - -:fallback -@rem The above script again with immediate expansion, in case delayed expansion -@rem is unavailable. -@for /F "delims=" %%I in ("%~dp0..") do @set git_install_root=%%~fI -@set PATH=%git_install_root%\bin;%git_install_root%\usr\bin;%git_install_root%\mingw\bin;%PATH% - -@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH% -@if not exist "%HOME%" @set HOME=%USERPROFILE% - -ssh %* - -:end -@rem End of script