RedPanda-CPP/RedPandaIDE/vcs/gitrepository.cpp

123 lines
2.9 KiB
C++
Raw Normal View History

#include "gitrepository.h"
#include "gitmanager.h"
#include <QDir>
GitRepository::GitRepository(const QString& folder, QObject *parent)
: QObject{parent},
mInRepository(false)
{
mManager = new GitManager();
setFolder(folder);
}
GitRepository::~GitRepository()
{
delete mManager;
}
const QString &GitRepository::folder() const
{
2022-02-15 17:22:44 +08:00
return mRealFolder;
}
void GitRepository::createRepository()
{
2022-02-15 17:22:44 +08:00
mManager->createRepository(mRealFolder);
}
bool GitRepository::hasRepository(QString& currentBranch)
{
currentBranch = mBranch;
return mInRepository;
}
2022-02-25 11:07:30 +08:00
bool GitRepository::add(const QString &path, QString& output)
{
2022-02-25 11:07:30 +08:00
return mManager->add(mFolder,path, output);
}
2022-02-25 11:07:30 +08:00
bool GitRepository::remove(const QString &path, QString& output)
{
2022-02-25 11:07:30 +08:00
return mManager->remove(mFolder,path, output);
}
2022-02-25 11:07:30 +08:00
bool GitRepository::rename(const QString &oldName, const QString &newName, QString& output)
{
2022-02-25 11:07:30 +08:00
return mManager->rename(mFolder, oldName, newName,output);
}
2022-02-25 11:07:30 +08:00
bool GitRepository::restore(const QString &path, QString& output)
{
2022-02-25 11:07:30 +08:00
return mManager->restore(mFolder, path, output);
}
QSet<QString> GitRepository::listFiles(bool refresh)
{
if (refresh)
update();
return mFilesInRepositories;
}
2022-02-25 11:07:30 +08:00
bool GitRepository::clone(const QString &url, QString& output)
{
2022-02-25 11:07:30 +08:00
return mManager->clone(mFolder,url, output);
}
2022-02-25 11:07:30 +08:00
bool GitRepository::commit(const QString &message, QString& output, bool autoStage)
{
2022-02-25 11:07:30 +08:00
return mManager->commit(mRealFolder, message, autoStage, output);
}
2022-02-25 11:07:30 +08:00
bool GitRepository::revert(QString& output)
{
2022-02-25 11:07:30 +08:00
return mManager->revert(mRealFolder, output);
}
void GitRepository::setFolder(const QString &newFolder)
{
mFolder = newFolder;
2022-03-11 20:51:33 +08:00
if (!newFolder.isEmpty())
mRealFolder = mManager->rootFolder(mFolder);
else
mRealFolder = newFolder;
update();
}
void GitRepository::update()
{
2022-03-11 20:51:33 +08:00
if (!mManager->isValid() || mFolder.isEmpty()) {
mInRepository = false;
mBranch = "";
mFilesInRepositories.clear();
mChangedFiles.clear();
mStagedFiles.clear();
2022-02-21 11:37:29 +08:00
mConflicts.clear();
} else {
2022-02-15 17:22:44 +08:00
mInRepository = mManager->hasRepository(mRealFolder,mBranch);
convertFilesListToSet(mManager->listFiles(mRealFolder),mFilesInRepositories);
convertFilesListToSet(mManager->listChangedFiles(mRealFolder),mChangedFiles);
convertFilesListToSet(mManager->listStagedFiles(mRealFolder),mStagedFiles);
2022-02-21 11:37:29 +08:00
convertFilesListToSet(mManager->listConflicts(mRealFolder),mConflicts);
// qDebug()<<"update"<<mRealFolder<<mBranch;
// qDebug()<<mFilesInRepositories;
// qDebug()<<mChangedFiles;
// qDebug()<<mStagedFiles;
}
}
2022-02-15 17:22:44 +08:00
const QString &GitRepository::realFolder() const
{
return mRealFolder;
}
void GitRepository::convertFilesListToSet(const QStringList &filesList, QSet<QString> &set)
{
set.clear();
QDir dir(mRealFolder);
foreach (const QString& s, filesList) {
set.insert(dir.absoluteFilePath(s));
}
}