| /* |
| * This file is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License, version 2, |
| * as published by the Free Software Foundation. |
| * |
| * In addition to the permissions in the GNU General Public License, |
| * the authors give you unlimited permission to link the compiled |
| * version of this file into combinations with other programs, |
| * and to distribute those combinations without any restriction |
| * coming from the use of this file. (The General Public License |
| * restrictions do apply in other respects; for example, they cover |
| * modification of the file, and distribution when not linked into |
| * a combined executable.) |
| * |
| * This file is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; see the file COPYING. If not, write to |
| * the Free Software Foundation, 51 Franklin Street, Fifth Floor, |
| * Boston, MA 02110-1301, USA. |
| */ |
| #ifndef INCLUDE_git_index_h__ |
| #define INCLUDE_git_index_h__ |
| |
| #include "common.h" |
| #include "types.h" |
| #include "oid.h" |
| |
| /** |
| * @file git2/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 { |
| git_time_t seconds; |
| /* nsec should not be stored as time_t compatible */ |
| 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; |
| git_off_t 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 |