Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Take advantage of the new pBlob==NULL capabilities in blob_appendf() to simplify some of the diff logic. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
590e01dbddd07fa8280e0acdb5930927 |
User & Date: | drh 2021-09-07 13:29:17 |
Context
2021-09-07
| ||
16:06 | Further simplification of the DiffConfig object by splitting out the lines of context and column width values from the diffFlags vector into separate columns. There should be no user-visible changes in behavior. ... (check-in: ca6fa4b2 user: drh tags: trunk) | |
13:29 | Take advantage of the new pBlob==NULL capabilities in blob_appendf() to simplify some of the diff logic. ... (check-in: 590e01db user: drh tags: trunk) | |
12:51 | Enhance the blob_append(), blob_appendf(), blob_append_char(), and similar interfaces such that if the Blob pointer in the first argument is NULL, the result is written directly to stdout. ... (check-in: 3a561322 user: drh tags: trunk) | |
Changes
Changes to src/diffcmd.c.
︙ | ︙ | |||
111 112 113 114 115 116 117 | } return 0; } /* ** Print the "Index:" message that patches wants to see at the top of a diff. */ | | | < < < < < < | < | < | | < < < < < < < < | < < < < < | | | | | | < < < < < < | 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | } return 0; } /* ** Print the "Index:" message that patches wants to see at the top of a diff. */ void diff_print_index(const char *zFile, DiffConfig *pCfg, Blob *pOut){ if( (pCfg->diffFlags & (DIFF_SIDEBYSIDE|DIFF_BRIEF|DIFF_NUMSTAT|DIFF_JSON| DIFF_WEBPAGE|DIFF_TCL))==0 ){ blob_appendf(pOut, "Index: %s\n%.66c\n", zFile, '='); } } /* ** Print the +++/--- filename lines or whatever filename information ** is appropriate for the output format. */ void diff_print_filenames( const char *zLeft, /* Name of the left file */ const char *zRight, /* Name of the right file */ DiffConfig *pCfg, /* Diff configuration */ Blob *pOut /* Write to this blob, or stdout of this is NULL */ ){ u64 diffFlags = pCfg->diffFlags; if( diffFlags & (DIFF_BRIEF|DIFF_RAW) ){ /* no-op */ }else if( diffFlags & DIFF_DEBUG ){ blob_appendf(pOut, "FILE-LEFT %s\nFILE-RIGHT %s\n", zLeft, zRight); }else if( diffFlags & DIFF_WEBPAGE ){ if( fossil_strcmp(zLeft,zRight)==0 ){ blob_appendf(pOut,"<h1>%h</h1>\n", zLeft); }else{ blob_appendf(pOut,"<h1>%h ⇆ %h</h1>\n", zLeft, zRight); } }else if( diffFlags & (DIFF_TCL|DIFF_JSON) ){ if( diffFlags & DIFF_TCL ){ blob_append(pOut, "FILE ", 5); blob_append_tcl_literal(pOut, zLeft, (int)strlen(zLeft)); blob_append_char(pOut, ' '); blob_append_tcl_literal(pOut, zRight, (int)strlen(zRight)); blob_append_char(pOut, '\n'); }else{ if( pOut ) blob_trim(pOut); blob_append(pOut, (pCfg->nFile==0 ? "[{" : ",\n{"), -1); pCfg->nFile++; blob_append(pOut, "\n \"leftname\":", -1); blob_append_json_literal(pOut, zLeft, (int)strlen(zLeft)); blob_append(pOut, ",\n \"rightname\":", -1); blob_append_json_literal(pOut, zRight, (int)strlen(zRight)); blob_append(pOut, ",\n \"diff\":\n", -1); } }else if( diffFlags & DIFF_SIDEBYSIDE ){ int w = diff_width(pCfg); int n1 = strlen(zLeft); int n2 = strlen(zRight); int x; if( n1==n2 && fossil_strcmp(zLeft,zRight)==0 ){ if( n1>w*2 ) n1 = w*2; x = w*2+17 - (n1+2); blob_appendf(pOut, "%.*c %.*s %.*c\n", x/2, '=', n1, zLeft, (x+1)/2, '='); }else{ if( w<20 ) w = 20; if( n1>w-10 ) n1 = w - 10; if( n2>w-10 ) n2 = w - 10; blob_appendf(pOut, "%.*c %.*s %.*c versus %.*c %.*s %.*c\n", (w-n1+10)/2, '=', n1, zLeft, (w-n1+1)/2, '=', (w-n2)/2, '=', n2, zRight, (w-n2+1)/2, '='); } }else{ blob_appendf(pOut, "--- %s\n+++ %s\n", zLeft, zRight); } } /* ** Default header text for diff with --webpage */ static const char zWebpageHdr[] = |
︙ | ︙ | |||
403 404 405 406 407 408 409 | ** zFile2. The content of pFile1 is in memory. zFile2 exists on disk. */ void diff_file( Blob *pFile1, /* In memory content to compare from */ const char *zFile2, /* On disk content to compare to */ const char *zName, /* Display name of the file */ DiffConfig *pCfg, /* Flags to control the diff */ | | | 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 | ** zFile2. The content of pFile1 is in memory. zFile2 exists on disk. */ void diff_file( Blob *pFile1, /* In memory content to compare from */ const char *zFile2, /* On disk content to compare to */ const char *zName, /* Display name of the file */ DiffConfig *pCfg, /* Flags to control the diff */ Blob *pOut /* Blob to store diff output */ ){ if( pCfg->zDiffCmd==0 ){ Blob out; /* Diff output text */ Blob file2; /* Content of zFile2 */ const char *zName2; /* Name of zFile2 for display */ /* Read content of zFile2 into memory */ |
︙ | ︙ | |||
429 430 431 432 433 434 435 | fossil_print("CHANGED %s\n", zName); } }else{ blob_zero(&out); text_diff(pFile1, &file2, &out, pCfg); if( blob_size(&out) ){ if( pCfg->diffFlags & DIFF_NUMSTAT ){ | < | | < < < | < | < < < | 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 | fossil_print("CHANGED %s\n", zName); } }else{ blob_zero(&out); text_diff(pFile1, &file2, &out, pCfg); if( blob_size(&out) ){ if( pCfg->diffFlags & DIFF_NUMSTAT ){ blob_appendf(pOut, "%s %s\n", blob_str(&out), zName); }else{ diff_print_filenames(zName, zName2, pCfg, pOut); blob_appendf(pOut, "%s\n", blob_str(&out)); } } blob_reset(&out); } /* Release memory resources */ blob_reset(&file2); |
︙ | ︙ | |||
601 602 603 604 605 606 607 | ** for file names to treat as binary. If fIncludeBinary is zero, these files ** will be skipped in addition to files that may contain binary content. */ void diff_against_disk( const char *zFrom, /* Version to difference from */ DiffConfig *pCfg, /* Flags controlling diff output */ FileDirList *pFileDir, /* Which files to diff */ | | | 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 | ** for file names to treat as binary. If fIncludeBinary is zero, these files ** will be skipped in addition to files that may contain binary content. */ void diff_against_disk( const char *zFrom, /* Version to difference from */ DiffConfig *pCfg, /* Flags controlling diff output */ FileDirList *pFileDir, /* Which files to diff */ Blob *pOut /* Blob to output diff instead of stdout */ ){ int vid; Blob sql; Stmt q; int asNewFile; /* Treat non-existant files as empty files */ int isNumStat; /* True for --numstat */ |
︙ | ︙ | |||
705 706 707 708 709 710 711 | continue; } if( srcid>0 ){ content_get(srcid, &content); }else{ blob_zero(&content); } | | | | 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 | continue; } if( srcid>0 ){ content_get(srcid, &content); }else{ blob_zero(&content); } diff_print_index(zPathname, pCfg, pOut); diff_file(&content, zFullName, zPathname, pCfg, pOut); blob_reset(&content); } blob_reset(&fname); } db_finalize(&q); db_end_transaction(1); /* ROLLBACK */ } |
︙ | ︙ |