Skip to content

Commit

Permalink
remove VersionDirectory from libraries
Browse files Browse the repository at this point in the history
Before when building libraries, output files were placed inside a
directory named after the current version of the library, e.g.

    lib/build/UnoCore/1.2.3/

This is a relic from a time where it was possible to install multiple
versions of the same library side by side using Uno Package Manager.

Uno Package Manager was removed in favor of NPM in 2019, so we no longer
have this requirement and can remove the last directory part, e.g.

    lib/build/UnoCore/

We should still be able to load libraries built by older versions of
Uno using the version directory.
  • Loading branch information
mortend committed Jan 7, 2023
1 parent 45a266d commit 2efd9c7
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 24 deletions.
9 changes: 2 additions & 7 deletions src/tool/engine/Packages/LibraryBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,7 @@ void Build(LibraryProject lib, PackageCache packageCache, List<LibraryProject> f
}
else if (Directory.Exists(lib.PackageDirectory))
{
// Remove old versions
foreach (var dir in Directory.EnumerateDirectories(lib.PackageDirectory))
if (dir != lib.VersionDirectory)
Disk.DeleteDirectory(dir, true);

Disk.DeleteDirectory(Path.Combine(lib.CacheDirectory));
Disk.DeleteDirectory(lib.CacheDirectory);
}

var fail = TryGetFailedReference(lib, failed);
Expand All @@ -142,7 +137,7 @@ void Build(LibraryProject lib, PackageCache packageCache, List<LibraryProject> f
new BuildOptions
{
Configuration = GetConfiguration(lib),
OutputDirectory = lib.VersionDirectory,
OutputDirectory = lib.PackageDirectory,
PackageCache = packageCache,
Force = true
})
Expand Down
15 changes: 4 additions & 11 deletions src/tool/engine/Packages/LibraryProject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ public class LibraryProject
{
public readonly Project Project;
public readonly string PackageDirectory;
public readonly string VersionDirectory;
public readonly string CacheDirectory;
public readonly string ConfigFile;
public readonly string PackageFile;
Expand All @@ -22,18 +21,16 @@ public LibraryProject(Project project, string sourceDir)
{
Project = project;
PackageDirectory = Path.Combine(sourceDir, "build", project.Name);
VersionDirectory = Path.Combine(PackageDirectory, project.Version);
CacheDirectory = Path.Combine(VersionDirectory, ".uno");
CacheDirectory = Path.Combine(PackageDirectory, ".uno");
ConfigFile = Path.Combine(CacheDirectory, "config");
PackageFile = Path.Combine(CacheDirectory, "package");
}

LibraryProject(LibraryProject lib, string versionDir)
LibraryProject(LibraryProject lib)
{
Project = lib.Project;
PackageDirectory = lib.PackageDirectory;
VersionDirectory = versionDir;
CacheDirectory = Path.Combine(VersionDirectory, ".uno");
CacheDirectory = Path.Combine(PackageDirectory, ".uno");
ConfigFile = Path.Combine(CacheDirectory, "config");
PackageFile = Path.Combine(CacheDirectory, "package");
}
Expand All @@ -44,11 +41,7 @@ public bool TryGetExistingBuild(out LibraryProject existing)
if (!Directory.Exists(PackageDirectory))
return false;

var versions = Directory.EnumerateDirectories(PackageDirectory).ToArray();
if (versions.Length != 1)
return false;

existing = new LibraryProject(this, versions[0]);
existing = new LibraryProject(this);
return true;
}

Expand Down
13 changes: 11 additions & 2 deletions src/tool/engine/Packages/PackageFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,11 @@ public static PackageFile Load(string dir)
public readonly string RootDirectory;
public string CacheDirectory => Path.Combine(RootDirectory, ".uno");
public string Filename => GetName(RootDirectory);
public string Version => RootDirectory.GetPathComponent(-1);
public string Name => RootDirectory.GetPathComponent(-2);
public string Version => _version ?? RootDirectory.GetPathComponent(-1);
public string Name => _name ?? RootDirectory.GetPathComponent(-2);

readonly string _name;
readonly string _version;

PackageFile(string dir)
{
Expand All @@ -51,6 +54,8 @@ public static PackageFile Load(string dir)
PackageFile(StuffObject stuff, string dir)
: this(dir)
{
stuff.TryGetValue(nameof(Name), out _name);
stuff.TryGetValue(nameof(Version), out _version);
stuff.TryGetValue(nameof(BuildCondition), out BuildCondition);
stuff.TryGetValue(nameof(SourceDirectory), out SourceDirectory);
stuff.TryGetValue(nameof(IsTransitive), out IsTransitive);
Expand All @@ -74,6 +79,8 @@ public PackageFile(string installDir, string name, string version)
public PackageFile(SourcePackage upk, string dir)
: this(dir)
{
_name = upk.Name;
_version = upk.Version;
BuildCondition = upk.BuildCondition;
IsTransitive = upk.IsTransitive;

Expand All @@ -95,6 +102,8 @@ public PackageFile(SourcePackage upk, string dir)
public void Save()
{
new StuffObject {
{nameof(Name), Name},
{nameof(Version), Version},
{nameof(BuildCondition), BuildCondition},
{nameof(SourceDirectory), SourceDirectory},
{nameof(IsTransitive), IsTransitive},
Expand Down
12 changes: 8 additions & 4 deletions src/tool/engine/Packages/PackageSearchPaths.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,14 @@ public IEnumerable<DirectoryInfo> EnumeratePackageDirectories(string name = "*")
public IEnumerable<DirectoryInfo> EnumerateVersionDirectories(string name = "*", string version = null)
{
version = version ?? "*";
foreach (var package in EnumeratePackageDirectories(name))
foreach (var dir in package.EnumerateDirectories(version))
if (PackageFile.Exists(dir.FullName))
yield return dir;
foreach (var package in EnumeratePackageDirectories(name)) {
if (PackageFile.Exists(package.FullName))
yield return package;
else
foreach (var dir in package.EnumerateDirectories(version))
if (PackageFile.Exists(dir.FullName))
yield return dir;
}
}

public DirectoryInfo[] GetOrderedVersionDirectories(string name = "*", string version = null)
Expand Down

0 comments on commit 2efd9c7

Please sign in to comment.