1
0
mirror of https://github.com/QRouland/UTPass.git synced 2025-01-24 23:56:39 +00:00
UTPass/plugins/Git/git.cpp

80 lines
2.1 KiB
C++
Raw Normal View History

2025-01-10 13:48:38 +01:00
#include <QUrl>
#include <QtCore/QDir>
#include <QDebug>
#include <QStandardPaths>
2025-01-10 13:48:38 +01:00
2025-01-10 13:48:38 +01:00
#include "git.h"
#include "libgit.h"
2025-01-13 18:11:16 +01:00
#include "utils.h"
QDir Git::clone_setup()
2025-01-10 13:48:38 +01:00
{
QDir tmp_dir(QStandardPaths::writableLocation( QStandardPaths::CacheLocation).append("/clone"));
tmp_dir.removeRecursively();
qDebug() << "Temp dir path is " << tmp_dir.absolutePath();
return tmp_dir;
}
bool Git::clone_tear_down(QDir tmp_dir)
{
2025-01-13 18:11:16 +01:00
return tmp_dir.removeRecursively();
}
bool Git::move_to_destination(QString path, QDir tmp_dir)
{
qDebug() << "Removing password_store " << path;
QDir destination_dir(path);
destination_dir.removeRecursively();
qDebug() << "Moving cloned content to destination dir";
QDir dir;
qDebug() << tmp_dir.absolutePath() << " to " << destination_dir.absolutePath();
return dir.rename(tmp_dir.absolutePath(), destination_dir.absolutePath()); // TODO Better error handling
}
bool Git::clone(QString url, QString path, mode_type mode) //, GitPlugin::RepoType type, QString pass)
{
auto v = overload {
2025-01-13 18:11:16 +01:00
[](const Unset & x) { return "Unset"; },
[](const HTTP & x) { return "Unset"; },
[](const HTTPAuth & x) { return "HTTPAuth"; },
[](const SSHAuth & x) { return "SSHAuth"; },
[](const SSHKey & x) { return "SSHKey"; },
};
qInfo() << "Cloning " << url << " to destination " << path << " using " << std::visit(v, mode);
LibGit::instance()->set_mode(mode);
auto tmp_dir = this->clone_setup();
qDebug() << "Cloning " << url << " to tmp dir " << tmp_dir.absolutePath();
auto ret = LibGit::instance()->clone(url, tmp_dir.absolutePath()); // TODO Better error handling
2025-01-13 18:11:16 +01:00
if (ret) {
this->move_to_destination(path, tmp_dir);
}
2025-01-13 18:11:16 +01:00
this->clone_tear_down(tmp_dir);
LibGit::instance()->set_mode(Unset());
return ret ;
2025-01-10 13:48:38 +01:00
}
bool Git::clone_http(QString url, QString path) //, GitPlugin::RepoType type, QString pass)
{
HTTP mode = {};
return this->clone(url, path, mode);
}
2025-01-13 18:11:16 +01:00
bool Git::clone_http_pass(QString url, QString path, QString pass)
{
HTTPAuth mode = { pass };
return this->clone(url, path, mode);
}