From 8e72745123581210d25c4fd7dc274f51ec425a9d Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Thu, 14 Nov 2013 01:51:33 +0100 Subject: [PATCH] Fix behaviour of 'package_repo update': * Instead of copying over the repository info from the source repository, we need to read the repository info from a repository info file corresponding to the target repository. Among other problems, copying over the repository info from the source repo put the wrong repository URL into the new repository, which in turn caused the package resolution done by Haiku's build system to fail (it tried to download packages from the wrong URL). Additionally, I have updated the incorrect repository on the server, so building Haiku-x86 should work again. --- src/bin/package_repo/command_update.cpp | 54 +++++++++++++++++-------- src/bin/package_repo/package_repo.cpp | 12 +++--- 2 files changed, 43 insertions(+), 23 deletions(-) diff --git a/src/bin/package_repo/command_update.cpp b/src/bin/package_repo/command_update.cpp index dad62cce02..5da5772c53 100644 --- a/src/bin/package_repo/command_update.cpp +++ b/src/bin/package_repo/command_update.cpp @@ -15,7 +15,7 @@ #include #include -#include +#include #include #include @@ -257,27 +257,47 @@ command_update(int argc, const char* const* argv) const char* targetRepositoryFileName = argv[optind++]; const char* packageListFileName = argv[optind++]; - // open source repository BStandardErrorOutput errorOutput; - BRepositoryReader repositoryReader(&errorOutput); - status_t error = repositoryReader.Init(sourceRepositoryFileName); - if (error != B_OK) - return 1; - - // collect package infos and repository info from source repository - PackageInfos packageInfos; - PackageInfosCollector packageInfosCollector(packageInfos, &errorOutput); - error = repositoryReader.ParseContent(&packageInfosCollector); - if (error != B_OK) - return 1; - RepositoryWriterListener listener(verbose, quiet); - BRepositoryInfo repositoryInfo = packageInfosCollector.RepositoryInfo(); + + BEntry sourceRepositoryEntry(sourceRepositoryFileName); + if (!sourceRepositoryEntry.Exists()) { + listener.PrintError( + "Error: given source repository file '%s' doesn't exist!\n", + sourceRepositoryFileName); + return 1; + } + // determine path for 'repo.info' file from given new repository file + BString repositoryInfoFileName(targetRepositoryFileName); + repositoryInfoFileName.Append(".info"); + BEntry repositoryInfoEntry(repositoryInfoFileName.String()); + BRepositoryInfo repositoryInfo(repositoryInfoEntry); status_t result = repositoryInfo.InitCheck(); if (result != B_OK) { listener.PrintError( - "Error: didn't get a proper repository-info from source repository" - ": %s - error: %s\n", sourceRepositoryFileName, strerror(result)); + "Error: can't parse/read repository-info file %s : %s\n", + repositoryInfoFileName.String(), strerror(result)); + return 1; + } + + // open source repository + BRepositoryReader repositoryReader(&errorOutput); + result = repositoryReader.Init(sourceRepositoryFileName); + if (result != B_OK) { + listener.PrintError( + "Error: can't read from old repository file : %s\n", + strerror(result)); + return 1; + } + + // collect package infos from source repository + PackageInfos packageInfos; + PackageInfosCollector packageInfosCollector(packageInfos, &errorOutput); + result = repositoryReader.ParseContent(&packageInfosCollector); + if (result != B_OK) { + listener.PrintError( + "Error: couldn't fetch package infos from old repository : %s\n", + strerror(result)); return 1; } diff --git a/src/bin/package_repo/package_repo.cpp b/src/bin/package_repo/package_repo.cpp index 5143076bd1..95b18e3fa7 100644 --- a/src/bin/package_repo/package_repo.cpp +++ b/src/bin/package_repo/package_repo.cpp @@ -21,9 +21,9 @@ static const char* kUsage = "Creates or inspects a Haiku package repository file.\n" "\n" "Commands:\n" - " create [ ] \n" - " Creates package repository file from the given\n" - " package files.\n" + " create [ ] \n" + " Creates a package repository from the information found in \n" + " , adding the given package files.\n" "\n" " -C - Change to directory before starting.\n" " -q - be quiet (don't show any output except for errors).\n" @@ -34,11 +34,11 @@ static const char* kUsage = "\n" " -v - be verbose (list attributes of all packages found).\n" "\n" - " update [ ] \n" + " update [ ] \n" " Creates package repository file with all the packages\n" " contained in . If possible, package-infos are\n" - " taken from to avoid the need for recomputing the checksum\n" - " of all packages.\n" + " taken from to avoid the need for recomputing the\n" + " checksum of all packages.\n" " and can be the same file.\n" "\n" " -C - Change to directory before starting.\n"