Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Make sure diff output is flushed to screen in a timely manner. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
dc96d73dd06ef75e8e18b168080cdd84 |
User & Date: | drh 2012-02-04 14:58:29 |
Context
2012-02-04
| ||
21:09 | Merge the retro-sbsdiff changes into trunk. ... (check-in: 72c0183ac8 user: drh tags: trunk) | |
15:02 | Merge recent trunk changes into the retro-sbsdiff branch. ... (check-in: 066adeedfe user: drh tags: retro-sbsdiff) | |
14:58 | Make sure diff output is flushed to screen in a timely manner. ... (check-in: dc96d73dd0 user: drh tags: trunk) | |
14:48 | User-contributed patch to the debian/makedeb.sh script for generating a debian package for Fossil. ... (check-in: 7b1fd597b4 user: drh tags: trunk) | |
Changes
Changes to src/diffcmd.c.
︙ | ︙ | |||
17 18 19 20 21 22 23 | ** ** This file contains code used to implement the "diff" command */ #include "config.h" #include "diffcmd.h" #include <assert.h> | < < < < < < < < < < < < < < < | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | ** ** This file contains code used to implement the "diff" command */ #include "config.h" #include "diffcmd.h" #include <assert.h> /* ** Print the "Index:" message that patches wants to see at the top of a diff. */ void diff_print_index(const char *zFile, int diffFlags){ if( (diffFlags & DIFF_SIDEBYSIDE)==0 ){ char *z = mprintf("Index: %s\n%.66c\n", zFile, '='); fossil_print("%s", z); fossil_free(z); } } /* ** Print the +++/--- filename lines for a diff operation. */ void diff_print_filenames(const char *zLeft, const char *zRight, int diffFlags){ char *z = 0; if( diffFlags & DIFF_SIDEBYSIDE ){ int w = diff_width(diffFlags); int n1 = strlen(zLeft); int x; if( n1>w*2 ) n1 = w*2; x = w*2+17 - (n1+2); z = mprintf("%.*c %.*s %.*c\n", x/2, '=', n1, zLeft, (x+1)/2, '='); }else{ z = mprintf("--- %s\n+++ %s\n", zLeft, zRight); } fossil_print("%s", z); fossil_free(z); } /* ** Show the difference between two files, one in memory and one on disk. ** ** The difference is the set of edits needed to transform pFile1 into |
︙ | ︙ | |||
102 103 104 105 106 107 108 | } /* Compute and output the differences */ blob_zero(&out); text_diff(pFile1, &file2, &out, diffFlags); if( blob_size(&out) ){ diff_print_filenames(zName, zName2, diffFlags); | | | 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | } /* Compute and output the differences */ blob_zero(&out); text_diff(pFile1, &file2, &out, diffFlags); if( blob_size(&out) ){ diff_print_filenames(zName, zName2, diffFlags); fossil_print("%s\n", blob_str(&out)); } /* Release memory resources */ blob_reset(&file2); blob_reset(&out); }else{ int cnt = 0; |
︙ | ︙ | |||
161 162 163 164 165 166 167 | ){ if( zDiffCmd==0 ){ Blob out; /* Diff output text */ blob_zero(&out); text_diff(pFile1, pFile2, &out, diffFlags); diff_print_filenames(zName, zName, diffFlags); | | | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | ){ if( zDiffCmd==0 ){ Blob out; /* Diff output text */ blob_zero(&out); text_diff(pFile1, pFile2, &out, diffFlags); diff_print_filenames(zName, zName, diffFlags); fossil_print("%s\n", blob_str(&out)); /* Release memory resources */ blob_reset(&out); }else{ Blob cmd; char zTemp1[300]; char zTemp2[300]; |
︙ | ︙ | |||
209 210 211 212 213 214 215 | ){ Blob fname; Blob content; int isLink; file_tree_name(zFileTreeName, &fname, 1); historical_version_of_file(zFrom, blob_str(&fname), &content, &isLink, 0, 0); if( !isLink != !file_wd_islink(zFrom) ){ | | > | 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | ){ Blob fname; Blob content; int isLink; file_tree_name(zFileTreeName, &fname, 1); historical_version_of_file(zFrom, blob_str(&fname), &content, &isLink, 0, 0); if( !isLink != !file_wd_islink(zFrom) ){ fossil_print("cannot compute difference between " "symlink and regular file\n"); }else{ diff_file(&content, zFileTreeName, zFileTreeName, zDiffCmd, diffFlags); } blob_reset(&content); blob_reset(&fname); } |
︙ | ︙ | |||
285 286 287 288 289 290 291 | int isNew = db_column_int(&q,3); int srcid = db_column_int(&q, 4); int isLink = db_column_int(&q, 5); char *zFullName = mprintf("%s%s", g.zLocalRoot, zPathname); char *zToFree = zFullName; int showDiff = 1; if( isDeleted ){ | | | | | | > | 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 | int isNew = db_column_int(&q,3); int srcid = db_column_int(&q, 4); int isLink = db_column_int(&q, 5); char *zFullName = mprintf("%s%s", g.zLocalRoot, zPathname); char *zToFree = zFullName; int showDiff = 1; if( isDeleted ){ fossil_print("DELETED %s\n", zPathname); if( !asNewFile ){ showDiff = 0; zFullName = "/dev/null"; } }else if( file_access(zFullName, 0) ){ fossil_print("MISSING %s\n", zPathname); if( !asNewFile ){ showDiff = 0; } }else if( isNew ){ fossil_print("ADDED %s\n", zPathname); srcid = 0; if( !asNewFile ){ showDiff = 0; } }else if( isChnged==3 ){ fossil_print("ADDED_BY_MERGE %s\n", zPathname); srcid = 0; if( !asNewFile ){ showDiff = 0; } } if( showDiff ){ Blob content; if( !isLink != !file_wd_islink(zFullName) ){ diff_print_index(zPathname, diffFlags); diff_print_filenames(zPathname, zPathname, diffFlags); fossil_print("cannot compute difference between " "symlink and regular file\n"); continue; } if( srcid>0 ){ content_get(srcid, &content); }else{ blob_zero(&content); } |
︙ | ︙ | |||
343 344 345 346 347 348 349 | int isLink1, isLink2; file_tree_name(zFileTreeName, &fname, 1); zName = blob_str(&fname); historical_version_of_file(zFrom, zName, &v1, &isLink1, 0, 0); historical_version_of_file(zTo, zName, &v2, &isLink2, 0, 0); if( isLink1 != isLink2 ){ diff_print_filenames(zName, zName, diffFlags); | > | | 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | int isLink1, isLink2; file_tree_name(zFileTreeName, &fname, 1); zName = blob_str(&fname); historical_version_of_file(zFrom, zName, &v1, &isLink1, 0, 0); historical_version_of_file(zTo, zName, &v2, &isLink2, 0, 0); if( isLink1 != isLink2 ){ diff_print_filenames(zName, zName, diffFlags); fossil_print("cannot compute difference " " between symlink and regular file\n"); }else{ diff_file_mem(&v1, &v2, zName, zDiffCmd, diffFlags); } blob_reset(&v1); blob_reset(&v2); blob_reset(&fname); } |
︙ | ︙ | |||
413 414 415 416 417 418 419 | cmp = +1; }else if( pToFile==0 ){ cmp = -1; }else{ cmp = fossil_strcmp(pFromFile->zName, pToFile->zName); } if( cmp<0 ){ | | | | | 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 | cmp = +1; }else if( pToFile==0 ){ cmp = -1; }else{ cmp = fossil_strcmp(pFromFile->zName, pToFile->zName); } if( cmp<0 ){ fossil_print("DELETED %s\n", pFromFile->zName); if( asNewFlag ){ diff_manifest_entry(pFromFile, 0, zDiffCmd, diffFlags); } pFromFile = manifest_file_next(pFrom,0); }else if( cmp>0 ){ fossil_print("ADDED %s\n", pToFile->zName); if( asNewFlag ){ diff_manifest_entry(0, pToFile, zDiffCmd, diffFlags); } pToFile = manifest_file_next(pTo,0); }else if( fossil_strcmp(pFromFile->zUuid, pToFile->zUuid)==0 ){ /* No changes */ pFromFile = manifest_file_next(pFrom,0); pToFile = manifest_file_next(pTo,0); }else{ /* fossil_print("CHANGED %s\n", pFromFile->zName); */ diff_manifest_entry(pFromFile, pToFile, zDiffCmd, diffFlags); pFromFile = manifest_file_next(pFrom,0); pToFile = manifest_file_next(pTo,0); } } manifest_destroy(pFrom); manifest_destroy(pTo); |
︙ | ︙ |
Changes to src/printf.c.
︙ | ︙ | |||
820 821 822 823 824 825 826 827 828 829 830 831 832 833 | assert( toStdErr==0 || toStdErr==1 ); if( istty[toStdErr] ) z = zToFree = fossil_utf8_to_console(z); fwrite(z, 1, strlen(z), toStdErr ? stderr : stdout); free(zToFree); #else fwrite(z, 1, strlen(z), toStdErr ? stderr : stdout); #endif } /* ** Write output for user consumption. If g.cgiOutput is enabled, then ** send the output as part of the CGI reply. If g.cgiOutput is false, ** then write on standard output. */ | > | 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 | assert( toStdErr==0 || toStdErr==1 ); if( istty[toStdErr] ) z = zToFree = fossil_utf8_to_console(z); fwrite(z, 1, strlen(z), toStdErr ? stderr : stdout); free(zToFree); #else fwrite(z, 1, strlen(z), toStdErr ? stderr : stdout); #endif fflush(toStdErr ? stderr : stdout); } /* ** Write output for user consumption. If g.cgiOutput is enabled, then ** send the output as part of the CGI reply. If g.cgiOutput is false, ** then write on standard output. */ |
︙ | ︙ |