2 * Copyright (C) the libgit2 contributors. All rights reserved.
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.
7 #ifndef INCLUDE_git_apply_h__
8 #define INCLUDE_git_apply_h__
17 * @brief Git patch application routines
18 * @defgroup git_apply Git patch application routines
25 * When applying a patch, callback that will be made per delta (file).
28 * - returns < 0, the apply process will be aborted.
29 * - returns > 0, the delta will not be applied, but the apply process
31 * - returns 0, the delta is applied, and the apply process continues.
33 * @param delta The delta to be applied
34 * @param payload User-specified payload
35 * @return 0 if the delta is applied, < 0 if the apply process will be aborted
36 * or > 0 if the delta will not be applied.
38 typedef int GIT_CALLBACK(git_apply_delta_cb
)(
39 const git_diff_delta
*delta
,
43 * When applying a patch, callback that will be made per hunk.
46 * - returns < 0, the apply process will be aborted.
47 * - returns > 0, the hunk will not be applied, but the apply process
49 * - returns 0, the hunk is applied, and the apply process continues.
51 * @param hunk The hunk to be applied
52 * @param payload User-specified payload
53 * @return 0 if the hunk is applied, < 0 if the apply process will be aborted
54 * or > 0 if the hunk will not be applied.
56 typedef int GIT_CALLBACK(git_apply_hunk_cb
)(
57 const git_diff_hunk
*hunk
,
60 /** Flags controlling the behavior of git_apply */
63 * Don't actually make changes, just test that the patch applies.
64 * This is the equivalent of `git apply --check`.
66 GIT_APPLY_CHECK
= (1 << 0)
70 * Apply options structure
72 * Initialize with `GIT_APPLY_OPTIONS_INIT`. Alternatively, you can
73 * use `git_apply_options_init`.
75 * @see git_apply_to_tree, git_apply
78 unsigned int version
; /**< The version */
80 /** When applying a patch, callback that will be made per delta (file). */
81 git_apply_delta_cb delta_cb
;
83 /** When applying a patch, callback that will be made per hunk. */
84 git_apply_hunk_cb hunk_cb
;
86 /** Payload passed to both delta_cb & hunk_cb. */
89 /** Bitmask of git_apply_flags_t */
93 #define GIT_APPLY_OPTIONS_VERSION 1
94 #define GIT_APPLY_OPTIONS_INIT {GIT_APPLY_OPTIONS_VERSION}
97 * Initialize git_apply_options structure
99 * Initialize a `git_apply_options` with default values. Equivalent to creating
100 * an instance with GIT_APPLY_OPTIONS_INIT.
102 * @param opts The `git_apply_options` struct to initialize.
103 * @param version The struct version; pass `GIT_APPLY_OPTIONS_VERSION`
104 * @return 0 on success or -1 on failure.
106 GIT_EXTERN(int) git_apply_options_init(git_apply_options
*opts
, unsigned int version
);
109 * Apply a `git_diff` to a `git_tree`, and return the resulting image
112 * @param out the postimage of the application
113 * @param repo the repository to apply
114 * @param preimage the tree to apply the diff to
115 * @param diff the diff to apply
116 * @param options the options for the apply (or null for defaults)
117 * @return 0 or an error code
119 GIT_EXTERN(int) git_apply_to_tree(
121 git_repository
*repo
,
124 const git_apply_options
*options
);
126 /** Possible application locations for git_apply */
129 * Apply the patch to the workdir, leaving the index untouched.
130 * This is the equivalent of `git apply` with no location argument.
132 GIT_APPLY_LOCATION_WORKDIR
= 0,
135 * Apply the patch to the index, leaving the working directory
136 * untouched. This is the equivalent of `git apply --cached`.
138 GIT_APPLY_LOCATION_INDEX
= 1,
141 * Apply the patch to both the working directory and the index.
142 * This is the equivalent of `git apply --index`.
144 GIT_APPLY_LOCATION_BOTH
= 2
145 } git_apply_location_t
;
148 * Apply a `git_diff` to the given repository, making changes directly
149 * in the working directory, the index, or both.
151 * @param repo the repository to apply to
152 * @param diff the diff to apply
153 * @param location the location to apply (workdir, index or both)
154 * @param options the options for the apply (or null for defaults)
155 * @return 0 or an error code
157 GIT_EXTERN(int) git_apply(
158 git_repository
*repo
,
160 git_apply_location_t location
,
161 const git_apply_options
*options
);