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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
#include "Index.h"
#include "GitException.h"
#include "Tree.h"
#include "Repository.h"
namespace vcs
{
namespace git
{
Index::Index(git_index* index) :
_index(index)
{}
Index::~Index()
{
git_index_free(_index);
}
std::shared_ptr<Tree> Index::writeTree(Repository& repository)
{
git_oid treeOid;
auto error = git_index_write_tree(&treeOid, _index);
GitException::ThrowOnError(error);
git_tree* tree;
error = git_tree_lookup(&tree, repository._get(), &treeOid);
GitException::ThrowOnError(error);
return std::make_shared<Tree>(tree);
}
void Index::addAll()
{
std::string pathSpec("*");
char* pathSpecCstr = pathSpec.data();
const git_strarray pathSpecs = {
&pathSpecCstr,
1
};
auto error = git_index_add_all(_index, &pathSpecs, GIT_INDEX_ADD_DEFAULT, nullptr, nullptr);
GitException::ThrowOnError(error);
}
void Index::updateAll()
{
std::string pathSpec("*");
char* pathSpecCstr = pathSpec.data();
const git_strarray pathSpecs = {
&pathSpecCstr,
1
};
auto error = git_index_update_all(_index, &pathSpecs, nullptr, nullptr);
GitException::ThrowOnError(error);
}
void Index::write()
{
auto error = git_index_write(_index);
GitException::ThrowOnError(error);
}
void Index::resolveByUsingOurs(const std::string& relativePath)
{
auto error = git_index_add_bypath(_index, relativePath.c_str());
GitException::ThrowOnError(error);
}
bool Index::fileIsConflicted(const std::string& relativePath)
{
const git_index_entry* ancestor = nullptr;
const git_index_entry* ours = nullptr;
const git_index_entry* theirs = nullptr;
auto error = git_index_conflict_get(&ancestor, &ours, &theirs, _index, relativePath.c_str());
return error == 0;
}
bool Index::hasConflicts()
{
return git_index_has_conflicts(_index);
}
}
}
|