summaryrefslogtreecommitdiff
path: root/diffcore.h
diff options
context:
space:
mode:
authorHeba Waly <heba.waly@gmail.com>2019-11-17 21:04:40 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-11-18 06:21:28 (GMT)
commit13c4d7eb228ea29dba77f8800daf2bd0ac54755a (patch)
tree06bd9c47bcfe5edcb953755e6d7cbcff7d4cc1a0 /diffcore.h
parentd9f6f3b6195a0ca35642561e530798ad1469bd41 (diff)
downloadgit-13c4d7eb228ea29dba77f8800daf2bd0ac54755a.zip
git-13c4d7eb228ea29dba77f8800daf2bd0ac54755a.tar.gz
git-13c4d7eb228ea29dba77f8800daf2bd0ac54755a.tar.bz2
diff: move doc to diff.h and diffcore.h
Move the documentation from Documentation/technical/api-diff.txt to both diff.h and diffcore.h as it's easier for the developers to find the usage information beside the code instead of looking for it in another doc file. Also documentation/technical/api-diff.txt is removed because the information it has is now redundant and it'll be hard to keep it up to date and synchronized with the documentation in the header files. There are three members documented in the doc file that weren't found in the header files, assuming the doc wasn't up to date and the members no longer exist: touched_flags, COLOR_DIFF_WORDS and QUIET. Signed-off-by: Heba Waly <heba.waly@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
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 b651061..7c07347 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; \