From 41f84d6728fe080d31606d8a53a32a3bd3d45859 Mon Sep 17 00:00:00 2001 From: Peter1169 <46818665+Peter1169@users.noreply.github.com> Date: Thu, 21 May 2026 21:37:05 +0200 Subject: [PATCH] Avoid duplicate Deb822 source reads --- common/rsources.cc | 10 ------- tests/test_deb822_integration.cc | 48 ++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/common/rsources.cc b/common/rsources.cc index a2b3320d..4863acd3 100644 --- a/common/rsources.cc +++ b/common/rsources.cc @@ -215,16 +215,6 @@ bool SourcesList::ReadSources() { bool Res = true; - // Use config or fallback to /etc/apt/sources.list.d/ - string Deb822Parts = _config->FindDir("Dir::Etc::sourcelist.d"); - if (Deb822Parts.empty() || Deb822Parts == "/") - Deb822Parts = "/etc/apt/sources.list.d/"; - - if (FileExists(Deb822Parts) == true) { - Res &= ReadDeb822SourceDir(Deb822Parts); - } - - // Then read Deb822 format sources from sourceparts as well string Parts = _config->FindDir("Dir::Etc::sourceparts"); if (FileExists(Parts) == true) { Res &= ReadDeb822SourceDir(Parts); diff --git a/tests/test_deb822_integration.cc b/tests/test_deb822_integration.cc index 566eaa31..0d45ea7e 100644 --- a/tests/test_deb822_integration.cc +++ b/tests/test_deb822_integration.cc @@ -1,10 +1,13 @@ #include #include "../common/rsources.h" #include "../common/rsource_deb822.h" +#include #include #include #include #include +#include +#include #include int main(int argc, char **argv) { @@ -217,6 +220,51 @@ TEST_F(Deb822Test, SourcesListIntegration) { remove(newFile.c_str()); } +TEST_F(Deb822Test, ReadSourcesDoesNotDuplicateDeb822SourceParts) { + char tmpdir[] = "/tmp/synaptic_sources_XXXXXX"; + ASSERT_TRUE(mkdtemp(tmpdir) != NULL); + + std::string sourceParts = std::string(tmpdir) + "/sources.list.d/"; + ASSERT_EQ(mkdir(sourceParts.c_str(), 0700), 0); + + std::string sourceFile = sourceParts + "debian.sources"; + std::ofstream ofs(sourceFile.c_str()); + ASSERT_TRUE(ofs.is_open()); + ofs << "Types: deb\n" + << "URIs: http://deb.debian.org/debian\n" + << "Suites: trixie\n" + << "Components: main\n\n"; + ofs.close(); + + std::string oldSourceParts = _config->Find("Dir::Etc::sourceparts"); + std::string oldSourceList = _config->Find("Dir::Etc::sourcelist"); + std::string oldSourceListD = _config->Find("Dir::Etc::sourcelist.d"); + + _config->Set("Dir::Etc::sourceparts", sourceParts); + _config->Set("Dir::Etc::sourcelist", std::string(tmpdir) + "/missing.list"); + _config->Set("Dir::Etc::sourcelist.d", sourceParts); + + SourcesList sources; + ASSERT_TRUE(sources.ReadSources()); + + size_t deb822Records = 0; + for (std::list::const_iterator it = sources.SourceRecords.begin(); + it != sources.SourceRecords.end(); ++it) { + if ((*it)->Type & SourcesList::Deb822) { + deb822Records++; + } + } + EXPECT_EQ(deb822Records, 1u); + + _config->Set("Dir::Etc::sourceparts", oldSourceParts); + _config->Set("Dir::Etc::sourcelist", oldSourceList); + _config->Set("Dir::Etc::sourcelist.d", oldSourceListD); + + remove(sourceFile.c_str()); + rmdir(sourceParts.c_str()); + rmdir(tmpdir); +} + TEST_F(Deb822Test, ParseAdditionalFields) { std::ofstream ofs(testFile.c_str()); ASSERT_TRUE(ofs.is_open());