repoindex/cli/main.cpp

97 lines
4.2 KiB
C++
Raw Normal View History

2016-04-25 22:30:11 +02:00
#include "../lib/alpm/manager.h"
#include "../lib/alpm/utilities.h"
#include "../lib/alpm/config.h"
#include "../lib/alpm/resolvebuildorder.h"
#include "../lib/alpm/mingwbundle.h"
2015-09-04 14:37:01 +02:00
2016-04-25 22:30:11 +02:00
#include "../lib/network/server.h"
2015-08-10 22:46:01 +02:00
#include <c++utilities/application/argumentparser.h>
#include <c++utilities/conversion/stringconversion.h>
2015-08-10 22:46:01 +02:00
#include <c++utilities/application/failure.h>
#include <QCoreApplication>
#include <iostream>
#include <algorithm>
2015-08-10 22:46:01 +02:00
using namespace std;
using namespace ApplicationUtilities;
using namespace RepoIndex;
2015-08-10 22:46:01 +02:00
int main(int argc, char *argv[])
{
// check whether shell syntax is enabled
for(char **arg = argv, **end = argv + argc; arg != end; ++arg) {
if(strcmp(*arg, "--sh-syntax") == 0) {
useShSyntax = true;
shchar = "# ";
break;
}
}
2015-08-10 22:46:01 +02:00
// setup the argument parser
ArgumentParser parser;
ConfigArgs configArgs(parser);
parser.setIgnoreUnknownArguments(false);
// parse command line arguments
try {
parser.parseArgs(argc, argv);
2016-01-19 15:52:32 +01:00
} catch (const Failure &e) {
cerr << shchar << "Unable to parse arguments: " << e.what() << endl;
2015-08-10 22:46:01 +02:00
return 2;
}
try {
// load configuration
Config config;
config.loadFromConfigFile(configArgs);
config.loadFromArgs(configArgs);
if(find_if(parser.mainArguments().cbegin(), parser.mainArguments().cend(), [&configArgs] (const Argument *arg) {
return arg != &configArgs.helpArg && arg->isPresent();
}) != parser.mainArguments().cend()) {
// create app
2015-08-10 22:46:01 +02:00
QCoreApplication application(argc, argv);
// setup manager
Manager manager(config);
cerr << shchar << "Loading databases ..." << endl;
2016-02-25 22:53:33 +01:00
if(config.areReposFromPacmanConfEnabled()) {
manager.addDataBasesFromPacmanConfig();
}
2016-02-14 23:48:43 +01:00
manager.addDatabasesFromRepoIndexConfig();
2016-02-25 22:53:33 +01:00
manager.initAlpmDataBases();
2016-02-15 18:26:05 +01:00
cerr << shchar << "Restoring cache ... ";
manager.restoreCache();
2016-02-15 18:26:05 +01:00
cerr << shchar << "DONE" << endl;
2015-09-27 19:29:45 +02:00
if(configArgs.serverArg.isPresent()) {
// setup the server
Server server(manager, manager.config());
2016-01-18 20:34:29 +01:00
manager.setAutoCacheMaintenanceEnabled(true);
2016-02-25 22:53:33 +01:00
manager.setAutoUpdateEnabled(true);
QObject::connect(&server, &Server::closed, &application, &QCoreApplication::quit);
return application.exec();
} else if(configArgs.buildOrderArg.isPresent()) {
2016-05-26 02:29:56 +02:00
BuildOrderResolverCli resolver(manager, configArgs.packagesArg.values(), configArgs.addSourceOnlyDepsArg.isPresent(), configArgs.requireSourcesArg.isPresent());
return resolver.exec();
} else if(configArgs.mingwBundleArg.isPresent()) {
2016-05-26 02:29:56 +02:00
MingwBundle bundle(manager, configArgs.packagesArg.values(), configArgs.iconThemesArg.values(), configArgs.extraPackagesArg.values(), configArgs.qtPluginsArg.values());
2015-09-04 14:37:01 +02:00
bundle.createBundle(configArgs.targetDirArg.isPresent() ? configArgs.targetDirArg.values().front() : string("."),
configArgs.targetNameArg.values().front(),
configArgs.targetFormatArg.isPresent() ? configArgs.targetFormatArg.values().front() : string("zip"),
configArgs.defaultIconThemeArg.isPresent() ? configArgs.defaultIconThemeArg.values().front() : string());
} else if(configArgs.upgradeLookupArg.isPresent()) {
UpgradeLookupCli upgradeLookup(manager, configArgs.upgradeLookupArg.values().front());
return application.exec();
}
} else if(!configArgs.helpArg.isPresent()) {
if(useShSyntax) {
cerr << "export REPOINDEX_ERROR='No command line arguments specified. See --help for available commands.'" << endl;
} else {
cerr << "No command line arguments specified. See --help for available commands." << endl;
}
2015-08-10 22:46:01 +02:00
}
2015-12-25 01:58:19 +01:00
} catch (const exception &ex) {
Utilities::printError(ex);
2015-08-10 22:46:01 +02:00
return 1;
}
}