@@ -69,16 +69,23 @@
69 69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The difference is the set of edits needed to transform pFile1 into
70 70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zFile2. The content of pFile1 is in memory. zFile2 exists on disk.
71 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Use the internal diff logic if zDiffCmd is NULL. Otherwise call the
73 73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** command zDiffCmd to do the diffing.
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When using an external diff program, zBinGlob contains the GLOB patterns
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for file names to treat as binary. If fIncludeBinary is zero, these files
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be skipped in addition to files that may contain binary content.
74 78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void diff_file(
76 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pFile1, /* In memory content to compare from */
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isBin1, /* Does the 'from' content appear to be binary */
77 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFile2, /* On disk content to compare to */
78 83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName, /* Display name of the file */
79 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDiffCmd, /* Command for comparison */
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zBinGlob, /* Treat file names matching this as binary */
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fIncludeBinary, /* Include binary files for external diff */
80 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags /* Flags to control the diff */
81 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
82 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zDiffCmd==0 ){
83 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob out; /* Diff output text */
84 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob file2; /* Content of zFile2 */
@@ -116,10 +123,41 @@
116 123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&file2);
117 124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
118 125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cnt = 0;
119 126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob nameFile1; /* Name of temporary file to old pFile1 content */
120 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob cmd; /* Text of command to run */
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !fIncludeBinary ){
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob file2;
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isBin1 ){
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(DIFF_CANNOT_COMPUTE_BINARY);
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zBinGlob ){
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Glob *pBinary = glob_create(zBinGlob);
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( glob_match(pBinary, zName) ){
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(DIFF_CANNOT_COMPUTE_BINARY);
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ glob_free(pBinary);
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ glob_free(pBinary);
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_zero(&file2);
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( file_wd_size(zFile2)>=0 ){
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( file_wd_islink(zFile2) ){
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_read_link(&file2, zFile2);
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_read_from_file(&file2, zFile2);
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( looks_like_binary(blob_str(&file2), blob_size(&file2)) ){
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(DIFF_CANNOT_COMPUTE_BINARY);
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&file2);
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&file2);
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
121 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
122 160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Construct a temporary file to hold pFile1 based on the name of
123 161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zFile2 */
124 162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&nameFile1);
125 163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{
@@ -151,16 +189,24 @@
151 189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The difference is the set of edits needed to transform pFile1 into
152 190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pFile2.
153 191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
154 192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Use the internal diff logic if zDiffCmd is NULL. Otherwise call the
155 193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** command zDiffCmd to do the diffing.
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When using an external diff program, zBinGlob contains the GLOB patterns
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for file names to treat as binary. If fIncludeBinary is zero, these files
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be skipped in addition to files that may contain binary content.
156 198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
157 199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void diff_file_mem(
158 200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pFile1, /* In memory content to compare from */
159 201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pFile2, /* In memory content to compare to */
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isBin1, /* Does the 'from' content appear to be binary */
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isBin2, /* Does the 'to' content appear to be binary */
160 204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName, /* Display name of the file */
161 205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDiffCmd, /* Command for comparison */
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zBinGlob, /* Treat file names matching this as binary */
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fIncludeBinary, /* Include binary files for external diff */
162 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags /* Diff flags */
163 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
164 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( diffFlags & DIFF_BRIEF ) return;
165 211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zDiffCmd==0 ){
166 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob out; /* Diff output text */
@@ -174,10 +220,26 @@
174 220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&out);
175 221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
176 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob cmd;
177 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zTemp1[300];
178 224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zTemp2[300];
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !fIncludeBinary ){
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isBin1 || isBin2 ){
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(DIFF_CANNOT_COMPUTE_BINARY);
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zBinGlob ){
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Glob *pBinary = glob_create(zBinGlob);
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( glob_match(pBinary, zName) ){
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(DIFF_CANNOT_COMPUTE_BINARY);
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ glob_free(pBinary);
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ glob_free(pBinary);
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
179 241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
180 242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Construct a temporary file names */
181 243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_tempname(sizeof(zTemp1), zTemp1);
182 244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_tempname(sizeof(zTemp2), zTemp2);
183 245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_write_to_file(pFile1, zTemp1);
@@ -201,40 +263,60 @@
201 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
202 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
203 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
204 266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Do a diff against a single file named in zFileTreeName from version zFrom
205 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** against the same file on disk.
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use the internal diff logic if zDiffCmd is NULL. Otherwise call the
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** command zDiffCmd to do the diffing.
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When using an external diff program, zBinGlob contains the GLOB patterns
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for file names to treat as binary. If fIncludeBinary is zero, these files
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be skipped in addition to files that may contain binary content.
206 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
207 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void diff_one_against_disk(
208 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFrom, /* Name of file */
209 278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDiffCmd, /* Use this "diff" command */
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zBinGlob, /* Treat file names matching this as binary */
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fIncludeBinary, /* Include binary files for external diff */
210 281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags, /* Diff control flags */
211 282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFileTreeName
212 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
213 284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob fname;
214 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob content;
215 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isLink;
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isBin;
216 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_tree_name(zFileTreeName, &fname, 1);
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- historical_version_of_file(zFrom, blob_str(&fname), &content, &isLink, 0, 0);
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ historical_version_of_file(zFrom, blob_str(&fname), &content, &isLink, 0,
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fIncludeBinary ? 0 : &isBin, 0);
218 291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !isLink != !file_wd_islink(zFrom) ){
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("cannot compute difference between "
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "symlink and regular file\n");
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(DIFF_CANNOT_COMPUTE_SYMLINK);
221 293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_file(&content, zFileTreeName, zFileTreeName, zDiffCmd, diffFlags);
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_file(&content, isBin, zFileTreeName, zFileTreeName,
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDiffCmd, zBinGlob, fIncludeBinary, diffFlags);
223 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
224 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&content);
225 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&fname);
226 299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
227 300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
228 301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
229 302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Run a diff between the version zFrom and files on disk. zFrom might
230 303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be NULL which means to simply show the difference between the edited
231 304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** files on disk and the check-out on which they are based.
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use the internal diff logic if zDiffCmd is NULL. Otherwise call the
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** command zDiffCmd to do the diffing.
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When using an external diff program, zBinGlob contains the GLOB patterns
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for file names to treat as binary. If fIncludeBinary is zero, these files
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be skipped in addition to files that may contain binary content.
232 312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
233 313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void diff_all_against_disk(
234 314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFrom, /* Version to difference from */
235 315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDiffCmd, /* Use this diff command. NULL for built-in */
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zBinGlob, /* Treat file names matching this as binary */
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fIncludeBinary, /* Treat file names matching this as binary */
236 318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags /* Flags controlling diff output */
237 319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
238 320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int vid;
239 321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob sql;
240 322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
@@ -307,24 +389,27 @@
307 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
srcid = 0;
308 390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !asNewFile ){ showDiff = 0; }
309 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
310 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( showDiff ){
311 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob content;
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isBin;
312 395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !isLink != !file_wd_islink(zFullName) ){
313 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_print_index(zPathname, diffFlags);
314 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_print_filenames(zPathname, zPathname, diffFlags);
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("cannot compute difference between "
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "symlink and regular file\n");
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(DIFF_CANNOT_COMPUTE_SYMLINK);
317 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
318 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
319 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( srcid>0 ){
320 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
content_get(srcid, &content);
321 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
322 404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&content);
323 405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isBin = fIncludeBinary ? 0 : looks_like_binary(blob_str(&content),
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_size(&content));
324 408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_print_index(zPathname, diffFlags);
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_file(&content, zFullName, zPathname, zDiffCmd, diffFlags);
409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_file(&content, isBin, zFullName, zPathname, zDiffCmd,
410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zBinGlob, fIncludeBinary, diffFlags);
326 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&content);
327 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
328 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zToFree);
329 414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
330 415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
@@ -332,50 +417,72 @@
332 417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
333 418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
334 419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
335 420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Output the differences between two versions of a single file.
336 421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zFrom and zTo are the check-ins containing the two file versions.
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use the internal diff logic if zDiffCmd is NULL. Otherwise call the
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** command zDiffCmd to do the diffing.
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When using an external diff program, zBinGlob contains the GLOB patterns
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for file names to treat as binary. If fIncludeBinary is zero, these files
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be skipped in addition to files that may contain binary content.
337 429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
338 430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void diff_one_two_versions(
339 431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFrom,
340 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTo,
341 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDiffCmd,
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zBinGlob,
435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fIncludeBinary,
342 436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags,
343 437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFileTreeName
344 438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
345 439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zName;
346 440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob fname;
347 441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob v1, v2;
348 442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isLink1, isLink2;
443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isBin1, isBin2;
349 444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( diffFlags & DIFF_BRIEF ) return;
350 445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_tree_name(zFileTreeName, &fname, 1);
351 446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName = blob_str(&fname);
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- historical_version_of_file(zFrom, zName, &v1, &isLink1, 0, 0);
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- historical_version_of_file(zTo, zName, &v2, &isLink2, 0, 0);
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ historical_version_of_file(zFrom, zName, &v1, &isLink1, 0,
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fIncludeBinary ? 0 : &isBin1, 0);
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ historical_version_of_file(zTo, zName, &v2, &isLink2, 0,
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fIncludeBinary ? 0 : &isBin2, 0);
354 451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isLink1 != isLink2 ){
355 452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_print_filenames(zName, zName, diffFlags);
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_print("cannot compute difference "
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " between symlink and regular file\n");
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_print(DIFF_CANNOT_COMPUTE_SYMLINK);
358 454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_file_mem(&v1, &v2, zName, zDiffCmd, diffFlags);
455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_file_mem(&v1, &v2, isBin1, isBin2, zName, zDiffCmd,
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zBinGlob, fIncludeBinary, diffFlags);
360 457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
361 458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&v1);
362 459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&v2);
363 460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&fname);
364 461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
365 462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
366 463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
367 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Show the difference between two files identified by ManifestFile
368 465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** entries.
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use the internal diff logic if zDiffCmd is NULL. Otherwise call the
468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** command zDiffCmd to do the diffing.
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When using an external diff program, zBinGlob contains the GLOB patterns
471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for file names to treat as binary. If fIncludeBinary is zero, these files
472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be skipped in addition to files that may contain binary content.
369 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
370 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void diff_manifest_entry(
371 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct ManifestFile *pFrom,
372 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct ManifestFile *pTo,
373 477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDiffCmd,
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zBinGlob,
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fIncludeBinary,
374 480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags
375 481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
376 482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob f1, f2;
483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isBin1, isBin2;
377 484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid;
378 485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = pFrom ? pFrom->zName : pTo->zName;
379 486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( diffFlags & DIFF_BRIEF ) return;
380 487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_print_index(zName, diffFlags);
381 488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFrom ){
@@ -388,22 +495,36 @@
388 495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = uuid_to_rid(pTo->zUuid, 0);
389 496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
content_get(rid, &f2);
390 497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
391 498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&f2);
392 499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_file_mem(&f1, &f2, zName, zDiffCmd, diffFlags);
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isBin1 = fIncludeBinary ? 0 : looks_like_binary(blob_str(&f1),
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_size(&f1));
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isBin2 = fIncludeBinary ? 0 : looks_like_binary(blob_str(&f2),
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_size(&f2));
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_file_mem(&f1, &f2, isBin1, isBin2, zName, zDiffCmd,
505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zBinGlob, fIncludeBinary, diffFlags);
394 506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&f1);
395 507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&f2);
396 508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
397 509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
398 510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
399 511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Output the differences between two check-ins.
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use the internal diff logic if zDiffCmd is NULL. Otherwise call the
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** command zDiffCmd to do the diffing.
515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When using an external diff program, zBinGlob contains the GLOB patterns
517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for file names to treat as binary. If fIncludeBinary is zero, these files
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be skipped in addition to files that may contain binary content.
400 519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
401 520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void diff_all_two_versions(
402 521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFrom,
403 522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTo,
404 523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDiffCmd,
524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zBinGlob,
525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fIncludeBinary,
405 526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags
406 527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
407 528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Manifest *pFrom, *pTo;
408 529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ManifestFile *pFromFile, *pToFile;
409 530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int asNewFlag = (diffFlags & DIFF_NEWFILE)!=0 ? 1 : 0;
@@ -425,17 +546,19 @@
425 546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cmp = fossil_strcmp(pFromFile->zName, pToFile->zName);
426 547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
427 548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cmp<0 ){
428 549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("DELETED %s\n", pFromFile->zName);
429 550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( asNewFlag ){
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_manifest_entry(pFromFile, 0, zDiffCmd, diffFlags);
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_manifest_entry(pFromFile, 0, zDiffCmd, zBinGlob,
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fIncludeBinary, diffFlags);
431 553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
432 554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFromFile = manifest_file_next(pFrom,0);
433 555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( cmp>0 ){
434 556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("ADDED %s\n", pToFile->zName);
435 557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( asNewFlag ){
436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_manifest_entry(0, pToFile, zDiffCmd, diffFlags);
558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_manifest_entry(0, pToFile, zDiffCmd, zBinGlob,
559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fIncludeBinary, diffFlags);
437 560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
438 561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pToFile = manifest_file_next(pTo,0);
439 562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( fossil_strcmp(pFromFile->zUuid, pToFile->zUuid)==0 ){
440 563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* No changes */
441 564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFromFile = manifest_file_next(pFrom,0);
@@ -442,11 +565,12 @@
442 565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pToFile = manifest_file_next(pTo,0);
443 566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
444 567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( diffFlags & DIFF_BRIEF ){
445 568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("CHANGED %s\n", pFromFile->zName);
446 569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_manifest_entry(pFromFile, pToFile, zDiffCmd, diffFlags);
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_manifest_entry(pFromFile, pToFile, zDiffCmd, zBinGlob,
571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fIncludeBinary, diffFlags);
448 572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
449 573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFromFile = manifest_file_next(pFrom,0);
450 574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pToFile = manifest_file_next(pTo,0);
451 575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
452 576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -544,10 +668,34 @@
544 668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTempFile = write_blob_to_temp_file(&script);
545 669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCmd = mprintf("tclsh \"%s\"", zTempFile);
546 670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_system(zCmd);
547 671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
file_delete(zTempFile);
548 672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Returns non-zero if files that may be binary should be used with external
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** diff programs.
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int diff_include_binary_files(void){
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( is_truth(find_option("diff-binary", 0, 1)) ){
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db_get_boolean("diff-binary", 1) ){
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Returns the GLOB pattern for file names that should be treated as binary
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the diff subsystem, if any.
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *diff_get_binary_glob(void){
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zBinGlob = find_option("binary", 0, 1);
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zBinGlob==0 ) zBinGlob = db_get("binary-glob",0);
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return zBinGlob;
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
549 697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
550 698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
551 699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: diff
552 700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: gdiff
553 701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -573,10 +721,17 @@
573 721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the "-i" option is a no-op. The "-i" option converts "gdiff" into "diff".
574 722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
575 723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The "-N" or "--new-file" option causes the complete text of added or
576 724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** deleted files to be displayed.
577 725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The "--diff-binary" option enables or disables the inclusion of binary files
727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** when using an external diff program.
728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The "--binary" option causes files matching the glob PATTERN to be treated
730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as binary when considering if they should be used with external diff program.
731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This option overrides the "binary-glob" setting.
732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
578 733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Options:
579 734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --branch BRANCH Show diff of all changes on BRANCH
580 735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --brief Show filenames only
581 736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --context|-c N Use N lines of context
582 737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --from|-r VERSION select VERSION as source for the diff
@@ -585,19 +740,23 @@
585 740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --tk Launch a Tcl/Tk GUI for display
586 741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --to VERSION select VERSION as target for the diff
587 742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --side-by-side|-y side-by-side diff
588 743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --unified unified diff
589 744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --width|-W N Width of lines in side-by-side diff
745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --diff-binary BOOL Include binary files when using external commands
746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --binary PATTERN Treat files that match the glob PATTERN as binary
590 747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
591 748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void diff_cmd(void){
592 749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isGDiff; /* True for gdiff. False for normal diff */
593 750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isInternDiff; /* True for internal diff */
594 751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int hasNFlag; /* True if -N or --new-file flag is used */
595 752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFrom; /* Source version number */
596 753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTo; /* Target version number */
597 754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zBranch; /* Branch to diff */
598 755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDiffCmd = 0; /* External diff command. NULL for internal diff */
756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zBinGlob = 0; /* Treat file names matching this as binary */
757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fIncludeBinary = 0; /* Include binary files for external diff */
599 758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 diffFlags = 0; /* Flags to control the DIFF */
600 759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int f;
601 760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
602 761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("tk",0,0)!=0 ){
603 762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
diff_tk();
@@ -623,31 +782,45 @@
623 782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_must_be_within_tree();
624 783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
verify_all_options();
625 784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !isInternDiff ){
626 785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDiffCmd = diff_command_external(isGDiff);
627 786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zDiffCmd ){
788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_open_config(0);
789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zBinGlob = diff_get_binary_glob();
790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fIncludeBinary = diff_include_binary_files();
791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
628 792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc>=3 ){
629 793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(f=2; f<g.argc; ++f){
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_one_against_disk(zFrom, zDiffCmd, diffFlags, g.argv[f]);
794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_one_against_disk(zFrom, zDiffCmd, zBinGlob, fIncludeBinary,
795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diffFlags, g.argv[f]);
631 796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
632 797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_all_against_disk(zFrom, zDiffCmd, diffFlags);
798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_all_against_disk(zFrom, zDiffCmd, zBinGlob, fIncludeBinary,
799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diffFlags);
634 800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
635 801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( zFrom==0 ){
636 802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("must use --from if --to is present");
637 803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
638 804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_find_and_open_repository(0, 0);
639 805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
verify_all_options();
640 806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !isInternDiff ){
641 807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDiffCmd = diff_command_external(isGDiff);
642 808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zDiffCmd ){
810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_open_config(0);
811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zBinGlob = diff_get_binary_glob();
812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fIncludeBinary = diff_include_binary_files();
813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
643 814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc>=3 ){
644 815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(f=2; f<g.argc; ++f){
645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_one_two_versions(zFrom, zTo, zDiffCmd, diffFlags, g.argv[f]);
816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_one_two_versions(zFrom, zTo, zDiffCmd, zBinGlob, fIncludeBinary,
817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diffFlags, g.argv[f]);
646 818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
647 819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_all_two_versions(zFrom, zTo, zDiffCmd, diffFlags);
820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_all_two_versions(zFrom, zTo, zDiffCmd, zBinGlob, fIncludeBinary,
821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diffFlags);
649 822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
650 823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
651 824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
652 825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
653 826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -660,7 +833,7 @@
660 833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_check_credentials();
661 834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.perm.Read ){ login_needed(); return; }
662 835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zFrom==0 || zTo==0 ) fossil_redirect_home();
663 836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
664 837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_set_content_type("text/plain");
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- diff_all_two_versions(zFrom, zTo, 0, DIFF_NEWFILE);
838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ diff_all_two_versions(zFrom, zTo, 0, 0, 0, DIFF_NEWFILE);
666 839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
667 840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!