From de5f08b35621fd4a790885b2707468203b2df379 Mon Sep 17 00:00:00 2001 From: Ciaran McCreesh Date: Sun, 3 Apr 2011 16:12:09 +0100 Subject: Normalise cat/pkg parts --- .gitignore | 1 + paludis/files.m4 | 2 +- paludis/partially_made_package_dep_spec.cc | 22 ++++++++- paludis/partially_made_package_dep_spec_TEST.cc | 62 +++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 paludis/partially_made_package_dep_spec_TEST.cc diff --git a/.gitignore b/.gitignore index 5a22b83b2..341c279c5 100644 --- a/.gitignore +++ b/.gitignore @@ -265,6 +265,7 @@ paludis-*.*.*.tar.bz2 /paludis/ihateautomake.cc /paludis/name_TEST /paludis/paludis.hh +/paludis/partially_made_package_dep_spec_TEST /paludis/repositories/accounts/accounts_repository_TEST /paludis/repositories/e/aa_visitor_TEST /paludis/repositories/e/dep_parser_TEST diff --git a/paludis/files.m4 b/paludis/files.m4 index 6c45c22de..ab86ca30b 100644 --- a/paludis/files.m4 +++ b/paludis/files.m4 @@ -80,7 +80,7 @@ add(`package_dep_spec_properties', `hh', `cc', `fwd') add(`package_id', `hh', `cc', `fwd', `se') add(`paludis', `hh') add(`paludislike_options_conf', `hh', `cc', `fwd') -add(`partially_made_package_dep_spec', `hh', `cc', `fwd', `se') +add(`partially_made_package_dep_spec', `hh', `cc', `fwd', `se', `gtest') add(`permitted_choice_value_parameter_values', `hh', `cc', `fwd') add(`pretty_print_options', `hh', `cc', `fwd', `se') add(`pretty_printer', `hh', `cc', `fwd') diff --git a/paludis/partially_made_package_dep_spec.cc b/paludis/partially_made_package_dep_spec.cc index 9d67d9cc0..262456436 100644 --- a/paludis/partially_made_package_dep_spec.cc +++ b/paludis/partially_made_package_dep_spec.cc @@ -440,6 +440,8 @@ PartiallyMadePackageDepSpec::~PartiallyMadePackageDepSpec() PartiallyMadePackageDepSpec & PartiallyMadePackageDepSpec::package(const QualifiedPackageName & name) { + _imp->data->package_name_part.reset(); + _imp->data->category_name_part.reset(); _imp->data->package = NameConstraintPool::get_instance()->create(name); return *this; } @@ -552,7 +554,15 @@ PartiallyMadePackageDepSpec::clear_installable_to_path() PartiallyMadePackageDepSpec & PartiallyMadePackageDepSpec::package_name_part(const PackageNamePart & part) { - _imp->data->package_name_part = PackageNamePartConstraintPool::get_instance()->create(part); + _imp->data->package.reset(); + if (_imp->data->category_name_part) + { + _imp->data->package = NameConstraintPool::get_instance()->create(_imp->data->category_name_part->name_part() + part); + _imp->data->category_name_part.reset(); + } + else + _imp->data->package_name_part = PackageNamePartConstraintPool::get_instance()->create(part); + return *this; } @@ -566,7 +576,15 @@ PartiallyMadePackageDepSpec::clear_package_name_part() PartiallyMadePackageDepSpec & PartiallyMadePackageDepSpec::category_name_part(const CategoryNamePart & part) { - _imp->data->category_name_part = CategoryNamePartConstraintPool::get_instance()->create(part); + _imp->data->category_name_part.reset(); + if (_imp->data->package_name_part) + { + _imp->data->package = NameConstraintPool::get_instance()->create(part + _imp->data->package_name_part->name_part()); + _imp->data->package_name_part.reset(); + } + else + _imp->data->category_name_part = CategoryNamePartConstraintPool::get_instance()->create(part); + return *this; } diff --git a/paludis/partially_made_package_dep_spec_TEST.cc b/paludis/partially_made_package_dep_spec_TEST.cc new file mode 100644 index 000000000..0685b38ef --- /dev/null +++ b/paludis/partially_made_package_dep_spec_TEST.cc @@ -0,0 +1,62 @@ +/* vim: set sw=4 sts=4 et foldmethod=syntax : */ + +/* + * Copyright (c) 2011 Ciaran McCreesh + * + * This file is part of the Paludis package manager. Paludis is free software; + * you can redistribute it and/or modify it under the terms of the GNU General + * Public License version 2, as published by the Free Software Foundation. + * + * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include + +#include +#include + +#include + +using namespace paludis; + +TEST(PartiallyMadePackageDepSpec, CatAndPkgBecomesQPN) +{ + PackageDepSpec p(make_package_dep_spec({ }) + .category_name_part(CategoryNamePart("cat")) + .package_name_part(PackageNamePart("pkg")) + ); + + EXPECT_EQ("cat/pkg", stringify(p)); + + ASSERT_TRUE(bool(p.package_name_constraint())); + EXPECT_EQ("cat/pkg", stringify(p.package_name_constraint()->name())); + + EXPECT_FALSE(bool(p.category_name_part_constraint())); + EXPECT_FALSE(bool(p.package_name_part_constraint())); +} + +TEST(PartiallyMadePackageDepSpec, QPNClearsCatPkg) +{ + PackageDepSpec p(make_package_dep_spec({ }) + .category_name_part(CategoryNamePart("cat")) + .package_name_part(PackageNamePart("pkg")) + .package(QualifiedPackageName("other/name")) + ); + + EXPECT_EQ("other/name", stringify(p)); + + ASSERT_TRUE(bool(p.package_name_constraint())); + EXPECT_EQ("other/name", stringify(p.package_name_constraint()->name())); + + EXPECT_FALSE(bool(p.category_name_part_constraint())); + EXPECT_FALSE(bool(p.package_name_part_constraint())); +} + -- cgit v1.2.3