diff --git a/src/Paket.Core/NuGetV2.fs b/src/Paket.Core/NuGetV2.fs index 7902b31cfa..88645c4938 100644 --- a/src/Paket.Core/NuGetV2.fs +++ b/src/Paket.Core/NuGetV2.fs @@ -289,6 +289,9 @@ let ExtractPackage(fileName:string, targetFolder, name, version:SemVerInfo) = for e in zip do try e.Extract(targetFolder, ExtractExistingFileAction.OverwriteSilently) + let unescapedName = Uri.UnescapeDataString e.FileName + if unescapedName <> e.FileName then + File.Move(Path.Combine(targetFolder, e.FileName), Path.Combine(targetFolder, unescapedName)) with | exn -> failwithf "Error during unzipping %s in %s %A: %s" e.FileName name version exn.Message diff --git a/src/Paket.Core/Utils.fs b/src/Paket.Core/Utils.fs index cfc293172d..bbed94d386 100644 --- a/src/Paket.Core/Utils.fs +++ b/src/Paket.Core/Utils.fs @@ -46,7 +46,7 @@ let CleanDir path = /// [omit] let inline createRelativePath root path = let uri = Uri(if String.IsNullOrEmpty root then System.Environment.CurrentDirectory + Path.DirectorySeparatorChar.ToString() else root) - uri.MakeRelativeUri(Uri(path)).ToString().Replace("/", "\\") + uri.MakeRelativeUri(Uri(path)).ToString().Replace("/", "\\") |> Uri.UnescapeDataString /// [omit] let inline normalizeXml(doc:XmlDocument) = diff --git a/tests/Paket.Tests/Paket.Tests.fsproj b/tests/Paket.Tests/Paket.Tests.fsproj index 2d0adda0bd..94cf149912 100644 --- a/tests/Paket.Tests/Paket.Tests.fsproj +++ b/tests/Paket.Tests/Paket.Tests.fsproj @@ -75,6 +75,7 @@ + Always diff --git a/tests/Paket.Tests/UtilsSpecs.fs b/tests/Paket.Tests/UtilsSpecs.fs new file mode 100644 index 0000000000..074471ac09 --- /dev/null +++ b/tests/Paket.Tests/UtilsSpecs.fs @@ -0,0 +1,9 @@ +module Paket.UtilsSpecs + +open Paket +open NUnit.Framework +open FsUnit + +[] +let ``createRelativePath should handle spaces``() = + "C:/some file" |> createRelativePath "C:/a/b" |> shouldEqual "..\\some file" \ No newline at end of file