Skip to content

Commit 13cbe3e

Browse files
committed
remote-repo-url
1 parent b2dc4f1 commit 13cbe3e

15 files changed

+204
-254
lines changed

CMakeLists.txt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ add_library(hk_objects OBJECT
5757
"${CMAKE_CURRENT_SOURCE_DIR}/src/parser/parse_module.hpp"
5858
"${CMAKE_CURRENT_SOURCE_DIR}/src/parser/parser.cpp"
5959
"${CMAKE_CURRENT_SOURCE_DIR}/src/parser/parsers.hpp"
60-
"${CMAKE_CURRENT_SOURCE_DIR}/src/prologue/prologue_scan.cpp"
61-
"${CMAKE_CURRENT_SOURCE_DIR}/src/prologue/prologue_scan.hpp"
60+
"${CMAKE_CURRENT_SOURCE_DIR}/src/repository/repository.cpp"
61+
"${CMAKE_CURRENT_SOURCE_DIR}/src/repository/repository.hpp"
6262
"${CMAKE_CURRENT_SOURCE_DIR}/src/tokenizer/parse_block_comment.cpp"
6363
"${CMAKE_CURRENT_SOURCE_DIR}/src/tokenizer/parse_bracketed_string.cpp"
6464
"${CMAKE_CURRENT_SOURCE_DIR}/src/tokenizer/parse_context_arg.cpp"
@@ -82,6 +82,8 @@ add_library(hk_objects OBJECT
8282
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/char_category.hpp"
8383
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/command_line.cpp"
8484
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/command_line.hpp"
85+
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/defer.hpp"
86+
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/enum_variant.hpp"
8587
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/file_buffer.cpp"
8688
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/file_buffer.hpp"
8789
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/file_cursor.cpp"
@@ -93,6 +95,7 @@ add_library(hk_objects OBJECT
9395
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/file.hpp"
9496
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/fixed_fifo.hpp"
9597
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/fqname.hpp"
98+
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/generator.hpp"
9699
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/git.cpp"
97100
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/git.hpp"
98101
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/log.cpp"
@@ -109,6 +112,7 @@ add_library(hk_objects OBJECT
109112
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/strings.hpp"
110113
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/unicode.cpp"
111114
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/unicode.hpp"
115+
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/vector_set.hpp"
112116
)
113117

114118
target_include_directories(hk_objects PRIVATE "${CMAKE_SOURCE_DIR}/src")
@@ -135,8 +139,6 @@ target_sources(hkc PRIVATE
135139
"${CMAKE_CURRENT_SOURCE_DIR}/src/hkc/hkc.cpp"
136140
"${CMAKE_CURRENT_SOURCE_DIR}/src/hkc/options.cpp"
137141
"${CMAKE_CURRENT_SOURCE_DIR}/src/hkc/options.hpp"
138-
"${CMAKE_CURRENT_SOURCE_DIR}/src/hkc/repository.cpp"
139-
"${CMAKE_CURRENT_SOURCE_DIR}/src/hkc/repository.hpp"
140142
)
141143

142144
target_include_directories(hkc PRIVATE "${CMAKE_SOURCE_DIR}/src")
@@ -154,13 +156,13 @@ if(BUILD_TESTING)
154156
add_executable(hktests)
155157
target_sources(hktests PRIVATE
156158
$<TARGET_OBJECTS:hk_objects>
159+
"${CMAKE_CURRENT_SOURCE_DIR}/src/repository/repository_tests.cpp"
160+
"${CMAKE_CURRENT_SOURCE_DIR}/src/tokenizer/tokenizer_tests.cpp"
157161
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/git_tests.cpp"
158162
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/unit_test.cpp"
159163
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/unit_test.hpp"
160-
"${CMAKE_CURRENT_SOURCE_DIR}/src/prologue/prologue_scan_tests.cpp"
161-
"${CMAKE_CURRENT_SOURCE_DIR}/src/tokenizer/tokenizer_tests.cpp"
162-
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/unicode_tests.cpp"
163164
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/strings_tests.cpp"
165+
"${CMAKE_CURRENT_SOURCE_DIR}/src/utility/unicode_tests.cpp"
164166
)
165167
#target_compile_definitions(hktests PRIVATE ${LLVM_DEFINITIONS})
166168
#target_link_libraries(hktests PRIVATE ${llvm_libs})

src/ast/import_declaration_node.cpp

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -6,54 +6,7 @@
66

77
namespace hk::ast {
88

9-
[[nodiscard]] std::string import_declaration_node::path_hash() const
10-
{
11-
auto const full_path = [this] {
12-
switch (kind) {
13-
case kind_type::git:
14-
return std::format("{}:{}", path, branch);
15-
case kind_type::zip:
16-
return path;
17-
case kind_type::mod:
18-
return static_cast<std::string>(name);
19-
case kind_type::lib:
20-
return path;
21-
}
22-
std::unreachable();
23-
}();
249

25-
auto const hash = sha256(full_path);
26-
return base32_encode(hash);
27-
}
28-
29-
[[nodiscard]] std::string import_declaration_node::path_stem() const
30-
{
31-
if (kind == kind_type::mod) {
32-
return static_cast<std::string>(name);
33-
}
34-
35-
auto first = path.rfind('/');
36-
if (first == std::string::npos) {
37-
first = path.rfind('\\');
38-
}
39-
if (first == std::string::npos) {
40-
first = 0;
41-
} else {
42-
++first;
43-
}
44-
45-
auto last = path.rfind('.');
46-
if (last == std::string::npos or last <= first) {
47-
last = path.size();
48-
}
49-
50-
return path.substr(first, last - first);
51-
}
52-
53-
[[nodiscard]] std::string import_declaration_node::directory_name() const
54-
{
55-
return std::format("{}-{}", path_stem(), path_hash().substr(0, 10));
56-
}
5710

5811

5912
}

src/ast/import_declaration_node.hpp

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
#include "node.hpp"
55
#include "utility/fqname.hpp"
6+
#include "utility/generator.hpp"
7+
#include "utility/remote_repo_url.hpp"
68

79

810
namespace hk::ast {
@@ -16,17 +18,13 @@ class import_declaration_node : public node {
1618
*/
1719
mod,
1820

19-
/** Import a git repository.
21+
/** Import a FFI/system library.
2022
*/
21-
git,
23+
lib,
2224

23-
/** Import a zip-file repository.
25+
/** Import a repository.
2426
*/
25-
zip,
26-
27-
/** Import a FFI/system library.
28-
*/
29-
lib
27+
repository
3028
};
3129

3230
/** The kind of import
@@ -41,27 +39,9 @@ class import_declaration_node : public node {
4139
*/
4240
std::string as = {};
4341

44-
/** Path to the repository or library.
45-
*/
46-
std::string path = {};
47-
48-
/** Git brach/tag/sha to checkout.
49-
*/
50-
std::string branch = {};
51-
52-
53-
/** Create the dependency directory-name.
54-
*
55-
* This is based around the following parts:
56-
* - The filename (excluding extension)
57-
* - A dash `-`
58-
* - A hash of the full path and branch.
59-
*/
60-
[[nodiscard]] std::string directory_name() const;
42+
remote_repo_url url = {};
6143

6244
private:
63-
[[nodiscard]] std::string path_hash() const;
64-
[[nodiscard]] std::string path_stem() const;
6545

6646
};
6747

src/ast/module_node.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
2+
#include "module_node.hpp"
3+
4+
namespace hk {
5+
6+
[[nodiscard]] generator<remote_repo_url> remote_repositories() const
7+
{
8+
9+
}
10+
11+
}

src/ast/module_node.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "module_declaration_node.hpp"
66
#include "import_declaration_node.hpp"
77
#include "error/error_list.hpp"
8+
#include "utility/remote_repo_url.hpp"
89
#include <memory>
910
#include <vector>
1011
#include <chrono>
@@ -21,6 +22,9 @@ class module_node : public node {
2122
parsed,
2223
};
2324

25+
[[nodiscard]] generator<remote_repo_url> remote_repositories() const;
26+
27+
private:
2428
/** List of errors found.
2529
*/
2630
error_list errors;

src/prologue/prologue_scan.cpp

Lines changed: 0 additions & 54 deletions
This file was deleted.

src/prologue/prologue_scan.hpp

Lines changed: 0 additions & 85 deletions
This file was deleted.

src/prologue/prologue_scan_tests.cpp

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,15 @@ void repository::untouch(bool remove)
8383
}
8484
}
8585

86+
[[nodiscard]] generator<remote_repo_url> repository::remote_repositories() const
87+
{
88+
for (auto const& m : _modules) {
89+
for (auto u : m.ast->remote_repositories()) {
90+
co_yield std::move(u);
91+
}
92+
}
93+
}
94+
8695
repository::module_type& repository::get_module(std::filesystem::path const& module_path)
8796
{
8897
assert(is_subpath(module_path, _path));

0 commit comments

Comments
 (0)