From 918b30c03bea5433d4ecb63f13abdaefcaad0e19 Mon Sep 17 00:00:00 2001 From: Bob van der Linden Date: Wed, 27 Dec 2023 14:59:46 +0100 Subject: [PATCH 1/2] url-name: add tests for flake: scheme --- tests/unit/libutil/url-name.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/unit/libutil/url-name.cc b/tests/unit/libutil/url-name.cc index f637efa899d..b4bfed88c52 100644 --- a/tests/unit/libutil/url-name.cc +++ b/tests/unit/libutil/url-name.cc @@ -6,6 +6,9 @@ namespace nix { /* ----------- tests for url-name.hh --------------------------------------------------*/ TEST(getNameFromURL, getsNameFromURL) { + ASSERT_EQ(getNameFromURL(parseURL("flake:nixpkgs#hello")), "hello"); + ASSERT_EQ(getNameFromURL(parseURL("flake:nixpkgs#packages.x86_64-linux.hello")), "hello"); + ASSERT_EQ(getNameFromURL(parseURL("path:/home/user/project")), "project"); ASSERT_EQ(getNameFromURL(parseURL("path:~/repos/nixpkgs#packages.x86_64-linux.hello")), "hello"); ASSERT_EQ(getNameFromURL(parseURL("path:.#nonStandardAttr.mylaptop")), "nonStandardAttr.mylaptop"); @@ -63,5 +66,7 @@ namespace nix { ASSERT_EQ(getNameFromURL(parseURL("file:.#")), std::nullopt); ASSERT_EQ(getNameFromURL(parseURL("path:.#packages.x86_64-linux.default")), std::nullopt); ASSERT_EQ(getNameFromURL(parseURL("path:.#packages.x86_64-linux.default^*")), std::nullopt); + ASSERT_EQ(getNameFromURL(parseURL("flake:nixpkgs")), std::nullopt); + ASSERT_EQ(getNameFromURL(parseURL("flake:nixpkgs#")), std::nullopt); } } From 52972766668f426c27f3c5b231bbe10ace48055d Mon Sep 17 00:00:00 2001 From: Bob van der Linden Date: Wed, 27 Dec 2023 15:01:02 +0100 Subject: [PATCH 2/2] url-name: support fragments using legacyPackages This was not supported, because upper-case characters were not allowed in URL fragments for url-name extraction. --- src/libutil/url-name.cc | 2 +- tests/unit/libutil/url-name.cc | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libutil/url-name.cc b/src/libutil/url-name.cc index 7e51aa2e119..753f197d555 100644 --- a/src/libutil/url-name.cc +++ b/src/libutil/url-name.cc @@ -4,7 +4,7 @@ namespace nix { -static const std::string attributeNamePattern("[a-z0-9_-]+"); +static const std::string attributeNamePattern("[a-zA-Z0-9_-]+"); static const std::regex lastAttributeRegex("(?:" + attributeNamePattern + "\\.)*(?!default)(" + attributeNamePattern +")(\\^.*)?"); static const std::string pathSegmentPattern("[a-zA-Z0-9_-]+"); static const std::regex lastPathSegmentRegex(".*/(" + pathSegmentPattern +")"); diff --git a/tests/unit/libutil/url-name.cc b/tests/unit/libutil/url-name.cc index b4bfed88c52..f831eab9702 100644 --- a/tests/unit/libutil/url-name.cc +++ b/tests/unit/libutil/url-name.cc @@ -8,11 +8,12 @@ namespace nix { TEST(getNameFromURL, getsNameFromURL) { ASSERT_EQ(getNameFromURL(parseURL("flake:nixpkgs#hello")), "hello"); ASSERT_EQ(getNameFromURL(parseURL("flake:nixpkgs#packages.x86_64-linux.hello")), "hello"); + ASSERT_EQ(getNameFromURL(parseURL("flake:nixpkgs#legacyPackages.x86_64-linux.hello")), "hello"); ASSERT_EQ(getNameFromURL(parseURL("path:/home/user/project")), "project"); ASSERT_EQ(getNameFromURL(parseURL("path:~/repos/nixpkgs#packages.x86_64-linux.hello")), "hello"); - ASSERT_EQ(getNameFromURL(parseURL("path:.#nonStandardAttr.mylaptop")), "nonStandardAttr.mylaptop"); - ASSERT_EQ(getNameFromURL(parseURL("path:./repos/myflake#nonStandardAttr.mylaptop")), "nonStandardAttr.mylaptop"); + ASSERT_EQ(getNameFromURL(parseURL("path:.#nonStandardAttr.mylaptop")), "mylaptop"); + ASSERT_EQ(getNameFromURL(parseURL("path:./repos/myflake#nonStandardAttr.mylaptop")), "mylaptop"); ASSERT_EQ(getNameFromURL(parseURL("path:./nixpkgs#packages.x86_64-linux.complex^bin,man")), "complex"); ASSERT_EQ(getNameFromURL(parseURL("path:./myproj#packages.x86_64-linux.default^*")), "myproj");