diff options
Diffstat (limited to 'src/git2/index.h')
-rw-r--r-- | src/git2/index.h | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/src/git2/index.h b/src/git2/index.h new file mode 100644 index 000000000..8bdced6a3 --- /dev/null +++ b/src/git2/index.h @@ -0,0 +1,173 @@ +#ifndef INCLUDE_git_index_h__ +#define INCLUDE_git_index_h__ + +#include "common.h" +#include "types.h" + +/** + * @file git/index.h + * @brief Git index parsing and manipulation routines + * @defgroup git_index Git index parsing and manipulation routines + * @ingroup Git + * @{ + */ +GIT_BEGIN_DECL + +#define GIT_IDXENTRY_NAMEMASK (0x0fff) +#define GIT_IDXENTRY_STAGEMASK (0x3000) +#define GIT_IDXENTRY_EXTENDED (0x4000) +#define GIT_IDXENTRY_VALID (0x8000) +#define GIT_IDXENTRY_STAGESHIFT 12 + +/** Time used in a git index entry */ +typedef struct { + unsigned int seconds; + unsigned int nanoseconds; +} git_index_time; + +/** Memory representation of a file entry in the index. */ +typedef struct git_index_entry { + git_index_time ctime; + git_index_time mtime; + + unsigned int dev; + unsigned int ino; + unsigned int mode; + unsigned int uid; + unsigned int gid; + unsigned int file_size; + + git_oid oid; + + unsigned short flags; + unsigned short flags_extended; + + char *path; +} git_index_entry; + + +/** + * Create a new Git index object as a memory representation + * of the Git index file in 'index_path', without a repository + * to back it. + * + * Since there is no ODB behind this index, any Index methods + * which rely on the ODB (e.g. index_add) will fail with the + * GIT_EBAREINDEX error code. + * + * @param index the pointer for the new index + * @param index_path the path to the index file in disk + * @return 0 on success; error code otherwise + */ +GIT_EXTERN(int) git_index_open_bare(git_index **index, const char *index_path); + +/** + * Open the Index inside the git repository pointed + * by 'repo'. + * + * @param repo the git repo which owns the index + * @param index_path the path to the index file in disk + * @return 0 on success; error code otherwise + */ +GIT_EXTERN(int) git_index_open_inrepo(git_index **index, git_repository *repo); + +/** + * Clear the contents (all the entries) of an index object. + * This clears the index object in memory; changes must be manually + * written to disk for them to take effect. + * + * @param index an existing index object + */ +GIT_EXTERN(void) git_index_clear(git_index *index); + +/** + * Free an existing index object. + * + * @param index an existing index object + */ +GIT_EXTERN(void) git_index_free(git_index *index); + +/** + * Update the contents of an existing index object in memory + * by reading from the hard disk. + * + * @param index an existing index object + * @return 0 on success, otherwise an error code + */ +GIT_EXTERN(int) git_index_read(git_index *index); + +/** + * Write an existing index object from memory back to disk + * using an atomic file lock. + * + * @param index an existing index object + * @return 0 on success, otherwise an error code + */ +GIT_EXTERN(int) git_index_write(git_index *index); + +/** + * Find the first index of any entires which point to given + * path in the Git index. + * + * @param index an existing index object + * @param path path to search + * @return an index >= 0 if found, -1 otherwise + */ +GIT_EXTERN(int) git_index_find(git_index *index, const char *path); + +/** + * Add or update an index entry from a file in disk. + * + * @param index an existing index object + * @param path filename to add + * @param stage stage for the entry + * @return 0 on success, otherwise an error code + */ +GIT_EXTERN(int) git_index_add(git_index *index, const char *path, int stage); + +/** + * Remove an entry from the index + * + * @param index an existing index object + * @param position position of the entry to remove + * @return 0 on success, otherwise an error code + */ +GIT_EXTERN(int) git_index_remove(git_index *index, int position); + +/** + * Insert an entry into the index. + * A full copy (including the 'path' string) of the given + * 'source_entry' will be inserted on the index; if the index + * already contains an entry for the same path, the entry + * will be updated. + * + * @param index an existing index object + * @param source_entry new entry object + * @return 0 on success, otherwise an error code + */ +GIT_EXTERN(int) git_index_insert(git_index *index, const git_index_entry *source_entry); + +/** + * Get a pointer to one of the entries in the index + * + * This entry can be modified, and the changes will be written + * back to disk on the next write() call. + * + * @param index an existing index object + * @param n the position of the entry + * @return a pointer to the entry; NULL if out of bounds + */ +GIT_EXTERN(git_index_entry *) git_index_get(git_index *index, int n); + +/** + * Get the count of entries currently in the index + * + * @param index an existing index object + * @return integer of count of current entries + */ +GIT_EXTERN(unsigned int) git_index_entrycount(git_index *index); + + +/** @} */ +GIT_END_DECL +#endif |