From 689aa56f617abe783c8c0d7cc175a035e7dc4da4 Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Thu, 6 Oct 2022 21:14:32 +0100 Subject: [PATCH 01/11] Simplify class name This was named AllInstallData previously to avoid a conflict with another type, but that type is gone now (since #557). --- src/haxelib/api/Installer.hx | 38 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/haxelib/api/Installer.hx b/src/haxelib/api/Installer.hx index 5158e70c7..adb6b4ca4 100644 --- a/src/haxelib/api/Installer.hx +++ b/src/haxelib/api/Installer.hx @@ -106,7 +106,7 @@ class UserInterface { } } -private class AllInstallData { +private class InstallData { public final name:ProjectName; public final version:Version; public final isLatest:Bool; @@ -119,20 +119,20 @@ private class AllInstallData { this.isLatest = isLatest; } - public static function create(name:ProjectName, libFlagData:Option, versionData:Null>):AllInstallData { + public static function create(name:ProjectName, libFlagData:Option, versionData:Null>):InstallData { if (versionData != null && versionData.length == 0) throw new InstallationException('The library $name has not yet released a version'); return switch libFlagData { case None: final semVer = getLatest(versionData); - new AllInstallData(name, semVer, Haxelib(semVer), true); + new InstallData(name, semVer, Haxelib(semVer), true); case Some(Haxelib(version)) if (!versionData.contains(version)): throw new InstallationException('No such version $version for library $name'); case Some(Haxelib(version)): - new AllInstallData(name, version, Haxelib(version), version == getLatest(versionData)); + new InstallData(name, version, Haxelib(version), version == getLatest(versionData)); case Some(VcsInstall(version, vcsData)): - new AllInstallData(name, version, VcsInstall(version, vcsData), false); + new InstallData(name, version, VcsInstall(version, vcsData), false); } } } @@ -585,54 +585,54 @@ class Installer { } } - static function getInstallData(libs:List<{name:ProjectName, data:Option}>):List { - final installData = new List(); + static function getInstallData(libs:List<{name:ProjectName, data:Option}>):List { + final installData = new List(); final versionsData = getVersionsForEmptyLibs(libs); for (lib in libs) { final data = versionsData[lib.name]; if (data == null) { - installData.add(AllInstallData.create(lib.name, lib.data, null)); + installData.add(InstallData.create(lib.name, lib.data, null)); continue; } final libName = data.confirmedName; - installData.add(AllInstallData.create(libName, lib.data, data.versions)); + installData.add(InstallData.create(libName, lib.data, data.versions)); } return installData; } /** Returns a list of all require install data for the `libs`, and also filters out repeated libs. **/ - static function getFilteredVersionData(libs:List<{name:ProjectName, data:Option, isTargetLib:Bool}>):List { - final installData = new List(); + static function getFilteredVersionData(libs:List<{name:ProjectName, data:Option, isTargetLib:Bool}>):List { + final installDataList = new List(); final includedLibs = new Map>(); final versionsData = getVersionsForEmptyLibs(libs); for (lib in libs) { - final allInstallData = { + final installData = { final data = versionsData[lib.name]; if (data == null) { - AllInstallData.create(lib.name, lib.data, null); + InstallData.create(lib.name, lib.data, null); } else { final libName = data.confirmedName; - AllInstallData.create(libName, lib.data, data.versions); + InstallData.create(libName, lib.data, data.versions); } } - final lowerCaseName = ProjectName.ofString(allInstallData.name.toLowerCase()); + final lowerCaseName = ProjectName.ofString(installData.name.toLowerCase()); final includedVersions = includedLibs[lowerCaseName]; - if (includedVersions != null && (lib.isTargetLib || isVersionIncluded(allInstallData.versionData, includedVersions))) + if (includedVersions != null && (lib.isTargetLib || isVersionIncluded(installData.versionData, includedVersions))) continue; // do not include twice if (includedVersions == null) includedLibs[lowerCaseName] = []; - includedLibs[lowerCaseName].push(allInstallData.versionData); - installData.add(allInstallData); + includedLibs[lowerCaseName].push(installData.versionData); + installDataList.add(installData); } - return installData; + return installDataList; } /** Returns a map of version information for libraries in `libs` that have empty version information. **/ From 40ac11dc876199109844d013390753eb2ddc88af Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Thu, 6 Oct 2022 21:18:40 +0100 Subject: [PATCH 02/11] Fix misnamed method The variable and function names were changed erroneously in #557 via find and replace. --- src/haxelib/api/Installer.hx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/haxelib/api/Installer.hx b/src/haxelib/api/Installer.hx index adb6b4ca4..475010ffb 100644 --- a/src/haxelib/api/Installer.hx +++ b/src/haxelib/api/Installer.hx @@ -253,17 +253,17 @@ class Installer { // Check the version numbers are all good userInterface.log("Loading info about the required libraries"); - final versionData = getFilteredVersionData(libsToInstall); + final installData = getFilteredInstallData(libsToInstall); final libVersions = [ - for (library in versionData) + for (library in installData) {name:library.name, version:library.version} ]; // Abort if not confirmed if (confirmHxmlInstall != null && !confirmHxmlInstall(libVersions)) return; - for (library in versionData) { + for (library in installData) { if (library.versionData.match(Haxelib(_)) && repository.isVersionInstalled(library.name, library.version)) { final version = SemVer.ofString(library.version); if (scope.isLibraryInstalled(library.name) && scope.getVersion(library.name) == version) { @@ -604,7 +604,7 @@ class Installer { } /** Returns a list of all require install data for the `libs`, and also filters out repeated libs. **/ - static function getFilteredVersionData(libs:List<{name:ProjectName, data:Option, isTargetLib:Bool}>):List { + static function getFilteredInstallData(libs:List<{name:ProjectName, data:Option, isTargetLib:Bool}>):List { final installDataList = new List(); final includedLibs = new Map>(); From 667114dfef39e66c8d3352a2b64afcaa108509ab Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Thu, 6 Oct 2022 21:19:55 +0100 Subject: [PATCH 03/11] Fix other misnamed method This method, on the other hand, was missed out in #557 --- src/haxelib/api/Installer.hx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/haxelib/api/Installer.hx b/src/haxelib/api/Installer.hx index 475010ffb..3de327a6b 100644 --- a/src/haxelib/api/Installer.hx +++ b/src/haxelib/api/Installer.hx @@ -279,7 +279,7 @@ class Installer { } try - installFromInstallData(library.name, library.versionData) + installFromVersionData(library.name, library.versionData) catch (e) { userInterface.log(e.toString()); continue; @@ -538,7 +538,7 @@ class Installer { } try - installFromInstallData(lib.name, lib.versionData) + installFromVersionData(lib.name, lib.versionData) catch (e) { userInterface.log(e.toString()); continue; @@ -666,7 +666,7 @@ class Installer { return false; } - function installFromInstallData(library:ProjectName, data:VersionData) { + function installFromVersionData(library:ProjectName, data:VersionData) { switch data { case Haxelib(version): downloadAndInstall(library, version); From eb3ae4fff5315e084d2e6d870de0d413bc5a275e Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Thu, 6 Oct 2022 21:22:45 +0100 Subject: [PATCH 04/11] Change misleading function names The function doesn't just get the library versions, but also the correctly capitalised library name. --- src/haxelib/api/Connection.hx | 8 +++++--- src/haxelib/api/Installer.hx | 15 +++++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/haxelib/api/Connection.hx b/src/haxelib/api/Connection.hx index d70836bf4..72b06df26 100644 --- a/src/haxelib/api/Connection.hx +++ b/src/haxelib/api/Connection.hx @@ -354,10 +354,12 @@ class Connection { } /** - Returns a map of the library names in `libraries` with their validated names - (to ensure correct capitalisation) and available versions. + Returns a map of the library names in `libraries` with their correctly + capitalized names and available versions. **/ - public static function getVersionsForLibraries(libraries:Array):Map}> { + public static function getLibraryNamesAndVersions(libraries:Array): + Map}> + { // TODO: can we collapse this into a single API call? It's getting too slow otherwise. final map = new Map}>(); diff --git a/src/haxelib/api/Installer.hx b/src/haxelib/api/Installer.hx index 3de327a6b..2b777c1b4 100644 --- a/src/haxelib/api/Installer.hx +++ b/src/haxelib/api/Installer.hx @@ -588,7 +588,7 @@ class Installer { static function getInstallData(libs:List<{name:ProjectName, data:Option}>):List { final installData = new List(); - final versionsData = getVersionsForEmptyLibs(libs); + final versionsData = getDataForServerLibraries(libs); for (lib in libs) { final data = versionsData[lib.name]; @@ -608,11 +608,11 @@ class Installer { final installDataList = new List(); final includedLibs = new Map>(); - final versionsData = getVersionsForEmptyLibs(libs); + final serverData = getDataForServerLibraries(libs); for (lib in libs) { final installData = { - final data = versionsData[lib.name]; + final data = serverData[lib.name]; if (data == null) { InstallData.create(lib.name, lib.data, null); } else { @@ -635,8 +635,11 @@ class Installer { return installDataList; } - /** Returns a map of version information for libraries in `libs` that have empty version information. **/ - static function getVersionsForEmptyLibs(libs:List<{name:ProjectName, data:Option}>): + /** + Returns a map of name and version information for libraries in `libs` that + would be installed from the haxelib server. + **/ + static function getDataForServerLibraries(libs:List<{name:ProjectName, data:Option}>): Map}> { final toCheck:Array = []; @@ -644,7 +647,7 @@ class Installer { if (lib.data.match(None | Some(Haxelib(_)))) // Do not check vcs info toCheck.push(lib.name); - return Connection.getVersionsForLibraries(toCheck); + return Connection.getLibraryNamesAndVersions(toCheck); } static function isVersionIncluded(toCheck:VersionData, versions:Array):Bool { From dc44338238a5c6a7119efe58a043bc01c9423aa9 Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Thu, 6 Oct 2022 22:42:41 +0100 Subject: [PATCH 05/11] Remove outdated TODO We have to live with the current situation, and that means checking how the library should be capitalised --- src/haxelib/api/Connection.hx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/haxelib/api/Connection.hx b/src/haxelib/api/Connection.hx index 72b06df26..f3c930b7d 100644 --- a/src/haxelib/api/Connection.hx +++ b/src/haxelib/api/Connection.hx @@ -366,8 +366,7 @@ class Connection { for (lib in libraries) { final info = retry(data.site.infos.bind(lib)); final versionsData = info.versions; - // TODO with stricter capitalisation we won't have to use info.name maybe - map[lib] = {confirmedName: ProjectName.ofString(info.name), versions:[for(data in versionsData) data.name]}; + map[lib] = {confirmedName: ProjectName.ofString(info.name), versions: [for (data in versionsData) data.name]}; } return map; } From a67eb0516404c6f32501fe4835c833575d1f06aa Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Thu, 6 Oct 2022 21:39:04 +0100 Subject: [PATCH 06/11] Do not check server for git/hg target library If we are installing a target library (e.g. hxcpp) it via git/hg, there is no need to check the server data. This avoids errors if we cannot connect to the server or if the server does not have the library. --- src/haxelib/api/Installer.hx | 4 ++-- src/haxelib/api/LibFlagData.hx | 30 ++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/haxelib/api/Installer.hx b/src/haxelib/api/Installer.hx index 2b777c1b4..67a40d37b 100644 --- a/src/haxelib/api/Installer.hx +++ b/src/haxelib/api/Installer.hx @@ -604,7 +604,7 @@ class Installer { } /** Returns a list of all require install data for the `libs`, and also filters out repeated libs. **/ - static function getFilteredInstallData(libs:List<{name:ProjectName, data:Option, isTargetLib:Bool}>):List { + static function getFilteredInstallData(libs:List<{name:ProjectName, data:Option}>):List { final installDataList = new List(); final includedLibs = new Map>(); @@ -624,7 +624,7 @@ class Installer { final lowerCaseName = ProjectName.ofString(installData.name.toLowerCase()); final includedVersions = includedLibs[lowerCaseName]; - if (includedVersions != null && (lib.isTargetLib || isVersionIncluded(installData.versionData, includedVersions))) + if (includedVersions != null && isVersionIncluded(installData.versionData, includedVersions)) continue; // do not include twice if (includedVersions == null) includedLibs[lowerCaseName] = []; diff --git a/src/haxelib/api/LibFlagData.hx b/src/haxelib/api/LibFlagData.hx index 824aca674..e65881b85 100644 --- a/src/haxelib/api/LibFlagData.hx +++ b/src/haxelib/api/LibFlagData.hx @@ -63,9 +63,13 @@ private final libraryFlagEReg = ~/^-(lib|L|-library)\b/; Extracts the lib information from the hxml file at `path`. Does not filter out repeated libs. + + Target libraries (e.g. hxcpp) are also added if they are not explicitly + included via a -lib flag. **/ -function fromHxml(path:String):List<{name:ProjectName, data:Option, isTargetLib:Bool}> { - final libsData = new List<{name:ProjectName, data:Option, isTargetLib:Bool}>(); +function fromHxml(path:String):List<{name:ProjectName, data:Option}> { + final libsData = new List<{name:ProjectName, data:Option}>(); + final targetLibraries = [for (_ => lib in TARGETS) lib => null]; final lines = [path]; @@ -82,8 +86,8 @@ function fromHxml(path:String):List<{name:ProjectName, data:Option, if (targetFlagEReg.match(line)) { final target = targetFlagEReg.matched(1); final lib = TARGETS[target]; - if (lib != null) - libsData.add({name: lib, data: None, isTargetLib: true}); + if (lib != null && targetLibraries[lib] == null) + targetLibraries[lib] = true; } if (libraryFlagEReg.match(line)) { @@ -98,10 +102,24 @@ function fromHxml(path:String):List<{name:ProjectName, data:Option, data: switch (libDataEReg.matched(2)) { case null: None; case v: Some(extractVersion(v)); - }, - isTargetLib: false + } }); + if (targetLibraries.exists(name)) { + // it is included explicitly, so ignore whether the target flag was used + targetLibraries[name] = false; + } } } + + // add target libraries required for the hxml that weren't added explicitly + for (targetLib => shouldInstall in targetLibraries) { + if (shouldInstall) { + libsData.add({ + name: targetLib, + data: None + }); + } + } + return libsData; } From fc3db7ccfec8155ac1e2de1987de72c7de136087 Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Thu, 6 Oct 2022 21:39:49 +0100 Subject: [PATCH 07/11] Clean up messy if statement --- src/haxelib/api/Installer.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/haxelib/api/Installer.hx b/src/haxelib/api/Installer.hx index 67a40d37b..fbc396224 100644 --- a/src/haxelib/api/Installer.hx +++ b/src/haxelib/api/Installer.hx @@ -624,10 +624,10 @@ class Installer { final lowerCaseName = ProjectName.ofString(installData.name.toLowerCase()); final includedVersions = includedLibs[lowerCaseName]; - if (includedVersions != null && isVersionIncluded(installData.versionData, includedVersions)) - continue; // do not include twice if (includedVersions == null) includedLibs[lowerCaseName] = []; + else if (isVersionIncluded(installData.versionData, includedVersions)) + continue; // do not include twice includedLibs[lowerCaseName].push(installData.versionData); installDataList.add(installData); } From ccf2f032e8e7cce2b23ad67880f26d6dfdfd95dc Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Thu, 6 Oct 2022 21:44:03 +0100 Subject: [PATCH 08/11] Use lowercase name to confirm target lib inclusion So that we ignore --cpp if we find -lib hxcpp, regardless of how hxcpp is capitalised. --- src/haxelib/api/LibFlagData.hx | 5 +++-- .../InstallDeps/{other.hxml => cpp.hxml} | 0 .../InstallDeps/target-lib-uppercase.hxml | 4 ++++ test/libraries/InstallDeps/target-lib.hxml | 2 +- test/tests/TestInstaller.hx | 20 ++++++++++++++----- 5 files changed, 23 insertions(+), 8 deletions(-) rename test/libraries/InstallDeps/{other.hxml => cpp.hxml} (100%) create mode 100644 test/libraries/InstallDeps/target-lib-uppercase.hxml diff --git a/src/haxelib/api/LibFlagData.hx b/src/haxelib/api/LibFlagData.hx index e65881b85..64d54b458 100644 --- a/src/haxelib/api/LibFlagData.hx +++ b/src/haxelib/api/LibFlagData.hx @@ -104,9 +104,10 @@ function fromHxml(path:String):List<{name:ProjectName, data:Option} case v: Some(extractVersion(v)); } }); - if (targetLibraries.exists(name)) { + final normalizedName = name.toLowerCase(); + if (targetLibraries.exists(normalizedName)) { // it is included explicitly, so ignore whether the target flag was used - targetLibraries[name] = false; + targetLibraries[normalizedName] = false; } } } diff --git a/test/libraries/InstallDeps/other.hxml b/test/libraries/InstallDeps/cpp.hxml similarity index 100% rename from test/libraries/InstallDeps/other.hxml rename to test/libraries/InstallDeps/cpp.hxml diff --git a/test/libraries/InstallDeps/target-lib-uppercase.hxml b/test/libraries/InstallDeps/target-lib-uppercase.hxml new file mode 100644 index 000000000..e4fe5e567 --- /dev/null +++ b/test/libraries/InstallDeps/target-lib-uppercase.hxml @@ -0,0 +1,4 @@ +-lib HXCPP:git:https://github.com/HaxeFoundation/hxcpp.git + +cpp.hxml +# this file contains a --cpp flag diff --git a/test/libraries/InstallDeps/target-lib.hxml b/test/libraries/InstallDeps/target-lib.hxml index 7ab23d858..3ab66badf 100644 --- a/test/libraries/InstallDeps/target-lib.hxml +++ b/test/libraries/InstallDeps/target-lib.hxml @@ -1,4 +1,4 @@ -lib hxcpp:git:https://github.com/HaxeFoundation/hxcpp.git -other.hxml +cpp.hxml # this file contains a --cpp flag diff --git a/test/tests/TestInstaller.hx b/test/tests/TestInstaller.hx index afc19b5cc..804255249 100644 --- a/test/tests/TestInstaller.hx +++ b/test/tests/TestInstaller.hx @@ -76,13 +76,23 @@ class TestInstaller extends TestBase { } public function testInstallHxmlWithBackend() { + // inferred from -cpp/--cpp flags + installer.installFromHxml("cpp.hxml", (libs) -> { + assertEquals(1, Lambda.count(libs, (lib) -> lib.name == "hxcpp")); + return false; + }); + + // specified explicitly // test for issue #511 installer.installFromHxml("target-lib.hxml", (libs) -> { - var count = 0; - for (lib in libs) - if (lib.name == "hxcpp") - count++; - assertEquals(1, count); + assertEquals(1, Lambda.count(libs, (lib) -> lib.name == "hxcpp")); + return false; + }); + + // specified explicitly with non-standard capitalisation + installer.installFromHxml("target-lib-uppercase.hxml", (libs) -> { + assertEquals(1, Lambda.count(libs, (lib) -> lib.name == "HXCPP")); + assertEquals(0, Lambda.count(libs, (lib) -> lib.name == "hxcpp")); return false; }); } From 7e4a0928cc2042df971d8d1d56b4a191e6fa57b9 Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Thu, 6 Oct 2022 23:09:52 +0100 Subject: [PATCH 09/11] Rebuild run.n --- run.n | Bin 315779 -> 316329 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/run.n b/run.n index 74e655d72a623d8ffabf39338bd4a3e85012afdb..b338a05dd35934b938582a286e8b935bd6dd6334 100644 GIT binary patch delta 52020 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 V_Ky{0sn$89?spEgG4`CO^goT=_S66X From 74a66a9806dcb2bce6d006525bcb9c637d877845 Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Fri, 7 Oct 2022 11:16:50 +0100 Subject: [PATCH 10/11] Give type hint --- src/haxelib/api/LibFlagData.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/haxelib/api/LibFlagData.hx b/src/haxelib/api/LibFlagData.hx index 64d54b458..36d1dfa5a 100644 --- a/src/haxelib/api/LibFlagData.hx +++ b/src/haxelib/api/LibFlagData.hx @@ -69,7 +69,7 @@ private final libraryFlagEReg = ~/^-(lib|L|-library)\b/; **/ function fromHxml(path:String):List<{name:ProjectName, data:Option}> { final libsData = new List<{name:ProjectName, data:Option}>(); - final targetLibraries = [for (_ => lib in TARGETS) lib => null]; + final targetLibraries:Map> = [for (_ => lib in TARGETS) lib => null]; final lines = [path]; From 527c99cef1912dcb4157885b0cf3e4c3573868f5 Mon Sep 17 00:00:00 2001 From: tobil4sk Date: Fri, 7 Oct 2022 11:31:24 +0100 Subject: [PATCH 11/11] Fix comment --- src/haxelib/api/Installer.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/haxelib/api/Installer.hx b/src/haxelib/api/Installer.hx index fbc396224..cfebd1282 100644 --- a/src/haxelib/api/Installer.hx +++ b/src/haxelib/api/Installer.hx @@ -603,7 +603,7 @@ class Installer { return installData; } - /** Returns a list of all require install data for the `libs`, and also filters out repeated libs. **/ + /** Returns a list of all required install data for `libs`, and also filters out repeated libs. **/ static function getFilteredInstallData(libs:List<{name:ProjectName, data:Option}>):List { final installDataList = new List(); final includedLibs = new Map>();