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"