From 0ae2ac282ec014eb3f79fd4aadb9e5be6b43a950 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 25 Oct 2017 19:04:26 -0400 Subject: [PATCH] fix gitAnnexLink to not be absolute on Windows Windows: Fix reversion that caused the path used to link to annexed content include the drive letter and full path, rather than being relative. (`git annex fix` will fix up after this problem). I've not identified the commit that brought the reversion (probably it happened this spring when I was removing MisingH and last touched Utility.Path). Likely commit 18b9a4b8024115db67ae309fdaf54e1553037529? The problem is that relPathDirToFile got called two paths that had the slashes different ways around. Since takeDrive includes the first slash, this made two paths on the same drive seem different and it bailed. (ifdefs around this to avoid doing extra work on non-windows) This commit was sponsored by Jack Hill on Patreon. --- CHANGELOG | 3 +++ Utility/Path.hs | 7 ++++++- doc/bugs/windows_annex_link_wrong.mdwn | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index bb61896048..e6456173a1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,9 @@ git-annex (6.20171019) UNRELEASED; urgency=medium Thanks, Sean T Parsons * Add day to metadata when annex.genmetadata is enabled. Thanks, Sean T Parsons + * Windows: Fix reversion that caused the path used to link + to annexed content include the drive letter and full path, rather than + being relative. (`git annex fix` will fix up after this problem). -- Joey Hess Tue, 24 Oct 2017 13:12:52 -0400 diff --git a/Utility/Path.hs b/Utility/Path.hs index 0779d16767..0409ff05f6 100644 --- a/Utility/Path.hs +++ b/Utility/Path.hs @@ -136,7 +136,9 @@ relPathDirToFile from to = relPathDirToFileAbs <$> absPath from <*> absPath to -} relPathDirToFileAbs :: FilePath -> FilePath -> FilePath relPathDirToFileAbs from to - | takeDrive from /= takeDrive to = to +#ifdef mingw32_HOST_OS + | normdrive from /= normdrive to = to +#endif | otherwise = joinPath $ dotdots ++ uncommon where pfrom = sp from @@ -147,6 +149,9 @@ relPathDirToFileAbs from to uncommon = drop numcommon pto dotdots = replicate (length pfrom - numcommon) ".." numcommon = length common +#ifdef mingw32_HOST_OS + normdrive = map toLower . takeWhile (/= ':') . takeDrive +#endif prop_relPathDirToFile_basics :: FilePath -> FilePath -> Bool prop_relPathDirToFile_basics from to diff --git a/doc/bugs/windows_annex_link_wrong.mdwn b/doc/bugs/windows_annex_link_wrong.mdwn index 96d1a9673f..8a1b29280b 100644 --- a/doc/bugs/windows_annex_link_wrong.mdwn +++ b/doc/bugs/windows_annex_link_wrong.mdwn @@ -2,3 +2,5 @@ On windows, the links to .git/annex/objects are no longer relative; include drive letter and full path. This used to not be the case; it must have gotten broken. --[[Joey]] + +> [[fixed|done]]