|
@@ -1,5 +1,6 @@
|
|
|
#include <QListWidgetItem>
|
|
#include <QListWidgetItem>
|
|
|
#include <QMessageBox>
|
|
#include <QMessageBox>
|
|
|
|
|
+#include <QDir>
|
|
|
#include "ui_ConflictModal.h"
|
|
#include "ui_ConflictModal.h"
|
|
|
#include "conflictModal.h"
|
|
#include "conflictModal.h"
|
|
|
#include "ConflictItemWidget.h"
|
|
#include "ConflictItemWidget.h"
|
|
@@ -7,7 +8,9 @@
|
|
|
|
|
|
|
|
using namespace craftlab::fakeraid;
|
|
using namespace craftlab::fakeraid;
|
|
|
|
|
|
|
|
-ConflictModal::ConflictModal(const std::vector<std::string>& rootPaths, const DiffResult& _diffResult): diffResult(std::make_unique<DiffResult>(_diffResult)), ui(std::make_unique<Ui_ConflictModal>())
|
|
|
|
|
|
|
+std::string mergePath(const std::string& a, const QChar& separator, const std::string& b);
|
|
|
|
|
+
|
|
|
|
|
+ConflictModal::ConflictModal(const std::vector<std::string>& _rootPaths, const DiffResult& _diffResult): rootPaths(_rootPaths), diffResult(std::make_unique<DiffResult>(_diffResult)), ui(std::make_unique<Ui_ConflictModal>())
|
|
|
{
|
|
{
|
|
|
ui->setupUi(this);
|
|
ui->setupUi(this);
|
|
|
|
|
|
|
@@ -59,9 +62,10 @@ void ConflictModal::UpdateProcessButtonStatus()
|
|
|
ui->buttonProcess->setEnabled(!pending);
|
|
ui->buttonProcess->setEnabled(!pending);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-DiffResult ConflictModal::ComputeOutcome() const
|
|
|
|
|
|
|
+DiffResult ConflictModal::ComputeOutcome(const std::vector<std::string>& rootPaths)
|
|
|
{
|
|
{
|
|
|
DiffResult result;
|
|
DiffResult result;
|
|
|
|
|
+
|
|
|
result.correctFiles = diffResult->correctFiles;
|
|
result.correctFiles = diffResult->correctFiles;
|
|
|
result.FileList = diffResult->FileList;
|
|
result.FileList = diffResult->FileList;
|
|
|
for (const ConflictItemWidget* i : conflicts)
|
|
for (const ConflictItemWidget* i : conflicts)
|
|
@@ -70,7 +74,26 @@ DiffResult ConflictModal::ComputeOutcome() const
|
|
|
if (i->GetAction() == ConflictItemWidget::Action::Copy || i->GetAction() == ConflictItemWidget::Action::UseVersion)
|
|
if (i->GetAction() == ConflictItemWidget::Action::Copy || i->GetAction() == ConflictItemWidget::Action::UseVersion)
|
|
|
result.correctFiles.push_back(originalFile);
|
|
result.correctFiles.push_back(originalFile);
|
|
|
else if (i->GetAction() == ConflictItemWidget::Action::Remove)
|
|
else if (i->GetAction() == ConflictItemWidget::Action::Remove)
|
|
|
- ;
|
|
|
|
|
|
|
+ {
|
|
|
|
|
+ if (diffResult->differentFiles.find(originalFile.fileName) != diffResult->differentFiles.end())
|
|
|
|
|
+ {
|
|
|
|
|
+ for (int i = 0; i < diffResult->differentFiles[originalFile.fileName].size(); ++i)
|
|
|
|
|
+ if (diffResult->differentFiles[originalFile.fileName][i] > 0)
|
|
|
|
|
+ processItems.filesToRemove.push_back(mergePath(rootPaths[i], QDir::separator(), originalFile.fileName));
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (diffResult->missingFiles.find(originalFile.fileName) != diffResult->missingFiles.end())
|
|
|
|
|
+ {
|
|
|
|
|
+ for (int i = 0; i < diffResult->missingFiles[originalFile.fileName].size(); ++i)
|
|
|
|
|
+ if (!diffResult->missingFiles[originalFile.fileName][i])
|
|
|
|
|
+ processItems.filesToRemove.push_back(mergePath(rootPaths[i], QDir::separator(), originalFile.fileName));
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (diffResult->missingDirs.find(originalFile.fileName) != diffResult->missingDirs.end())
|
|
|
|
|
+ {
|
|
|
|
|
+ for (int i = 0; i < diffResult->missingDirs[originalFile.fileName].size(); ++i)
|
|
|
|
|
+ if (!diffResult->missingDirs[originalFile.fileName][i])
|
|
|
|
|
+ processItems.dirsToRemove.push_back(mergePath(rootPaths[i], QDir::separator(), originalFile.fileName));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
else if (i->GetAction() == ConflictItemWidget::Action::Ignore ||
|
|
else if (i->GetAction() == ConflictItemWidget::Action::Ignore ||
|
|
|
i->GetAction() == ConflictItemWidget::Action::Undefined)
|
|
i->GetAction() == ConflictItemWidget::Action::Undefined)
|
|
|
{
|
|
{
|
|
@@ -97,5 +120,10 @@ DiffResult ConflictModal::Display(const IEngine& engine, const DiffResult& diffR
|
|
|
{
|
|
{
|
|
|
ConflictModal dialog(engine.GetRootPaths(), diffResult);
|
|
ConflictModal dialog(engine.GetRootPaths(), diffResult);
|
|
|
dialog.exec();
|
|
dialog.exec();
|
|
|
- return dialog.ComputeOutcome();
|
|
|
|
|
|
|
+ const auto result = dialog.ComputeOutcome(engine.GetPaths());
|
|
|
|
|
+
|
|
|
|
|
+ engine.RemoveFiles(dialog.processItems.filesToRemove);
|
|
|
|
|
+ engine.RemoveDirs(dialog.processItems.dirsToRemove);
|
|
|
|
|
+
|
|
|
|
|
+ return result;
|
|
|
}
|
|
}
|