12#include "../helpers/Unique.h"
27class Tree :
public TypedObject<git_tree> {
28 using GitTy = git_tree;
34 using WalkCallback =
const std::function<int(
const std::string &root,
42 bool walk(
const WalkCallback &CB,
const git_treewalk_mode &mode = GIT_TREEWALK_PRE)
const;
50 std::optional<std::string>
catFile(
const std::string &file)
const noexcept;
55 static int walkCB(
const char *root,
const git_tree_entry *entry,
void *payload);
65 using GitTy = git_treebuilder;
70 TreeBuilder() =
delete;
73 bool insert(
const std::filesystem::path &file,
const Blob &blob)
const noexcept;
75 bool remove(
const std::filesystem::path &file)
const noexcept {
76 return !Repo::setLastError(git_treebuilder_remove(
treeBuilder(), file.c_str()));
80 return !Repo::setLastError(git_treebuilder_clear(
treeBuilder()));
84 std::optional<Tree>
write(
const Repo &repo)
const noexcept;
90 const git_tree_entry *
get(
const std::filesystem::path &file)
const noexcept {
91 return git_treebuilder_get(
treeBuilder(), file.c_str());
95 GitTy *
treeBuilder() const noexcept {
return m_treeBuilder.get(); }
99 explicit TreeBuilder(GitTy *TB) noexcept : m_treeBuilder(TB) { }
101 Holder m_treeBuilder;
108 using GitTy = git_tree_entry;
113 TreeEntry() =
delete;
116 const git_oid *
id() const noexcept {
return git_tree_entry_id(
treeEntry()); }
121 std::string
name() const noexcept {
return git_tree_entry_name(
treeEntry()); }
123 git_object_t
type() const noexcept {
return git_tree_entry_type(
treeEntry()); }
128 std::optional<std::string>
catFile(
const Repo &repo)
const noexcept;
131 GitTy *
treeEntry() const noexcept {
return m_treeEntry.get(); }
133 operator GitTy *()
const noexcept {
return treeEntry(); }
135 explicit TreeEntry(GitTy *entry,
bool free =
true) noexcept : m_treeEntry(entry, free) { }
136 explicit TreeEntry(
const GitTy *entry) noexcept :
137 m_treeEntry(
const_cast<GitTy *
>(entry),
false) { }
Blob is a representation of a git blob.
Definition Blob.h:16
Commit is a representation of a git commit.
Definition Commit.h:21
static std::string oidToStr(const git_oid &id)
Convert OID id to string.
Definition Helpers.h:20
const Repo & repo() const
Get the Repo this Object lives in.
Definition Object.h:38
The most important Git class.
Definition Repo.h:45
Tag is a representation of a git tag.
Definition Tag.h:23
The TreeEntry represents a libgit2's tree builder.
Definition Tree.h:64
bool clear() const noexcept
Wipe out this TreeBuilder.
Definition Tree.h:79
size_t entryCount() const noexcept
Get count of entries in this TreeBuilder.
Definition Tree.h:87
const git_tree_entry * get(const std::filesystem::path &file) const noexcept
Get a tree entry for file in this TreeBuilder.
Definition Tree.h:90
bool insert(const std::filesystem::path &file, const Blob &blob) const noexcept
Add file to this TreeBuilder, having blob as a content.
GitTy * treeBuilder() const noexcept
Get the stored pointer to libgit2's git_treebuilder.
Definition Tree.h:95
bool remove(const std::filesystem::path &file) const noexcept
Remove file from this TreeBuilder.
Definition Tree.h:75
std::optional< Tree > write(const Repo &repo) const noexcept
Write this TreeBuilder to the repo and return the built Tree.
The TreeEntry represents one git tree entry.
Definition Tree.h:107
std::optional< std::string > catFile(const Repo &repo) const noexcept
Cat this TreeEntry.
GitTy * treeEntry() const noexcept
Get the stored pointer to libgit2's git_tree_entry.
Definition Tree.h:131
std::string idStr() const noexcept
Get OID (SHA) of this Object – as a string.
Definition Tree.h:118
git_filemode_t filemode() const noexcept
Get permissions of this TreeEntry.
Definition Tree.h:125
git_object_t type() const noexcept
Get type of this TreeEntry (GIT_OBJECT_TREE, GIT_OBJECT_BLOB, ...).
Definition Tree.h:123
std::string name() const noexcept
Get name of this TreeEntry.
Definition Tree.h:121
const git_oid * id() const noexcept
Get OID (SHA) of this Object.
Definition Tree.h:116
Tree is a representation of a git tree.
Definition Tree.h:27
const std::function< int(const std::string &root, const TreeEntry &entry)> WalkCallback
A callback for walk().
Definition Tree.h:34
GitTy * tree() const noexcept
Get the stored pointer to libgit2's git_tree.
Definition Tree.h:53
TreeEntry treeEntryByIndex(size_t idx) const noexcept
Get an entry on the idx-th position.
std::optional< TreeEntry > treeEntryByPath(const std::string &path) const noexcept
Get an entry corresponding to path.
size_t entryCount() const noexcept
Get count of entries in this Tree.
Definition Tree.h:39
bool walk(const WalkCallback &CB, const git_treewalk_mode &mode=GIT_TREEWALK_PRE) const
Walk this Tree and call CB for every entry.
std::optional< std::string > catFile(const std::string &file) const noexcept
Cat a file in this Tree.
Git Object class – base for Blob, Commit, Tag, Tree.
Definition Object.h:65
git_tree * typed() const noexcept
Definition Object.h:83
Wrapper around std::unique_ptr for easier re-definition of free.
Definition Unique.h:41