Skip to content

Commit df01870

Browse files
committed
incomplete state
1 parent 4c1dfb8 commit df01870

File tree

4 files changed

+33
-8
lines changed

4 files changed

+33
-8
lines changed

src/cpp_dev/dependency/conan/command_wrapper.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ def conan_graph_buildorder(conanfile_path: Path, profile: str) -> ConanGraphBuil
8888
"-f", "json",
8989
"--order-by", "recipe",
9090
)
91+
print(stdout)
9192
return ConanGraphBuildOrder.model_validate_json(stdout)
9293

9394

src/cpp_dev/dependency/conan/provider.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
from cpp_dev.common.types import CppStandard
1313
from cpp_dev.common.utils import create_tmp_dir
1414
from cpp_dev.common.version import SemanticVersion
15-
from cpp_dev.dependency.conan.command_wrapper import conan_list
15+
from cpp_dev.dependency.conan.command_wrapper import (conan_graph_buildorder,
16+
conan_list)
1617
from cpp_dev.dependency.conan.setup import CONAN_REMOTE
1718
from cpp_dev.dependency.conan.types import ConanPackageReference
1819
from cpp_dev.dependency.conan.utils import conan_env, create_conanfile
@@ -25,8 +26,9 @@
2526

2627
class ConanDependencyProvider(DependencyProvider):
2728

28-
def __init__(self, conan_home_dir: Path) -> None:
29+
def __init__(self, conan_home_dir: Path, profile: str) -> None:
2930
self._conan_home_dir = conan_home_dir
31+
self._profile = profile
3032

3133
def fetch_versions(self, repository: str, name: str) -> list[SemanticVersion]:
3234
with conan_env(self._conan_home_dir):
@@ -38,9 +40,9 @@ def collect_dependency_hull(self, deps: list[DependencySpecifier]) -> list[Depen
3840
with conan_env(self._conan_home_dir):
3941
with create_tmp_dir() as tmp_dir:
4042
conanfile_path = create_conanfile(tmp_dir, deps)
41-
# with create_tmp_dir() as tmp_dir:
42-
# conanfile_path = create_conanfile(tmp_dir, package_refs)
43-
...
43+
build_order = conan_graph_buildorder(conanfile_path, self._profile)
44+
print(build_order)
45+
4446

4547
def install_dependencies(self, deps: list[DependencySpecifier]) -> list[DependencySpecifier]:
4648
... # Implementation using Conan package manager

src/cpp_dev/project/core.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
load_project_config,
1919
store_project_config,
2020
update_dependencies,
21+
validate_dependencies,
2122
)
2223
from .lockfile import create_initial_lock_file
2324
from .path_composition import compose_include_file, compose_source_file
@@ -44,6 +45,7 @@ def add_package_dependency(self, deps: list[DependencySpecifier], dep_type: Depe
4445
refined_deps = _refine_package_dependencies(self._dependency_provider, deps)
4546
project_config = load_project_config(self.project_dir)
4647
update_dependencies(project_config, refined_deps, dep_type)
48+
validate_dependencies(project_config)
4749
dependency_hull = _obtain_dependency_hull(project_config, self._dependency_provider)
4850

4951
store_project_config(self.project_dir, project_config)

src/tests/cpp_dev/dependency/conan/test_provider.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
from cpp_dev.common.version import SemanticVersion
1313
from cpp_dev.dependency.conan.provider import ConanDependencyProvider
1414
from cpp_dev.dependency.conan.types import ConanPackageReference
15+
from cpp_dev.dependency.provider import DependencyIdentifier
16+
from cpp_dev.dependency.specifier import DependencySpecifier
1517
from tests.cpp_dev.dependency.conan.utils.env import (ConanTestEnv,
1618
ConanTestPackage,
1719
create_conan_test_env)
@@ -20,6 +22,11 @@
2022
@pytest.fixture
2123
def conan_test_environment(tmp_path: Path, unused_http_port: int) -> Generator[ConanTestEnv]:
2224
TEST_PACKAGES = [
25+
ConanTestPackage(
26+
ref=ConanPackageReference("dep/1.0.0@official/cppdev"),
27+
dependencies=[],
28+
cpp_standard="c++17",
29+
),
2330
ConanTestPackage(
2431
ref=ConanPackageReference("cpd/1.0.0@official/cppdev"),
2532
dependencies=[],
@@ -32,7 +39,9 @@ def conan_test_environment(tmp_path: Path, unused_http_port: int) -> Generator[C
3239
),
3340
ConanTestPackage(
3441
ref=ConanPackageReference("cpd/3.0.0@official/cppdev"),
35-
dependencies=[],
42+
dependencies=[
43+
ConanPackageReference("dep/1.0.0@official/cppdev")
44+
],
3645
cpp_standard="c++17",
3746
),
3847
]
@@ -41,8 +50,19 @@ def conan_test_environment(tmp_path: Path, unused_http_port: int) -> Generator[C
4150

4251

4352
def test_get_available_versions(conan_test_environment: ConanTestEnv) -> None:
44-
provider = ConanDependencyProvider(conan_test_environment.conan_home_dir)
53+
provider = ConanDependencyProvider(conan_test_environment.conan_home_dir, conan_test_environment.profile)
4554
assert provider.fetch_versions("official", "cpd") == [
4655
SemanticVersion("3.0.0"),
4756
SemanticVersion("1.0.0"),
48-
]
57+
]
58+
59+
60+
def test_collect_dependency_hull(conan_test_environment: ConanTestEnv) -> None:
61+
provider = ConanDependencyProvider(conan_test_environment.conan_home_dir, conan_test_environment.profile)
62+
deps = [
63+
DependencySpecifier("official/cpd[>=3.0.0]"),
64+
]
65+
dependencies = provider.collect_dependency_hull(deps)
66+
assert len(dependencies) == 2
67+
assert dependencies[0].id == DependencyIdentifier("official/cpd/3.0.0")
68+
assert dependencies[1].id == DependencyIdentifier("official/dep/1.0.0")

0 commit comments

Comments
 (0)