Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Expand the "diffFlags" variable to 64-bits in order to accommodate new options to the various "diff" commands. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
2b1767500e3cd9df1ba660809d1fe58f |
User & Date: | drh 2012-08-20 19:01:56.559 |
Context
2012-08-21
| ||
11:18 | In file included from /usr/x86_64-w64-mingw32/sys-root/mingw/include/ws2tcpip.h:11:0, from src/cgi.c:29: /usr/x86_64-w64-mingw32/sys-root/mingw/include/winsock2.h:15:2: warning: #warning Please include winsock2.h before windows.h src/file.c:47:0: warning: "stat" redefined /usr/x86_64-w64-mingw32/sys-root/mingw/include/sys/stat.h:258:0: note: this is the location of the previous definition In file included from /usr/x86_64-w64-mingw32/sys-root/mingw/include/ws2tcpip.h:11:0, from src/http_socket.c:35: /usr/x86_64-w64-mingw32/sys-root/mingw/include/winsock2.h:15:2: warning: #warning Please include winsock2.h before windows.h src/shell.c:67:0: warning: "popen" redefined /usr/x86_64-w64-mingw32/sys-root/mingw/include/stdio.h:503:0: note: this is the location of the previous definition src/shell.c:68:0: warning: "pclose" redefined /usr/x86_64-w64-mingw32/sys-root/mingw/include/stdio.h:504:0: note: this is the location of the previous definition ... (Closed-Leaf check-in: b5d69afe user: jan.nijtmans tags: jn-mingw-w64-compiler-warnings) | |
11:05 | Fix error messages associated with the "scrub" command. ... (check-in: e25f55dd user: drh tags: trunk) | |
2012-08-20
| ||
19:01 | Expand the "diffFlags" variable to 64-bits in order to accommodate new options to the various "diff" commands. ... (check-in: 2b176750 user: drh tags: trunk) | |
2012-08-19
| ||
09:45 | Added bash auto-completion script from Stuart Rackham. ... (check-in: 85f1856c user: stephan tags: trunk) | |
Changes
Changes to src/diff.c.
︙ | ︙ | |||
23 24 25 26 27 28 29 | #include <assert.h> #if INTERFACE /* ** Allowed flag parameters to the text_diff() and html_sbsdiff() funtions: */ | | | | | | | | | | > | | | 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 | #include <assert.h> #if INTERFACE /* ** Allowed flag parameters to the text_diff() and html_sbsdiff() funtions: */ #define DIFF_CONTEXT_MASK ((u64)0x0000ffff) /* Lines of context. Default if 0 */ #define DIFF_WIDTH_MASK ((u64)0x00ff0000) /* side-by-side column width */ #define DIFF_IGNORE_EOLWS ((u64)0x01000000) /* Ignore end-of-line whitespace */ #define DIFF_SIDEBYSIDE ((u64)0x02000000) /* Generate a side-by-side diff */ #define DIFF_NEWFILE ((u64)0x04000000) /* Missing shown as empty files */ #define DIFF_BRIEF ((u64)0x08000000) /* Show filenames only */ #define DIFF_INLINE ((u64)0x00000000) /* Inline (not side-by-side) diff */ #define DIFF_HTML ((u64)0x10000000) /* Render for HTML */ #define DIFF_LINENO ((u64)0x20000000) /* Show line numbers */ #define DIFF_WS_WARNING ((u64)0x40000000) /* Warn about whitespace */ #define DIFF_NOOPT (((u64)0x01)<<32) /* Suppress optimizations (debug) */ #define DIFF_INVERT (((u64)0x02)<<32) /* Invert the diff (debug) */ #endif /* INTERFACE */ /* ** Maximum length of a line in a text file. (8192) */ #define LENGTH_MASK_SZ 13 |
︙ | ︙ | |||
1425 1426 1427 1428 1429 1430 1431 | } } /* ** Extract the number of lines of context from diffFlags. Supply an ** appropriate default if no context width is specified. */ | | | | 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 | } } /* ** Extract the number of lines of context from diffFlags. Supply an ** appropriate default if no context width is specified. */ int diff_context_lines(u64 diffFlags){ int n = diffFlags & DIFF_CONTEXT_MASK; if( n==0 ) n = 5; return n; } /* ** Extract the width of columns for side-by-side diff. Supply an ** appropriate default if no width is given. */ int diff_width(u64 diffFlags){ int w = (diffFlags & DIFF_WIDTH_MASK)/(DIFF_CONTEXT_MASK+1); if( w==0 ) w = 80; return w; } /* ** Generate a report of the differences between files pA and pB. |
︙ | ︙ | |||
1459 1460 1461 1462 1463 1464 1465 | ** file is encountered, 0 is returned and pOut is written with ** text "cannot compute difference between binary files". */ int *text_diff( Blob *pA_Blob, /* FROM file */ Blob *pB_Blob, /* TO file */ Blob *pOut, /* Write diff here if not NULL */ | | | 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 | ** file is encountered, 0 is returned and pOut is written with ** text "cannot compute difference between binary files". */ int *text_diff( Blob *pA_Blob, /* FROM file */ Blob *pB_Blob, /* TO file */ Blob *pOut, /* Write diff here if not NULL */ u64 diffFlags /* DIFF_* flags defined above */ ){ int ignoreEolWs; /* Ignore whitespace at the end of lines */ int nContext; /* Amount of context to display */ DContext c; if( diffFlags & DIFF_INVERT ){ Blob *pTemp = pA_Blob; |
︙ | ︙ | |||
1530 1531 1532 1533 1534 1535 1536 | ** --invert Invert the diff DIFF_INVERT ** --linenum|-n Show line numbers DIFF_LINENO ** --noopt Disable optimization DIFF_NOOPT ** --side-by-side|-y Side-by-side diff. DIFF_SIDEBYSIDE ** --width|-W N N character lines. DIFF_WIDTH_MASK */ int diff_options(void){ | | | 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 | ** --invert Invert the diff DIFF_INVERT ** --linenum|-n Show line numbers DIFF_LINENO ** --noopt Disable optimization DIFF_NOOPT ** --side-by-side|-y Side-by-side diff. DIFF_SIDEBYSIDE ** --width|-W N N character lines. DIFF_WIDTH_MASK */ int diff_options(void){ u64 diffFlags = 0; const char *z; int f; if( find_option("side-by-side","y",0)!=0 ) diffFlags |= DIFF_SIDEBYSIDE; if( (z = find_option("context","c",1))!=0 && (f = atoi(z))>0 ){ if( f > DIFF_CONTEXT_MASK ) f = DIFF_CONTEXT_MASK; diffFlags |= f; } |
︙ | ︙ | |||
1559 1560 1561 1562 1563 1564 1565 | ** COMMAND: test-rawdiff */ void test_rawdiff_cmd(void){ Blob a, b; int r; int i; int *R; | | | 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 | ** COMMAND: test-rawdiff */ void test_rawdiff_cmd(void){ Blob a, b; int r; int i; int *R; u64 diffFlags = diff_options(); if( g.argc<4 ) usage("FILE1 FILE2 ..."); blob_read_from_file(&a, g.argv[2]); for(i=3; i<g.argc; i++){ if( i>3 ) fossil_print("-------------------------------\n"); blob_read_from_file(&b, g.argv[i]); R = text_diff(&a, &b, 0, diffFlags); for(r=0; R[r] || R[r+1] || R[r+2]; r += 3){ |
︙ | ︙ | |||
1581 1582 1583 1584 1585 1586 1587 | /* ** COMMAND: test-udiff ** ** Print the difference between two files. The usual diff options apply. */ void test_udiff_cmd(void){ Blob a, b, out; | | | 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 | /* ** COMMAND: test-udiff ** ** Print the difference between two files. The usual diff options apply. */ void test_udiff_cmd(void){ Blob a, b, out; u64 diffFlag = diff_options(); if( g.argc!=4 ) usage("FILE1 FILE2"); blob_read_from_file(&a, g.argv[2]); blob_read_from_file(&b, g.argv[3]); blob_zero(&out); text_diff(&a, &b, &out, diffFlag); blob_write_to_file(&out, "-"); |
︙ | ︙ |
Changes to src/diffcmd.c.
︙ | ︙ | |||
29 30 31 32 33 34 35 | #else # define NULL_DEVICE "/dev/null" #endif /* ** Print the "Index:" message that patches wants to see at the top of a diff. */ | | | | 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 | #else # define NULL_DEVICE "/dev/null" #endif /* ** Print the "Index:" message that patches wants to see at the top of a diff. */ void diff_print_index(const char *zFile, u64 diffFlags){ if( (diffFlags & (DIFF_SIDEBYSIDE|DIFF_BRIEF))==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, u64 diffFlags){ char *z = 0; if( diffFlags & DIFF_BRIEF ){ /* no-op */ }else if( diffFlags & DIFF_SIDEBYSIDE ){ int w = diff_width(diffFlags); int n1 = strlen(zLeft); int x; |
︙ | ︙ | |||
73 74 75 76 77 78 79 | ** command zDiffCmd to do the diffing. */ 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 */ const char *zDiffCmd, /* Command for comparison */ | | | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | ** command zDiffCmd to do the diffing. */ 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 */ const char *zDiffCmd, /* Command for comparison */ u64 diffFlags /* Flags to control the diff */ ){ if( 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 */ |
︙ | ︙ | |||
155 156 157 158 159 160 161 | ** command zDiffCmd to do the diffing. */ void diff_file_mem( Blob *pFile1, /* In memory content to compare from */ Blob *pFile2, /* In memory content to compare to */ const char *zName, /* Display name of the file */ const char *zDiffCmd, /* Command for comparison */ | | | 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | ** command zDiffCmd to do the diffing. */ void diff_file_mem( Blob *pFile1, /* In memory content to compare from */ Blob *pFile2, /* In memory content to compare to */ const char *zName, /* Display name of the file */ const char *zDiffCmd, /* Command for comparison */ u64 diffFlags /* Diff flags */ ){ if( diffFlags & DIFF_BRIEF ) return; if( zDiffCmd==0 ){ Blob out; /* Diff output text */ blob_zero(&out); text_diff(pFile1, pFile2, &out, diffFlags); |
︙ | ︙ | |||
203 204 205 206 207 208 209 | /* ** Do a diff against a single file named in zFileTreeName from version zFrom ** against the same file on disk. */ static void diff_one_against_disk( const char *zFrom, /* Name of file */ const char *zDiffCmd, /* Use this "diff" command */ | | | 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 | /* ** Do a diff against a single file named in zFileTreeName from version zFrom ** against the same file on disk. */ static void diff_one_against_disk( const char *zFrom, /* Name of file */ const char *zDiffCmd, /* Use this "diff" command */ u64 diffFlags, /* Diff control flags */ const char *zFileTreeName ){ Blob fname; Blob content; int isLink; file_tree_name(zFileTreeName, &fname, 1); historical_version_of_file(zFrom, blob_str(&fname), &content, &isLink, 0, 0); |
︙ | ︙ | |||
229 230 231 232 233 234 235 | ** Run a diff between the version zFrom and files on disk. zFrom might ** be NULL which means to simply show the difference between the edited ** files on disk and the check-out on which they are based. */ static void diff_all_against_disk( const char *zFrom, /* Version to difference from */ const char *zDiffCmd, /* Use this diff command. NULL for built-in */ | | | 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 | ** Run a diff between the version zFrom and files on disk. zFrom might ** be NULL which means to simply show the difference between the edited ** files on disk and the check-out on which they are based. */ static void diff_all_against_disk( const char *zFrom, /* Version to difference from */ const char *zDiffCmd, /* Use this diff command. NULL for built-in */ u64 diffFlags /* Flags controlling diff output */ ){ int vid; Blob sql; Stmt q; int asNewFile; /* Treat non-existant files as empty files */ asNewFile = (diffFlags & DIFF_NEWFILE)!=0; |
︙ | ︙ | |||
335 336 337 338 339 340 341 | ** Output the differences between two versions of a single file. ** zFrom and zTo are the check-ins containing the two file versions. */ static void diff_one_two_versions( const char *zFrom, const char *zTo, const char *zDiffCmd, | | | 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 | ** Output the differences between two versions of a single file. ** zFrom and zTo are the check-ins containing the two file versions. */ static void diff_one_two_versions( const char *zFrom, const char *zTo, const char *zDiffCmd, u64 diffFlags, const char *zFileTreeName ){ char *zName; Blob fname; Blob v1, v2; int isLink1, isLink2; if( diffFlags & DIFF_BRIEF ) return; |
︙ | ︙ | |||
367 368 369 370 371 372 373 | ** Show the difference between two files identified by ManifestFile ** entries. */ static void diff_manifest_entry( struct ManifestFile *pFrom, struct ManifestFile *pTo, const char *zDiffCmd, | | | 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 | ** Show the difference between two files identified by ManifestFile ** entries. */ static void diff_manifest_entry( struct ManifestFile *pFrom, struct ManifestFile *pTo, const char *zDiffCmd, u64 diffFlags ){ Blob f1, f2; int rid; const char *zName = pFrom ? pFrom->zName : pTo->zName; if( diffFlags & DIFF_BRIEF ) return; diff_print_index(zName, diffFlags); if( pFrom ){ |
︙ | ︙ | |||
398 399 400 401 402 403 404 | /* ** Output the differences between two check-ins. */ static void diff_all_two_versions( const char *zFrom, const char *zTo, const char *zDiffCmd, | | | 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 | /* ** Output the differences between two check-ins. */ static void diff_all_two_versions( const char *zFrom, const char *zTo, const char *zDiffCmd, u64 diffFlags ){ Manifest *pFrom, *pTo; ManifestFile *pFromFile, *pToFile; int asNewFlag = (diffFlags & DIFF_NEWFILE)!=0 ? 1 : 0; pFrom = manifest_get_by_name(zFrom, 0); manifest_file_rewind(pFrom); |
︙ | ︙ | |||
497 498 499 500 501 502 503 | int isGDiff; /* True for gdiff. False for normal diff */ int isInternDiff; /* True for internal diff */ int hasNFlag; /* True if -N or --new-file flag is used */ const char *zFrom; /* Source version number */ const char *zTo; /* Target version number */ const char *zBranch; /* Branch to diff */ const char *zDiffCmd = 0; /* External diff command. NULL for internal diff */ | | | 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 | int isGDiff; /* True for gdiff. False for normal diff */ int isInternDiff; /* True for internal diff */ int hasNFlag; /* True if -N or --new-file flag is used */ const char *zFrom; /* Source version number */ const char *zTo; /* Target version number */ const char *zBranch; /* Branch to diff */ const char *zDiffCmd = 0; /* External diff command. NULL for internal diff */ u64 diffFlags = 0; /* Flags to control the DIFF */ int f; isGDiff = g.argv[1][0]=='g'; isInternDiff = find_option("internal","i",0)!=0; zFrom = find_option("from", "r", 1); zTo = find_option("to", 0, 1); zBranch = find_option("branch", 0, 1); |
︙ | ︙ |
Changes to src/info.c.
︙ | ︙ | |||
287 288 289 290 291 292 293 | } } /* ** Append the difference between two RIDs to the output */ | | | 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 | } } /* ** Append the difference between two RIDs to the output */ static void append_diff(const char *zFrom, const char *zTo, u64 diffFlags){ int fromid; int toid; Blob from, to, out; if( zFrom ){ fromid = uuid_to_rid(zFrom, 0); content_get(fromid, &from); }else{ |
︙ | ︙ | |||
330 331 332 333 334 335 336 | ** to a file between two check-ins. */ static void append_file_change_line( const char *zName, /* Name of the file that has changed */ const char *zOld, /* blob.uuid before change. NULL for added files */ const char *zNew, /* blob.uuid after change. NULL for deletes */ const char *zOldName, /* Prior name. NULL if no name change. */ | | | 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | ** to a file between two check-ins. */ static void append_file_change_line( const char *zName, /* Name of the file that has changed */ const char *zOld, /* blob.uuid before change. NULL for added files */ const char *zNew, /* blob.uuid after change. NULL for deletes */ const char *zOldName, /* Prior name. NULL if no name change. */ u64 diffFlags, /* Flags for text_diff(). Zero to omit diffs */ int mperm /* executable or symlink permission for zNew */ ){ if( !g.perm.Hyperlink ){ if( zNew==0 ){ @ <p>Deleted %h(zName)</p> }else if( zOld==0 ){ @ <p>Added %h(zName)</p> |
︙ | ︙ | |||
388 389 390 391 392 393 394 | } } /* ** Construct an appropriate diffFlag for text_diff() based on query ** parameters and the to boolean arguments. */ | | | | 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 | } } /* ** Construct an appropriate diffFlag for text_diff() based on query ** parameters and the to boolean arguments. */ u64 construct_diff_flags(int showDiff, int sideBySide){ u64 diffFlags; if( showDiff==0 ){ diffFlags = 0; /* Zero means do not show any diff */ }else{ int x; if( sideBySide ){ diffFlags = DIFF_SIDEBYSIDE | DIFF_IGNORE_EOLWS; |
︙ | ︙ | |||
438 439 440 441 442 443 444 | */ void ci_page(void){ Stmt q; int rid; int isLeaf; int showDiff; /* True to show diffs */ int sideBySide; /* True for side-by-side diffs */ | | | 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 | */ void ci_page(void){ Stmt q; int rid; int isLeaf; int showDiff; /* True to show diffs */ int sideBySide; /* True for side-by-side diffs */ u64 diffFlags; /* Flag parameter for text_diff() */ const char *zName; /* Name of the checkin to be displayed */ const char *zUuid; /* UUID of zName */ const char *zParent; /* UUID of the parent checkin (if any) */ login_check_credentials(); if( !g.perm.Read ){ login_needed(); return; } zName = P("name"); |
︙ | ︙ | |||
820 821 822 823 824 825 826 | ** ** Show all differences between two checkins. */ void vdiff_page(void){ int ridFrom, ridTo; int showDetail = 0; int sideBySide = 0; | | | 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 | ** ** Show all differences between two checkins. */ void vdiff_page(void){ int ridFrom, ridTo; int showDetail = 0; int sideBySide = 0; u64 diffFlags = 0; Manifest *pFrom, *pTo; ManifestFile *pFileFrom, *pFileTo; const char *zBranch; login_check_credentials(); if( !g.perm.Read ){ login_needed(); return; } login_anonymous_available(); |
︙ | ︙ | |||
1124 1125 1126 1127 1128 1129 1130 | void diff_page(void){ int v1, v2; int isPatch; int sideBySide; Blob c1, c2, diff, *pOut; char *zV1; char *zV2; | | | 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 | void diff_page(void){ int v1, v2; int isPatch; int sideBySide; Blob c1, c2, diff, *pOut; char *zV1; char *zV2; u64 diffFlags; const char *zStyle = "sbsdiff"; login_check_credentials(); if( !g.perm.Read ){ login_needed(); return; } v1 = name_to_rid_www("v1"); v2 = name_to_rid_www("v2"); if( v1==0 || v2==0 ) fossil_redirect_home(); |
︙ | ︙ |
Changes to src/json_wiki.c.
︙ | ︙ | |||
492 493 494 495 496 497 498 | char const * zV2 = NULL; cson_object * pay = NULL; int argPos = g.json.dispatchDepth; int r1 = 0, r2 = 0; Manifest * pW1 = NULL, *pW2 = NULL; Blob w1 = empty_blob, w2 = empty_blob, d = empty_blob; char const * zErrTag = NULL; | | | 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 | char const * zV2 = NULL; cson_object * pay = NULL; int argPos = g.json.dispatchDepth; int r1 = 0, r2 = 0; Manifest * pW1 = NULL, *pW2 = NULL; Blob w1 = empty_blob, w2 = empty_blob, d = empty_blob; char const * zErrTag = NULL; u64 diffFlags; char * zUuid = NULL; if( !g.perm.Hyperlink ){ json_set_err(FSL_JSON_E_DENIED, "Requires 'h' permissions."); return NULL; } |
︙ | ︙ |
Changes to src/stash.c.
︙ | ︙ | |||
265 266 267 268 269 270 271 | nConflict); } } /* ** Show the diffs associate with a single stash. */ | | | 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 | nConflict); } } /* ** Show the diffs associate with a single stash. */ static void stash_diff(int stashid, const char *zDiffCmd, u64 diffFlags){ Stmt q; Blob empty; blob_zero(&empty); db_prepare(&q, "SELECT rid, isRemoved, isExec, isLink, origname, newname, delta" " FROM stashfile WHERE stashid=%d", stashid |
︙ | ︙ | |||
548 549 550 551 552 553 554 | db_multi_exec("UPDATE vfile SET mtime=0 WHERE pathname IN " "(SELECT origname FROM stashfile WHERE stashid=%d)", stashid); undo_finish(); }else if( memcmp(zCmd, "diff", nCmd)==0 ){ const char *zDiffCmd = db_get("diff-command", 0); | | | | 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 | db_multi_exec("UPDATE vfile SET mtime=0 WHERE pathname IN " "(SELECT origname FROM stashfile WHERE stashid=%d)", stashid); undo_finish(); }else if( memcmp(zCmd, "diff", nCmd)==0 ){ const char *zDiffCmd = db_get("diff-command", 0); u64 diffFlags = diff_options(); if( g.argc>4 ) usage("diff STASHID"); stashid = stash_get_id(g.argc==4 ? g.argv[3] : 0); stash_diff(stashid, zDiffCmd, diffFlags); }else if( memcmp(zCmd, "gdiff", nCmd)==0 ){ const char *zDiffCmd = db_get("gdiff-command", 0); u64 diffFlags = diff_options(); if( g.argc>4 ) usage("diff STASHID"); stashid = stash_get_id(g.argc==4 ? g.argv[3] : 0); stash_diff(stashid, zDiffCmd, diffFlags); }else if( memcmp(zCmd, "help", nCmd)==0 ){ g.argv[1] = "help"; g.argv[2] = "stash"; |
︙ | ︙ |
Changes to src/wiki.c.
︙ | ︙ | |||
635 636 637 638 639 640 641 | */ void wdiff_page(void){ char *zTitle; int rid1, rid2; const char *zPageName; Manifest *pW1, *pW2 = 0; Blob w1, w2, d; | | | 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 | */ void wdiff_page(void){ char *zTitle; int rid1, rid2; const char *zPageName; Manifest *pW1, *pW2 = 0; Blob w1, w2, d; u64 diffFlags; login_check_credentials(); rid1 = atoi(PD("a","0")); if( !g.perm.Hyperlink ){ login_needed(); return; } if( rid1==0 ) fossil_redirect_home(); rid2 = atoi(PD("b","0")); zPageName = PD("name",""); |
︙ | ︙ |