Skip to content

Commit 043041a

Browse files
authored
Relativize paths in the .deps files (#676)
Signed-off-by: Juan Cruz Viotti <[email protected]>
1 parent c907e7d commit 043041a

File tree

4 files changed

+97
-41
lines changed

4 files changed

+97
-41
lines changed

src/index/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
sourcemeta_executable(NAMESPACE sourcemeta PROJECT one NAME index
22
FOLDER "One/Index"
3-
SOURCES index.cc output.h generators.h explorer.h)
3+
SOURCES index.cc adapter.h output.h generators.h explorer.h)
44

55
set_target_properties(sourcemeta_one_index PROPERTIES OUTPUT_NAME sourcemeta-one-index)
66

src/index/adapter.h

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#ifndef SOURCEMETA_ONE_INDEX_ADAPTER_H_
2+
#define SOURCEMETA_ONE_INDEX_ADAPTER_H_
3+
4+
#include <sourcemeta/core/build.h>
5+
6+
#include <filesystem> // std::filesystem
7+
#include <optional> // std::optional
8+
9+
namespace sourcemeta::one {
10+
11+
class Adapter : public sourcemeta::core::BuildAdapterFilesystem {
12+
public:
13+
Adapter(std::filesystem::path output_root)
14+
: root{std::filesystem::canonical(output_root)} {}
15+
16+
[[nodiscard]] auto read_dependencies(const node_type &path) const
17+
-> std::optional<sourcemeta::core::BuildDependencies<node_type>> {
18+
auto result{BuildAdapterFilesystem::read_dependencies(path)};
19+
if (result.has_value()) {
20+
for (auto &dependency : result.value()) {
21+
if (!dependency.is_absolute()) {
22+
dependency =
23+
std::filesystem::weakly_canonical(this->root / dependency);
24+
}
25+
}
26+
}
27+
28+
return result;
29+
}
30+
31+
auto write_dependencies(
32+
const node_type &path,
33+
const sourcemeta::core::BuildDependencies<node_type> &dependencies)
34+
-> void {
35+
sourcemeta::core::BuildDependencies<node_type> relativized;
36+
relativized.reserve(dependencies.size());
37+
for (const auto &dependency : dependencies) {
38+
const auto relative{dependency.lexically_relative(this->root)};
39+
if (!relative.empty() && *relative.begin() != "..") {
40+
relativized.emplace_back(relative);
41+
} else {
42+
relativized.emplace_back(dependency);
43+
}
44+
}
45+
46+
BuildAdapterFilesystem::write_dependencies(path, relativized);
47+
}
48+
49+
private:
50+
std::filesystem::path root;
51+
};
52+
53+
} // namespace sourcemeta::one
54+
55+
#endif

src/index/index.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <sourcemeta/one/shared.h>
1414
#include <sourcemeta/one/web.h>
1515

