Author: brett
Date: Mon Mar 4 13:57:49 2013
New Revision: 1452308
URL: http://svn.apache.org/r1452308
Log:
[NPANDAY-578] relativize paths within the project
Primarily for packages downloaded using NuGet, this will make libraries a
little more portable
if they continue to use the system path.
Modified:
incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs
incubator/npanday/trunk/dotnet/assemblies/NPanday.Utils/src/main/csharp/PathUtility.cs
Modified:
incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs?rev=1452308&r1=1452307&r2=1452308&view=diff
==============================================================================
---
incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs
(original)
+++
incubator/npanday/trunk/dotnet/assemblies/NPanday.ProjectImporter/Engine/src/main/csharp/Converter/Algorithms/AbstractPomConverter.cs
Mon Mar 4 13:57:49 2013
@@ -1042,6 +1042,16 @@ namespace NPanday.ProjectImporter.Conver
}
else
{
+ // if it is in the project, we still consider it non-portable
because packaging plugins will exclude system dependencies
+ // however, we can adjust the path to be a bit more portable
across different checkouts
+ // first, check if the library is somewhere inside the
solution (mainPomFile is top-most POM)
+ string projectRoot = new
DirectoryInfo(mainPomFile).Parent.FullName;
+ if (PathUtility.IsSubdirectoryOf(projectRoot, path))
+ {
+ // if so, adjust path to be relative to this project's POM
file
+ path = "${basedir}\\" +
PathUtility.MakeRelative(projectDigest.FullDirectoryName + "\\", path);
+ refDependency.systemPath = path;
+ }
log.WarnFormat("Adding non-portable reference to POM: {0}",
path);
}
Modified:
incubator/npanday/trunk/dotnet/assemblies/NPanday.Utils/src/main/csharp/PathUtility.cs
URL:
http://svn.apache.org/viewvc/incubator/npanday/trunk/dotnet/assemblies/NPanday.Utils/src/main/csharp/PathUtility.cs?rev=1452308&r1=1452307&r2=1452308&view=diff
==============================================================================
---
incubator/npanday/trunk/dotnet/assemblies/NPanday.Utils/src/main/csharp/PathUtility.cs
(original)
+++
incubator/npanday/trunk/dotnet/assemblies/NPanday.Utils/src/main/csharp/PathUtility.cs
Mon Mar 4 13:57:49 2013
@@ -87,5 +87,29 @@ namespace NPanday.Utils
{
return new DirectoryInfo(Path.Combine(projectRoot.FullName,
DefaultBuildDirectoryName));
}
+
+ public static bool IsSubdirectoryOf(string basedir, string path)
+ {
+ basedir = new DirectoryInfo(basedir).FullName;
+
+ DirectoryInfo p = new DirectoryInfo(path);
+ do
+ {
+ if (p.Parent.FullName == basedir)
+ {
+ return true;
+ }
+ p = p.Parent;
+ }
+ while (p.Parent != null);
+
+ return false;
+ }
+
+ public static string MakeRelative(string basedir, string path)
+ {
+ Uri relativeUri = new Uri(basedir).MakeRelativeUri(new Uri(path));
+ return Uri.UnescapeDataString(relativeUri.ToString()).Replace('/',
Path.DirectorySeparatorChar);
+ }
}
}
\ No newline at end of file