Compare commits
1
Commits
add2138321
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d8e4f3625 |
+6
-4
@@ -1,4 +1,4 @@
|
|||||||
.TH MANAFILES 1 "2022-01-29" "manafiles 0.5" "User Commands"
|
.TH MANAFILES 1 "2025-02-02" "manafiles 0.6" "User Commands"
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
manafiles \- config file and package tracking utility
|
manafiles \- config file and package tracking utility
|
||||||
@@ -31,7 +31,7 @@ See File Options below.
|
|||||||
.TP
|
.TP
|
||||||
.BR \-P ", " \-\-package
|
.BR \-P ", " \-\-package
|
||||||
Operate on packages. \
|
Operate on packages. \
|
||||||
This operation allows you to track installed packages and reinstall them. \
|
This operation allows tracking installed packages and reinstalling them. \
|
||||||
In the first case, if no package names are provided in the command line, all packages will be selected. \
|
In the first case, if no package names are provided in the command line, all packages will be selected. \
|
||||||
See Package Options below.
|
See Package Options below.
|
||||||
|
|
||||||
@@ -67,8 +67,10 @@ Install all AUR packages of the stored list.
|
|||||||
Install all official packages of the stored list.
|
Install all official packages of the stored list.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.BR \-s ", " \-\-store
|
.BR \-s ", " \-\-search
|
||||||
Stores a list of all installed packages on the system.
|
Search each locally-installed package for names via a partial match. \
|
||||||
|
When including multiple search terms, all packages with names matching any of those terms are returned. \
|
||||||
|
If the \fB-s\fR option is ommited, packages names are filtered via a full match.
|
||||||
|
|
||||||
.SH EXAMPLES
|
.SH EXAMPLES
|
||||||
Usage examples:
|
Usage examples:
|
||||||
|
|||||||
+14
-16
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Riyyi
|
* Copyright (C) 2021-2022,2025 Riyyi
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*/
|
*/
|
||||||
@@ -8,11 +8,12 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include "ruc/argparser.h"
|
||||||
|
#include "ruc/timer.h"
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "dotfile.h"
|
#include "dotfile.h"
|
||||||
#include "package.h"
|
#include "package.h"
|
||||||
#include "ruc/argparser.h"
|
|
||||||
#include "ruc/timer.h"
|
|
||||||
|
|
||||||
int main(int argc, const char* argv[])
|
int main(int argc, const char* argv[])
|
||||||
{
|
{
|
||||||
@@ -23,7 +24,7 @@ int main(int argc, const char* argv[])
|
|||||||
bool addOrAur = false;
|
bool addOrAur = false;
|
||||||
bool install = false;
|
bool install = false;
|
||||||
bool pull = false;
|
bool pull = false;
|
||||||
bool pushOrStore = false;
|
bool pushOrSearch = false;
|
||||||
bool verbose = false;
|
bool verbose = false;
|
||||||
|
|
||||||
std::vector<std::string> targets {};
|
std::vector<std::string> targets {};
|
||||||
@@ -36,7 +37,7 @@ int main(int argc, const char* argv[])
|
|||||||
argParser.addOption(addOrAur, 'a', "add", nullptr, nullptr);
|
argParser.addOption(addOrAur, 'a', "add", nullptr, nullptr);
|
||||||
argParser.addOption(install, 'i', "install", nullptr, nullptr);
|
argParser.addOption(install, 'i', "install", nullptr, nullptr);
|
||||||
argParser.addOption(pull, 'l', "pull", nullptr, nullptr);
|
argParser.addOption(pull, 'l', "pull", nullptr, nullptr);
|
||||||
argParser.addOption(pushOrStore, 's', "push", nullptr, nullptr);
|
argParser.addOption(pushOrSearch, 's', "push", nullptr, nullptr);
|
||||||
argParser.addOption(verbose, 'v', "verbose", nullptr, nullptr);
|
argParser.addOption(verbose, 'v', "verbose", nullptr, nullptr);
|
||||||
|
|
||||||
argParser.addArgument(targets, "targets", nullptr, nullptr, ruc::ArgParser::Required::No);
|
argParser.addArgument(targets, "targets", nullptr, nullptr, ruc::ArgParser::Required::No);
|
||||||
@@ -60,32 +61,29 @@ int main(int argc, const char* argv[])
|
|||||||
if (pull) {
|
if (pull) {
|
||||||
Dotfile::the().pull(targets);
|
Dotfile::the().pull(targets);
|
||||||
}
|
}
|
||||||
if (pushOrStore) {
|
if (pushOrSearch) {
|
||||||
Dotfile::the().push(targets);
|
Dotfile::the().push(targets);
|
||||||
}
|
}
|
||||||
if (!addOrAur && !pull && !pushOrStore) {
|
if (!addOrAur && !pull && !pushOrSearch) {
|
||||||
Dotfile::the().list(targets);
|
Dotfile::the().list(targets);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (packageOperation) {
|
else if (packageOperation) {
|
||||||
if (addOrAur) {
|
if (addOrAur) {
|
||||||
Package::the().aurInstall();
|
Package::the().aurInstall(targets);
|
||||||
}
|
}
|
||||||
if (install) {
|
if (install) {
|
||||||
Package::the().install();
|
Package::the().install(targets);
|
||||||
}
|
}
|
||||||
if (pushOrStore) {
|
if (!addOrAur && !install) {
|
||||||
Package::the().store();
|
Package::the().list(targets, pushOrSearch);
|
||||||
}
|
|
||||||
if (!addOrAur && !install && !pushOrStore) {
|
|
||||||
Package::the().list(targets);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (helpOperation) {
|
else if (helpOperation) {
|
||||||
// TODO open manpage
|
// TODO: open manpage
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// TODO open manpage
|
// TODO: open manpage
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
|||||||
+24
-28
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Riyyi
|
* Copyright (C) 2021-2022,2025 Riyyi
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*/
|
*/
|
||||||
@@ -14,12 +14,12 @@
|
|||||||
#include <string> // getline
|
#include <string> // getline
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "machine.h"
|
|
||||||
#include "package.h"
|
|
||||||
#include "ruc/file.h"
|
|
||||||
#include "ruc/shell.h"
|
#include "ruc/shell.h"
|
||||||
#include "ruc/system.h"
|
#include "ruc/system.h"
|
||||||
|
|
||||||
|
#include "machine.h"
|
||||||
|
#include "package.h"
|
||||||
|
|
||||||
Package::Package(s)
|
Package::Package(s)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -30,17 +30,27 @@ Package::~Package()
|
|||||||
|
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
|
|
||||||
void Package::aurInstall()
|
void Package::aurInstall(const std::vector<std::string>& targets)
|
||||||
{
|
{
|
||||||
installOrAurInstall(InstallType::AurInstall);
|
if (targets.size() > 1) {
|
||||||
|
fprintf(stderr, "\033[31;1mPackage:\033[0m only 1 file can be read packages from at a time\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
installOrAurInstall(InstallType::AurInstall, targets.size() != 0 ? targets.front() : PACKAGE_FILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Package::install()
|
void Package::install(const std::vector<std::string>& targets)
|
||||||
{
|
{
|
||||||
installOrAurInstall(InstallType::Install);
|
if (targets.size() > 1) {
|
||||||
|
fprintf(stderr, "\033[31;1mPackage:\033[0m only 1 file can be read packages from at a time\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
installOrAurInstall(InstallType::Install, targets.size() != 0 ? targets.front() : PACKAGE_FILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Package::list(const std::vector<std::string>& targets)
|
void Package::list(const std::vector<std::string>& targets, bool partialMatch)
|
||||||
{
|
{
|
||||||
auto packagesOrEmpty = getPackageList();
|
auto packagesOrEmpty = getPackageList();
|
||||||
|
|
||||||
@@ -62,7 +72,7 @@ void Package::list(const std::vector<std::string>& targets)
|
|||||||
std::string line;
|
std::string line;
|
||||||
while (std::getline(stream, line)) {
|
while (std::getline(stream, line)) {
|
||||||
for (const auto& target : targets) {
|
for (const auto& target : targets) {
|
||||||
if (line.find(target) != std::string::npos) {
|
if (line == target || (partialMatch && line.find(target) != std::string::npos)) {
|
||||||
packages.append(line + '\n');
|
packages.append(line + '\n');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -72,20 +82,6 @@ void Package::list(const std::vector<std::string>& targets)
|
|||||||
printf("%s", packages.c_str());
|
printf("%s", packages.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Package::store()
|
|
||||||
{
|
|
||||||
auto packagesOrEmpty = getPackageList();
|
|
||||||
|
|
||||||
if (!packagesOrEmpty.has_value()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto packageFile = ruc::File::create("./packages");
|
|
||||||
packageFile.clear();
|
|
||||||
packageFile.append(packagesOrEmpty.value());
|
|
||||||
packageFile.flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
|
|
||||||
std::optional<std::string> Package::fetchAurHelper()
|
std::optional<std::string> Package::fetchAurHelper()
|
||||||
@@ -105,7 +101,7 @@ std::optional<std::string> Package::fetchAurHelper()
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void Package::installOrAurInstall(InstallType type)
|
void Package::installOrAurInstall(InstallType type, const std::string& file)
|
||||||
{
|
{
|
||||||
distroDetect();
|
distroDetect();
|
||||||
distroDependencies();
|
distroDependencies();
|
||||||
@@ -129,12 +125,12 @@ void Package::installOrAurInstall(InstallType type)
|
|||||||
ruc::System $;
|
ruc::System $;
|
||||||
if (m_distro == Distro::Arch) {
|
if (m_distro == Distro::Arch) {
|
||||||
// Grab everything off enabled official repositories that is in the list
|
// Grab everything off enabled official repositories that is in the list
|
||||||
auto repoList = $("pacman -Ssq") | $("grep -xf ./packages");
|
auto repoList = $("pacman -Ssq") | $("grep -xf " + file);
|
||||||
|
|
||||||
if (type == InstallType::AurInstall) {
|
if (type == InstallType::AurInstall) {
|
||||||
// Determine which packages in the list are from the AUR
|
// Determine which packages in the list are from the AUR
|
||||||
// NOTE: ruc::System does not support commands with newlines
|
// NOTE: ruc::System does not support commands with newlines
|
||||||
auto aurList = ruc::Shell()("grep -vx '" + repoList.output() + "' ./packages");
|
auto aurList = ruc::Shell()("grep -vx '" + repoList.output() + "' " + file);
|
||||||
command = aurHelper.value() + " -Sy --devel --needed --noconfirm " + aurList.output();
|
command = aurHelper.value() + " -Sy --devel --needed --noconfirm " + aurList.output();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -143,7 +139,7 @@ void Package::installOrAurInstall(InstallType type)
|
|||||||
}
|
}
|
||||||
else if (m_distro == Distro::Debian) {
|
else if (m_distro == Distro::Debian) {
|
||||||
// Grab everything off enabled official repositories that is in the list
|
// Grab everything off enabled official repositories that is in the list
|
||||||
auto repoList = $("apt-cache search .").cut(1, ' ') | $("grep -xf ./packages");
|
auto repoList = $("apt-cache search .").cut(1, ' ') | $("grep -xf " + file);
|
||||||
command = "apt install " + repoList.output();
|
command = "apt install " + repoList.output();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
-6
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2021-2022 Riyyi
|
* Copyright (C) 2021-2022,2025 Riyyi
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: MIT
|
* SPDX-License-Identifier: MIT
|
||||||
*/
|
*/
|
||||||
@@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
#include "ruc/singleton.h"
|
#include "ruc/singleton.h"
|
||||||
|
|
||||||
|
#define PACKAGE_FILE "./packages"
|
||||||
|
|
||||||
class Package : public ruc::Singleton<Package> {
|
class Package : public ruc::Singleton<Package> {
|
||||||
public:
|
public:
|
||||||
Package(s);
|
Package(s);
|
||||||
@@ -29,14 +31,13 @@ public:
|
|||||||
AurInstall,
|
AurInstall,
|
||||||
};
|
};
|
||||||
|
|
||||||
void aurInstall();
|
void aurInstall(const std::vector<std::string>& targets = {});
|
||||||
void install();
|
void install(const std::vector<std::string>& targets = {});
|
||||||
void list(const std::vector<std::string>& targets = {});
|
void list(const std::vector<std::string>& targets = {}, bool partialMatch = false);
|
||||||
void store();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::optional<std::string> fetchAurHelper();
|
std::optional<std::string> fetchAurHelper();
|
||||||
void installOrAurInstall(InstallType type);
|
void installOrAurInstall(InstallType type, const std::string& file);
|
||||||
|
|
||||||
bool findDependency(const std::string& search);
|
bool findDependency(const std::string& search);
|
||||||
bool distroDetect();
|
bool distroDetect();
|
||||||
|
|||||||
Reference in New Issue
Block a user