16+
#include "adapter.h"
1617
#include "explorer.h"
1718
#include "generators.h"
1819
#include "output.h"
@@ -207,7 +208,7 @@ static auto index_main(const std::string_view &program,
207208
/////////////////////////////////////////////////////////////////////////////
208209

209210
const auto schemas_path{output.path() / "schemas"};
210-
sourcemeta::core::BuildAdapterFilesystem adapter;
211+
sourcemeta::one::Adapter adapter{output.path()};
211212
// Mainly to not screw up the logs
212213
std::mutex mutex;
213214
const auto concurrency{app.contains("concurrency")

test/cli/index/common/deps-contents.sh

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -42,62 +42,62 @@ cd - > /dev/null
4242

4343
cat << EOF > "$TMP/expected.txt"
4444
--- ./dependency-tree.metapack.deps
45-
$REAL/output/schemas/example/test/%/dependencies.metapack
45+
schemas/example/test/%/dependencies.metapack
4646
--- ./explorer/%/directory.metapack.deps
47-
$REAL/output/configuration.json
48-
$REAL/output/explorer/example/%/directory.metapack
49-
$REAL/output/explorer/example/test/%/schema.metapack
50-
$REAL/output/version.json
47+
configuration.json
48+
explorer/example/%/directory.metapack
49+
explorer/example/test/%/schema.metapack
50+
version.json
5151
--- ./explorer/%/search.metapack.deps
52-
$REAL/output/explorer/example/test/%/schema.metapack
52+
explorer/example/test/%/schema.metapack
5353
--- ./explorer/example/%/directory.metapack.deps
54-
$REAL/output/configuration.json
55-
$REAL/output/explorer/example/test/%/schema.metapack
56-
$REAL/output/version.json
54+
configuration.json
55+
explorer/example/test/%/schema.metapack
56+
version.json
5757
--- ./explorer/example/test/%/schema.metapack.deps
58-
$REAL/output/configuration.json
59-
$REAL/output/schemas/example/test/%/dependencies.metapack
60-
$REAL/output/schemas/example/test/%/health.metapack
61-
$REAL/output/schemas/example/test/%/schema.metapack
62-
$REAL/output/version.json
58+
configuration.json
59+
schemas/example/test/%/dependencies.metapack
60+
schemas/example/test/%/health.metapack
61+
schemas/example/test/%/schema.metapack
62+
version.json
6363
--- ./routes.bin.deps
64-
$REAL/output/configuration.json
65-
$REAL/output/version.json
64+
configuration.json
65+
version.json
6666
--- ./schemas/example/test/%/blaze-exhaustive.metapack.deps
67-
$REAL/output/schemas/example/test/%/bundle.metapack
68-
$REAL/output/version.json
67+
schemas/example/test/%/bundle.metapack
68+
version.json
6969
--- ./schemas/example/test/%/blaze-fast.metapack.deps
70-
$REAL/output/schemas/example/test/%/bundle.metapack
71-
$REAL/output/version.json
70+
schemas/example/test/%/bundle.metapack
71+
version.json
7272
--- ./schemas/example/test/%/bundle.metapack.deps
73-
$REAL/output/schemas/example/test/%/dependencies.metapack
74-
$REAL/output/schemas/example/test/%/schema.metapack
75-
$REAL/output/version.json
73+
schemas/example/test/%/dependencies.metapack
74+
schemas/example/test/%/schema.metapack
75+
version.json
7676
--- ./schemas/example/test/%/dependencies.metapack.deps
77-
$REAL/output/schemas/example/test/%/schema.metapack
78-
$REAL/output/version.json
77+
schemas/example/test/%/schema.metapack
78+
version.json
7979
--- ./schemas/example/test/%/dependents.metapack.deps
80-
$REAL/output/dependency-tree.metapack
80+
dependency-tree.metapack
8181
--- ./schemas/example/test/%/editor.metapack.deps
82-
$REAL/output/schemas/example/test/%/bundle.metapack
83-
$REAL/output/version.json
82+
schemas/example/test/%/bundle.metapack
83+
version.json
8484
--- ./schemas/example/test/%/health.metapack.deps
85-
$REAL/output/schemas/example/test/%/dependencies.metapack
86-
$REAL/output/schemas/example/test/%/schema.metapack
87-
$REAL/output/version.json
85+
schemas/example/test/%/dependencies.metapack
86+
schemas/example/test/%/schema.metapack
87+
version.json
8888
--- ./schemas/example/test/%/locations.metapack.deps
89-
$REAL/output/schemas/example/test/%/schema.metapack
90-
$REAL/output/version.json
89+
schemas/example/test/%/schema.metapack
90+
version.json
9191
--- ./schemas/example/test/%/positions.metapack.deps
92-
$REAL/output/schemas/example/test/%/schema.metapack
93-
$REAL/output/version.json
92+
schemas/example/test/%/schema.metapack
93+
version.json
9494
--- ./schemas/example/test/%/schema.metapack.deps
95-
$REAL/output/configuration.json
96-
$REAL/output/version.json
9795
$REAL/schemas/test.json
96+
configuration.json
97+
version.json
9898
--- ./schemas/example/test/%/stats.metapack.deps
99-
$REAL/output/schemas/example/test/%/schema.metapack
100-
$REAL/output/version.json
99+
schemas/example/test/%/schema.metapack
100+
version.json
101101
EOF
102102

103103
diff "$TMP/deps.txt" "$TMP/expected.txt"

0 commit comments

Comments
 (0)