mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-03 01:58:32 +00:00

When processing status for a newly checked out repo, it is possible that there will be submodules that have not yet been initialized. The only way to distinguish these from untracked directories is to have some knowledge of submodules. This commit adds a new submodule API which, given a name or path, can determine if it appears to be a submodule and can give information about the submodule.
106 lines
3.4 KiB
C
106 lines
3.4 KiB
C
/*
|
|
* 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_SUBMOUDLE_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);
|
|
|
|
#define GIT_SUBMODULE_HEAD "[internal]HEAD"
|
|
|
|
/**
|
|
* 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
|