/* * Copyright (C) 2012 the libgit2 contributors * * This file is part of libgit2, distributed under the GNU GPL v2 with * a Linking Exception. For full terms see the included COPYING file. */ #ifndef INCLUDE_git_submodule_h__ #define INCLUDE_git_submodule_h__ #include "common.h" #include "types.h" #include "oid.h" /** * @file git2/submodule.h * @brief Git submodule management utilities * @defgroup git_submodule Git submodule management routines * @ingroup Git * @{ */ GIT_BEGIN_DECL typedef enum { GIT_SUBMODULE_UPDATE_CHECKOUT = 0, GIT_SUBMODULE_UPDATE_REBASE = 1, GIT_SUBMODULE_UPDATE_MERGE = 2 } git_submodule_update_t; typedef enum { GIT_SUBMODULE_IGNORE_ALL = 0, /* never dirty */ GIT_SUBMODULE_IGNORE_DIRTY = 1, /* only dirty if HEAD moved */ GIT_SUBMODULE_IGNORE_UNTRACKED = 2, /* dirty if tracked files change */ GIT_SUBMODULE_IGNORE_NONE = 3 /* any change or untracked == dirty */ } git_submodule_ignore_t; /** * Description of submodule * * This record describes a submodule found in a repository. There * should be an entry for every submodule found in the HEAD and for * every submodule described in .gitmodules. The fields are as follows: * * - `name` is the name of the submodule from .gitmodules. * - `path` is the path to the submodule from the repo working directory. * It is almost always the same as `name`. * - `url` is the url for the submodule. * - `oid` is the HEAD SHA1 for the submodule. * - `update` is a value from above - see gitmodules(5) update. * - `ignore` is a value from above - see gitmodules(5) ignore. * - `fetch_recurse` is 0 or 1 - see gitmodules(5) fetchRecurseSubmodules. * - `refcount` is for internal use. * * If the submodule has been added to .gitmodules but not yet git added, * then the `oid` will be zero. If the submodule has been deleted, but * the delete has not been committed yet, then the `oid` will be set, but * the `url` will be NULL. */ typedef struct { char *name; char *path; char *url; git_oid oid; /* sha1 of submodule HEAD ref or zero if not committed */ git_submodule_update_t update; git_submodule_ignore_t ignore; int fetch_recurse; int refcount; } git_submodule; /** * Iterate over all submodules of a repository. * * @param repo The repository * @param callback Function to be called with the name of each submodule. * Return a non-zero value to terminate the iteration. * @param payload Extra data to pass to callback * @return 0 on success, -1 on error, or non-zero return value of callback */ GIT_EXTERN(int) git_submodule_foreach( git_repository *repo, int (*callback)(const char *name, void *payload), void *payload); /** * Lookup submodule information by name or path. * * Given either the submodule name or path (they are ususally the same), * this returns a structure describing the submodule. If the submodule * does not exist, this will return GIT_ENOTFOUND and set the submodule * pointer to NULL. * * @param submodule Pointer to submodule description object pointer.. * @param repo The repository. * @param name The name of the submodule. Trailing slashes will be ignored. * @return 0 on success, GIT_ENOTFOUND if submodule does not exist, -1 on error */ GIT_EXTERN(int) git_submodule_lookup( git_submodule **submodule, git_repository *repo, const char *name); /** @} */ GIT_END_DECL #endif