]> git.proxmox.com Git - libgit2.git/blob - src/ignore.h
New upstream version 1.4.3+dfsg.1
[libgit2.git] / src / ignore.h
1 /*
2 * Copyright (C) the libgit2 contributors. All rights reserved.
3 *
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
6 */
7 #ifndef INCLUDE_ignore_h__
8 #define INCLUDE_ignore_h__
9
10 #include "common.h"
11
12 #include "repository.h"
13 #include "vector.h"
14 #include "attr_file.h"
15
16 #define GIT_IGNORE_FILE ".gitignore"
17 #define GIT_IGNORE_FILE_INREPO "exclude"
18 #define GIT_IGNORE_FILE_XDG "ignore"
19
20 /* The git_ignores structure maintains three sets of ignores:
21 * - internal ignores
22 * - per directory ignores
23 * - global ignores (at lower priority than the others)
24 * As you traverse from one directory to another, you can push and pop
25 * directories onto git_ignores list efficiently.
26 */
27 typedef struct {
28 git_repository *repo;
29 git_str dir; /* current directory reflected in ign_path */
30 git_attr_file *ign_internal;
31 git_vector ign_path;
32 git_vector ign_global;
33 size_t dir_root; /* offset in dir to repo root */
34 int ignore_case;
35 int depth;
36 } git_ignores;
37
38 extern int git_ignore__for_path(
39 git_repository *repo, const char *path, git_ignores *ign);
40
41 extern int git_ignore__push_dir(git_ignores *ign, const char *dir);
42
43 extern int git_ignore__pop_dir(git_ignores *ign);
44
45 extern void git_ignore__free(git_ignores *ign);
46
47 enum {
48 GIT_IGNORE_UNCHECKED = -2,
49 GIT_IGNORE_NOTFOUND = -1,
50 GIT_IGNORE_FALSE = 0,
51 GIT_IGNORE_TRUE = 1
52 };
53
54 extern int git_ignore__lookup(int *out, git_ignores *ign, const char *path, git_dir_flag dir_flag);
55
56 /* command line Git sometimes generates an error message if given a
57 * pathspec that contains an exact match to an ignored file (provided
58 * --force isn't also given). This makes it easy to check it that has
59 * happened. Returns GIT_EINVALIDSPEC if the pathspec contains ignored
60 * exact matches (that are not already present in the index).
61 */
62 extern int git_ignore__check_pathspec_for_exact_ignores(
63 git_repository *repo, git_vector *pathspec, bool no_fnmatch);
64
65 #endif