Add support for case-sensitive search for conan packages

What does this MR do and why?

Add support for case-sensitive search for conan packages.

References

Full support on conan search queries with * (#507340 - closed)

Screenshots or screen recordings

Screenshot_2025-08-28_at_10.45.13

How to set up and validate locally

Main idea: Create two packages with different names: 'FooBar' and 'foobar' and perform a search with and without --case-sensitive option.

Prerequisites

  1. Create two conan packages in rails console.

    def fixture_file_upload(*args, **kwargs)
      Rack::Test::UploadedFile.new(*args, **kwargs)
    end
    
    p = Project.first
    FactoryBot.create(:conan_package, name: 'foobar', project: p)
    FactoryBot.create(:conan_package, name: 'FooBar', project: p)
  2. Add a remote for your project to conan cli docs.

  3. Add credentials to the remote docs.

Search package

Without --case-sensitive

$ conan search foobar -r local

Returns two packages

$ conan search FooBar -r local

Returns two packages

$ conan search 'Foo*' -r local

Returns two packages

With --case-sensitive

$ conan search foobar -r local --case-sensitive

Returns only foobar package

$ conan search FooBar -r local --case-sensitive

Returns only FooBar package

$ conan search 'Foo*' -r local --case-sensitive

Returns only FooBar package

Database analysis

SELECT "packages_packages".*
FROM "packages_packages"
WHERE "packages_packages"."package_type" = 3
  AND "packages_packages"."project_id" = XXX
  AND "packages_packages"."status" IN (0,
                                       1,
                                       5)
  AND "packages_packages"."name" LIKE 'XXX%'
ORDER BY "packages_packages"."created_at" DESC
LIMIT 500;

https://console.postgres.ai/gitlab/gitlab-production-main/sessions/42902/commands/131334

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Related to #507340 (closed)

Edited by Dzmitry (Dima) Meshcharakou

Merge request reports

Loading