summaryrefslogtreecommitdiff
path: root/diffcore.h
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2019-12-16 13:08:39 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2019-12-16 13:08:39 -0800
commit26c816a67de449b3c5284ab97b03aeeeeabbb45c (patch)
tree2cca69d5115269b1c680b1ccd852202e1f7b5862 /diffcore.h
parentMerge branch 'rs/xdiff-ignore-ws-w-func-context' (diff)
parenttrace2: move doc to trace2.h (diff)
downloadtgif-26c816a67de449b3c5284ab97b03aeeeeabbb45c.tar.xz
Merge branch 'hw/doc-in-header'
* hw/doc-in-header: trace2: move doc to trace2.h submodule-config: move doc to submodule-config.h tree-walk: move doc to tree-walk.h trace: move doc to trace.h run-command: move doc to run-command.h parse-options: add link to doc file in parse-options.h credential: move doc to credential.h argv-array: move doc to argv-array.h cache: move doc to cache.h sigchain: move doc to sigchain.h pathspec: move doc to pathspec.h revision: move doc to revision.h attr: move doc to attr.h refs: move doc to refs.h remote: move doc to remote.h and refspec.h sha1-array: move doc to sha1-array.h merge: move doc to ll-merge.h graph: move doc to graph.h and graph.c dir: move doc to dir.h diff: move doc to diff.h and diffcore.h
Diffstat (limited to 'diffcore.h')
-rw-r--r--diffcore.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/diffcore.h b/diffcore.h
index b651061c0e..7c07347e42 100644
--- a/diffcore.h
+++ b/diffcore.h
@@ -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; \