merge(3p/git): Merge git upstream at v2.26.2

This commit is contained in:
Vincent Ambo 2020-05-22 17:46:45 +01:00
commit 5229c9b232
1006 changed files with 149006 additions and 60819 deletions

View file

@ -28,6 +28,12 @@ struct userdiff_driver;
#define MINIMUM_BREAK_SIZE 400 /* do not break a file smaller than this */
/**
* the internal representation for a single file (blob). It records the blob
* object name (if known -- for a work tree file it typically is a NUL SHA-1),
* filemode and pathname. This is what the `diff_addremove()`, `diff_change()`
* and `diff_unmerge()` synthesize and feed `diff_queue()` function with.
*/
struct diff_filespec {
struct object_id oid;
char *path;
@ -66,6 +72,17 @@ void diff_free_filespec_data(struct diff_filespec *);
void diff_free_filespec_blob(struct diff_filespec *);
int diff_filespec_is_binary(struct repository *, struct diff_filespec *);
/**
* This records a pair of `struct diff_filespec`; the filespec for a file in
* the "old" set (i.e. preimage) is called `one`, and the filespec for a file
* in the "new" set (i.e. postimage) is called `two`. A change that represents
* file creation has NULL in `one`, and file deletion has NULL in `two`.
*
* A `filepair` starts pointing at `one` and `two` that are from the same
* filename, but `diffcore_std()` can break pairs and match component filespecs
* with other filespecs from a different filepair to form new filepair. This is
* called 'rename detection'.
*/
struct diff_filepair {
struct diff_filespec *one;
struct diff_filespec *two;
@ -77,6 +94,7 @@ struct diff_filepair {
unsigned done_skip_stat_unmatch : 1;
unsigned skip_stat_unmatch_result : 1;
};
#define DIFF_PAIR_UNMERGED(p) ((p)->is_unmerged)
#define DIFF_PAIR_RENAME(p) ((p)->renamed_pair)
@ -94,11 +112,25 @@ void diff_free_filepair(struct diff_filepair *);
int diff_unmodified_pair(struct diff_filepair *);
/**
* This is a collection of filepairs. Notable members are:
*
* - `queue`:
* An array of pointers to `struct diff_filepair`. This dynamically grows as
* you add filepairs;
*
* - `alloc`:
* The allocated size of the `queue` array;
*
* - `nr`:
* The number of elements in the `queue` array.
*/
struct diff_queue_struct {
struct diff_filepair **queue;
int alloc;
int nr;
};
#define DIFF_QUEUE_CLEAR(q) \
do { \
(q)->queue = NULL; \