| 1 | /* |
| 2 | * Copyright (C) 2005 Junio C Hamano |
| 3 | */ |
| 4 | #ifndef DIFF_H |
| 5 | #define DIFF_H |
| 6 | |
| 7 | #define DIFF_FILE_CANON_MODE(mode) \ |
| 8 | (S_ISREG(mode) ? (S_IFREG | ce_permissions(mode)) : \ |
| 9 | S_ISLNK(mode) ? S_IFLNK : S_IFDIR) |
| 10 | |
| 11 | struct tree_desc { |
| 12 | void *buf; |
| 13 | unsigned long size; |
| 14 | }; |
| 15 | |
| 16 | extern void update_tree_entry(struct tree_desc *); |
| 17 | extern const unsigned char *tree_entry_extract(struct tree_desc *, const char **, unsigned int *); |
| 18 | |
| 19 | struct diff_options; |
| 20 | |
| 21 | typedef void (*change_fn_t)(struct diff_options *options, |
| 22 | unsigned old_mode, unsigned new_mode, |
| 23 | const unsigned char *old_sha1, |
| 24 | const unsigned char *new_sha1, |
| 25 | const char *base, const char *path); |
| 26 | |
| 27 | typedef void (*add_remove_fn_t)(struct diff_options *options, |
| 28 | int addremove, unsigned mode, |
| 29 | const unsigned char *sha1, |
| 30 | const char *base, const char *path); |
| 31 | |
| 32 | struct diff_options { |
| 33 | const char **paths; |
| 34 | const char *filter; |
| 35 | const char *orderfile; |
| 36 | const char *pickaxe; |
| 37 | unsigned recursive:1, |
| 38 | tree_in_recursive:1, |
| 39 | full_index:1; |
| 40 | int break_opt; |
| 41 | int detect_rename; |
| 42 | int find_copies_harder; |
| 43 | int line_termination; |
| 44 | int output_format; |
| 45 | int pickaxe_opts; |
| 46 | int rename_score; |
| 47 | int reverse_diff; |
| 48 | int rename_limit; |
| 49 | int setup; |
| 50 | int abbrev; |
| 51 | |
| 52 | change_fn_t change; |
| 53 | add_remove_fn_t add_remove; |
| 54 | }; |
| 55 | |
| 56 | extern void diff_tree_setup_paths(const char **paths); |
| 57 | extern int diff_tree(struct tree_desc *t1, struct tree_desc *t2, |
| 58 | const char *base, struct diff_options *opt); |
| 59 | extern int diff_tree_sha1(const unsigned char *old, const unsigned char *new, |
| 60 | const char *base, struct diff_options *opt); |
| 61 | |
| 62 | struct combine_diff_path { |
| 63 | struct combine_diff_path *next; |
| 64 | int len; |
| 65 | char *path; |
| 66 | unsigned char sha1[20]; |
| 67 | unsigned char parent_sha1[FLEX_ARRAY][20]; |
| 68 | }; |
| 69 | |
| 70 | int show_combined_diff(struct combine_diff_path *elem, int num_parent, |
| 71 | int dense, const char *header); |
| 72 | |
| 73 | extern int diff_tree_combined_merge(const unsigned char *sha1, const char *, int); |
| 74 | |
| 75 | extern void diff_addremove(struct diff_options *, |
| 76 | int addremove, |
| 77 | unsigned mode, |
| 78 | const unsigned char *sha1, |
| 79 | const char *base, |
| 80 | const char *path); |
| 81 | |
| 82 | extern void diff_change(struct diff_options *, |
| 83 | unsigned mode1, unsigned mode2, |
| 84 | const unsigned char *sha1, |
| 85 | const unsigned char *sha2, |
| 86 | const char *base, const char *path); |
| 87 | |
| 88 | extern void diff_unmerge(struct diff_options *, |
| 89 | const char *path); |
| 90 | |
| 91 | extern int diff_scoreopt_parse(const char *opt); |
| 92 | |
| 93 | #define DIFF_SETUP_REVERSE 1 |
| 94 | #define DIFF_SETUP_USE_CACHE 2 |
| 95 | #define DIFF_SETUP_USE_SIZE_CACHE 4 |
| 96 | |
| 97 | extern int git_diff_config(const char *var, const char *value); |
| 98 | extern void diff_setup(struct diff_options *); |
| 99 | extern int diff_opt_parse(struct diff_options *, const char **, int); |
| 100 | extern int diff_setup_done(struct diff_options *); |
| 101 | |
| 102 | #define DIFF_DETECT_RENAME 1 |
| 103 | #define DIFF_DETECT_COPY 2 |
| 104 | |
| 105 | #define DIFF_PICKAXE_ALL 1 |
| 106 | |
| 107 | extern void diffcore_std(struct diff_options *); |
| 108 | |
| 109 | extern void diffcore_std_no_resolve(struct diff_options *); |
| 110 | |
| 111 | #define COMMON_DIFF_OPTIONS_HELP \ |
| 112 | "\ncommon diff options:\n" \ |
| 113 | " -z output diff-raw with lines terminated with NUL.\n" \ |
| 114 | " -p output patch format.\n" \ |
| 115 | " -u synonym for -p.\n" \ |
| 116 | " --name-only show only names of changed files.\n" \ |
| 117 | " --name-status show names and status of changed files.\n" \ |
| 118 | " --full-index show full object name on index lines.\n" \ |
| 119 | " --abbrev=<n> abbreviate object names in diff-tree header and diff-raw.\n" \ |
| 120 | " -R swap input file pairs.\n" \ |
| 121 | " -B detect complete rewrites.\n" \ |
| 122 | " -M detect renames.\n" \ |
| 123 | " -C detect copies.\n" \ |
| 124 | " --find-copies-harder\n" \ |
| 125 | " try unchanged files as candidate for copy detection.\n" \ |
| 126 | " -l<n> limit rename attempts up to <n> paths.\n" \ |
| 127 | " -O<file> reorder diffs according to the <file>.\n" \ |
| 128 | " -S<string> find filepair whose only one side contains the string.\n" \ |
| 129 | " --pickaxe-all\n" \ |
| 130 | " show all files diff when -S is used and hit is found.\n" |
| 131 | |
| 132 | extern int diff_queue_is_empty(void); |
| 133 | |
| 134 | #define DIFF_FORMAT_RAW 1 |
| 135 | #define DIFF_FORMAT_PATCH 2 |
| 136 | #define DIFF_FORMAT_NO_OUTPUT 3 |
| 137 | #define DIFF_FORMAT_NAME 4 |
| 138 | #define DIFF_FORMAT_NAME_STATUS 5 |
| 139 | |
| 140 | extern void diff_flush(struct diff_options*); |
| 141 | |
| 142 | /* diff-raw status letters */ |
| 143 | #define DIFF_STATUS_ADDED 'A' |
| 144 | #define DIFF_STATUS_COPIED 'C' |
| 145 | #define DIFF_STATUS_DELETED 'D' |
| 146 | #define DIFF_STATUS_MODIFIED 'M' |
| 147 | #define DIFF_STATUS_RENAMED 'R' |
| 148 | #define DIFF_STATUS_TYPE_CHANGED 'T' |
| 149 | #define DIFF_STATUS_UNKNOWN 'X' |
| 150 | #define DIFF_STATUS_UNMERGED 'U' |
| 151 | |
| 152 | /* these are not diff-raw status letters proper, but used by |
| 153 | * diffcore-filter insn to specify additional restrictions. |
| 154 | */ |
| 155 | #define DIFF_STATUS_FILTER_AON '*' |
| 156 | #define DIFF_STATUS_FILTER_BROKEN 'B' |
| 157 | |
| 158 | extern const char *diff_unique_abbrev(const unsigned char *, int); |
| 159 | |
| 160 | #endif /* DIFF_H */ |