blob: f5143f3ad27a6f780f7d34ff215534d2b64fa078 [file] [log] [blame]
Inna Palantff3f07a2019-07-11 16:15:26 -07001/*
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_git_ignore_h__
8#define INCLUDE_git_ignore_h__
9
10#include "common.h"
11#include "types.h"
12
13GIT_BEGIN_DECL
14
15/**
16 * Add ignore rules for a repository.
17 *
18 * Excludesfile rules (i.e. .gitignore rules) are generally read from
19 * .gitignore files in the repository tree or from a shared system file
20 * only if a "core.excludesfile" config value is set. The library also
21 * keeps a set of per-repository internal ignores that can be configured
22 * in-memory and will not persist. This function allows you to add to
23 * that internal rules list.
24 *
25 * Example usage:
26 *
27 * error = git_ignore_add_rule(myrepo, "*.c\ndir/\nFile with space\n");
28 *
29 * This would add three rules to the ignores.
30 *
31 * @param repo The repository to add ignore rules to.
32 * @param rules Text of rules, a la the contents of a .gitignore file.
33 * It is okay to have multiple rules in the text; if so,
34 * each rule should be terminated with a newline.
35 * @return 0 on success
36 */
37GIT_EXTERN(int) git_ignore_add_rule(
38 git_repository *repo,
39 const char *rules);
40
41/**
42 * Clear ignore rules that were explicitly added.
43 *
44 * Resets to the default internal ignore rules. This will not turn off
45 * rules in .gitignore files that actually exist in the filesystem.
46 *
47 * The default internal ignores ignore ".", ".." and ".git" entries.
48 *
49 * @param repo The repository to remove ignore rules from.
50 * @return 0 on success
51 */
52GIT_EXTERN(int) git_ignore_clear_internal_rules(
53 git_repository *repo);
54
55/**
56 * Test if the ignore rules apply to a given path.
57 *
58 * This function checks the ignore rules to see if they would apply to the
59 * given file. This indicates if the file would be ignored regardless of
60 * whether the file is already in the index or committed to the repository.
61 *
Chih-Hung Hsiehda60c852019-12-19 14:56:55 -080062 * One way to think of this is if you were to do "git check-ignore --no-index"
63 * on the given file, would it be shown or not?
Inna Palantff3f07a2019-07-11 16:15:26 -070064 *
65 * @param ignored boolean returning 0 if the file is not ignored, 1 if it is
66 * @param repo a repository object
67 * @param path the file to check ignores for, relative to the repo's workdir.
68 * @return 0 if ignore rules could be processed for the file (regardless
69 * of whether it exists or not), or an error < 0 if they could not.
70 */
71GIT_EXTERN(int) git_ignore_path_is_ignored(
72 int *ignored,
73 git_repository *repo,
74 const char *path);
75
76GIT_END_DECL
77
78#endif