X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=diff.h;h=527fb56d8517deab8eb9125c3a00971f58707630;hb=608cc4f2738d5e2055e238b2a9e482180d948a05;hp=9665e220063cd9543528c64b17f57dc761bad028;hpb=85cf82ff01ed975c31b75540afb1b251da5259fd;p=thirdparty%2Fgit.git diff --git a/diff.h b/diff.h index 9665e22006..527fb56d85 100644 --- a/diff.h +++ b/diff.h @@ -49,7 +49,17 @@ * - Once you finish feeding the pairs of files, call `diffcore_std()`. * This will tell the diffcore library to go ahead and do its work. * - * - Calling `diff_flush()` will produce the output. + * - Calling `diff_flush()` will produce the output, it will call + * `diff_free()` to free any resources, e.g. those allocated in + * `diff_opt_parse()`. + * + * - Set `.no_free = 1` before calling `diff_flush()` to defer the + * freeing of allocated memory in diff_options. This is useful when + * `diff_flush()` is being called in a loop, rather than as a + * one-off. When setting `.no_free = 1` you must ensure that + * `diff_free()` is called at the end, either by flipping the flag + * before the last `diff_flush()` call, or by flipping it before + * calling `diff_free()` yourself. */ struct combine_diff_path; @@ -178,6 +188,7 @@ struct diff_flags { unsigned diff_from_contents; unsigned dirty_submodules; unsigned ignore_untracked_in_submodules; + unsigned ignore_submodule_set; unsigned ignore_dirty_submodules; unsigned override_submodule_config; unsigned dirstat_by_line; @@ -364,6 +375,8 @@ struct diff_options { struct repository *repo; struct option *parseopts; + + int no_free; }; unsigned diff_filter_bit(char status); @@ -558,6 +571,7 @@ void diffcore_fix_diff_index(void); int diff_queue_is_empty(void); void diff_flush(struct diff_options*); +void diff_free(struct diff_options*); void diff_warn_rename_limit(const char *varname, int needed, int degraded_cc); /* diff-raw status letters */