1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
#pragma once
#include <git2.h>
namespace vcs
{
namespace git
{
// Represents a set of changes between two states of a repository
class Diff final
{
private:
git_diff* _diff;
public:
Diff(git_diff* diff) :
_diff(diff)
{}
~Diff()
{
git_diff_free(_diff);
}
bool containsFile(const std::string& relativePath)
{
FileSearch search{ relativePath, false };
git_diff_foreach(_diff, Diff::searchForFile, nullptr, nullptr, nullptr, &search);
return search.found;
}
private:
struct FileSearch
{
std::string path;
bool found;
};
static int searchForFile(const git_diff_delta* delta, float progress, void* payload)
{
auto* search = reinterpret_cast<FileSearch*>(payload);
if (delta->new_file.path == search->path)
{
search->found = true;
}
return 0;
}
};
}
}
|