| | @@ -346,38 +346,36 @@ |
| 346 | 346 | @ <td>%h(zUser) @ %h(zIpAddr) on %s(zDate)</td></tr> |
| 347 | 347 | } |
| 348 | 348 | db_finalize(&q); |
| 349 | 349 | } |
| 350 | 350 | if( g.okHistory ){ |
| 351 | | - char *zShortUuid = mprintf("%.10s", zUuid); |
| 352 | 351 | const char *zProjName = db_get("project-name", "unnamed"); |
| 353 | 352 | @ <tr><th>Timelines:</th><td> |
| 354 | | - @ <a href="%s(g.zBaseURL)/timeline?p=%d(rid)">ancestors</a> |
| 355 | | - @ | <a href="%s(g.zBaseURL)/timeline?d=%d(rid)">descendants</a> |
| 356 | | - @ | <a href="%s(g.zBaseURL)/timeline?d=%d(rid)&p=%d(rid)">both</a> |
| 353 | + @ <a href="%s(g.zBaseURL)/timeline?p=%S(zUuid)">ancestors</a> |
| 354 | + @ | <a href="%s(g.zBaseURL)/timeline?d=%S(zUuid)">descendants</a> |
| 355 | + @ | <a href="%s(g.zBaseURL)/timeline?d=%S(zUuid)&p=%S(zUuid)">both</a> |
| 357 | 356 | db_prepare(&q, "SELECT substr(tag.tagname,5) FROM tagxref, tag " |
| 358 | 357 | " WHERE rid=%d AND tagtype>0 " |
| 359 | 358 | " AND tag.tagid=tagxref.tagid " |
| 360 | 359 | " AND +tag.tagname GLOB 'sym-*'", rid); |
| 361 | 360 | while( db_step(&q)==SQLITE_ROW ){ |
| 362 | 361 | const char *zTagName = db_column_text(&q, 0); |
| 363 | | - @ | <a href="%s(g.zBaseURL)/timeline?t=%T(zTagName)">%h(zTagName)</a> |
| 362 | + @ | <a href="%s(g.zTop)/timeline?t=%T(zTagName)">%h(zTagName)</a> |
| 364 | 363 | } |
| 365 | 364 | db_finalize(&q); |
| 366 | 365 | @ </td></tr> |
| 367 | 366 | @ <tr><th>Other Links:</th> |
| 368 | 367 | @ <td> |
| 369 | | - @ <a href="%s(g.zBaseURL)/dir?ci=%s(zShortUuid)">files</a> |
| 370 | | - @ | <a href="%s(g.zBaseURL)/zip/%s(zProjName)-%s(zShortUuid).zip?uuid=%s(zUuid)"> |
| 368 | + @ <a href="%s(g.zTop)/dir?ci=%S(zUuid)">files</a> |
| 369 | + @ | <a href="%s(g.zTop)/zip/%s(zProjName)-%S(zUuid).zip?uuid=%s(zUuid)"> |
| 371 | 370 | @ ZIP archive</a> |
| 372 | | - @ | <a href="%s(g.zBaseURL)/artifact/%d(rid)">manifest</a> |
| 371 | + @ | <a href="%s(g.zTop)/artifact/%S(zUuid)">manifest</a> |
| 373 | 372 | if( g.okWrite ){ |
| 374 | | - @ | <a href="%s(g.zBaseURL)/ci_edit?r=%d(rid)">edit</a> |
| 373 | + @ | <a href="%s(g.zTop)/ci_edit?r=%S(zUuid)">edit</a> |
| 375 | 374 | } |
| 376 | 375 | @ </td> |
| 377 | 376 | @ </tr> |
| 378 | | - free(zShortUuid); |
| 379 | 377 | } |
| 380 | 378 | @ </table></p> |
| 381 | 379 | }else{ |
| 382 | 380 | style_header("Check-in Information"); |
| 383 | 381 | login_anonymous_available(); |
| | @@ -498,13 +496,12 @@ |
| 498 | 496 | @ <tr><th>Original User:</th><td> |
| 499 | 497 | hyperlink_to_user(zUser, zDate, "</td></tr>"); |
| 500 | 498 | if( g.okHistory ){ |
| 501 | 499 | @ <tr><th>Commands:</th> |
| 502 | 500 | @ <td> |
| 503 | | - /* @ <a href="%s(g.zBaseURL)/wdiff/%d(rid)">diff</a> | */ |
| 504 | 501 | @ <a href="%s(g.zBaseURL)/whistory?name=%t(zName)">history</a> |
| 505 | | - @ | <a href="%s(g.zBaseURL)/artifact/%d(rid)">raw-text</a> |
| 502 | + @ | <a href="%s(g.zBaseURL)/artifact/%S(zUuid)">raw-text</a> |
| 506 | 503 | @ </td> |
| 507 | 504 | @ </tr> |
| 508 | 505 | } |
| 509 | 506 | @ </table></p> |
| 510 | 507 | }else{ |
| | @@ -621,10 +618,12 @@ |
| 621 | 618 | Blob *pDownloadName /* Fill with an appropriate download name */ |
| 622 | 619 | ){ |
| 623 | 620 | Stmt q; |
| 624 | 621 | int cnt = 0; |
| 625 | 622 | int nWiki = 0; |
| 623 | + char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 624 | + |
| 626 | 625 | db_prepare(&q, |
| 627 | 626 | "SELECT filename.name, datetime(event.mtime)," |
| 628 | 627 | " coalesce(event.ecomment,event.comment)," |
| 629 | 628 | " coalesce(event.euser,event.user)," |
| 630 | 629 | " b.uuid" |
| | @@ -691,11 +690,11 @@ |
| 691 | 690 | hyperlink_to_user(zUser,zDate," on"); |
| 692 | 691 | hyperlink_to_date(zDate,"."); |
| 693 | 692 | nWiki++; |
| 694 | 693 | cnt++; |
| 695 | 694 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 696 | | - blob_append(pDownloadName, zPagename, -1); |
| 695 | + blob_appendf(pDownloadName, "%s.wiki", zPagename); |
| 697 | 696 | } |
| 698 | 697 | } |
| 699 | 698 | db_finalize(&q); |
| 700 | 699 | if( nWiki==0 ){ |
| 701 | 700 | db_prepare(&q, |
| | @@ -726,11 +725,11 @@ |
| 726 | 725 | hyperlink_to_uuid(zUuid); |
| 727 | 726 | @ - %w(zCom) by |
| 728 | 727 | hyperlink_to_user(zUser,zDate," on"); |
| 729 | 728 | hyperlink_to_date(zDate, "."); |
| 730 | 729 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 731 | | - blob_append(pDownloadName, zUuid, -1); |
| 730 | + blob_appendf(pDownloadName, "%.10s.txt", zUuid); |
| 732 | 731 | } |
| 733 | 732 | cnt++; |
| 734 | 733 | } |
| 735 | 734 | db_finalize(&q); |
| 736 | 735 | } |
| | @@ -744,11 +743,11 @@ |
| 744 | 743 | while( db_step(&q)==SQLITE_ROW ){ |
| 745 | 744 | const char *zTarget = db_column_text(&q, 0); |
| 746 | 745 | const char *zFilename = db_column_text(&q, 1); |
| 747 | 746 | const char *zDate = db_column_text(&q, 2); |
| 748 | 747 | const char *zUser = db_column_text(&q, 3); |
| 749 | | - const char *zSrc = db_column_text(&q, 4); |
| 748 | + /* const char *zSrc = db_column_text(&q, 4); */ |
| 750 | 749 | if( cnt>0 ){ |
| 751 | 750 | @ Also attachment "%h(zFilename)" to |
| 752 | 751 | }else{ |
| 753 | 752 | @ Attachment "%h(zFilename)" to |
| 754 | 753 | } |
| | @@ -770,22 +769,21 @@ |
| 770 | 769 | @ added by |
| 771 | 770 | hyperlink_to_user(zUser,zDate," on"); |
| 772 | 771 | hyperlink_to_date(zDate,"."); |
| 773 | 772 | cnt++; |
| 774 | 773 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 775 | | - blob_append(pDownloadName, zSrc, -1); |
| 774 | + blob_append(pDownloadName, zFilename, -1); |
| 776 | 775 | } |
| 777 | 776 | } |
| 778 | 777 | db_finalize(&q); |
| 779 | 778 | if( cnt==0 ){ |
| 780 | | - char *zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 781 | 779 | @ Control artifact. |
| 782 | 780 | if( pDownloadName && blob_size(pDownloadName)==0 ){ |
| 783 | | - blob_append(pDownloadName, zUuid, -1); |
| 781 | + blob_appendf(pDownloadName, "%.10s.txt", zUuid); |
| 784 | 782 | } |
| 785 | 783 | }else if( linkToView && g.okHistory ){ |
| 786 | | - @ <a href="%s(g.zBaseURL)/artifact/%d(rid)">[view]</a> |
| 784 | + @ <a href="%s(g.zBaseURL)/artifact/%S(zUuid)">[view]</a> |
| 787 | 785 | } |
| 788 | 786 | } |
| 789 | 787 | |
| 790 | 788 | |
| 791 | 789 | /* |
| | @@ -793,12 +791,12 @@ |
| 793 | 791 | ** |
| 794 | 792 | ** Two arguments, v1 and v2, are integers. Show the difference between |
| 795 | 793 | ** the two records. |
| 796 | 794 | */ |
| 797 | 795 | void diff_page(void){ |
| 798 | | - int v1 = name_to_rid(PD("v1","0")); |
| 799 | | - int v2 = name_to_rid(PD("v2","0")); |
| 796 | + int v1 = name_to_rid(P("v1")); |
| 797 | + int v2 = name_to_rid(P("v2")); |
| 800 | 798 | Blob c1, c2, diff; |
| 801 | 799 | |
| 802 | 800 | login_check_credentials(); |
| 803 | 801 | if( !g.okRead ){ login_needed(); return; } |
| 804 | 802 | style_header("Diff"); |
| | @@ -929,11 +927,11 @@ |
| 929 | 927 | @ <h2>Artifact %s(zUuid):</h2> |
| 930 | 928 | @ <blockquote> |
| 931 | 929 | blob_zero(&downloadName); |
| 932 | 930 | object_description(rid, 0, &downloadName); |
| 933 | 931 | style_submenu_element("Download", "Download", |
| 934 | | - "%s/raw/%T?name=%d", g.zBaseURL, blob_str(&downloadName), rid); |
| 932 | + "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid); |
| 935 | 933 | @ </blockquote> |
| 936 | 934 | @ <hr> |
| 937 | 935 | content_get(rid, &content); |
| 938 | 936 | @ <blockquote><pre> |
| 939 | 937 | hexdump(&content); |
| | @@ -976,30 +974,30 @@ |
| 976 | 974 | @ <h2>Artifact %s(zUuid)</h2> |
| 977 | 975 | @ <blockquote> |
| 978 | 976 | blob_zero(&downloadName); |
| 979 | 977 | object_description(rid, 0, &downloadName); |
| 980 | 978 | style_submenu_element("Download", "Download", |
| 981 | | - "%s/raw/%T?name=%d", g.zTop, blob_str(&downloadName), rid); |
| 979 | + "%s/raw/%T?name=%s", g.zTop, blob_str(&downloadName), zUuid); |
| 982 | 980 | zMime = mimetype_from_name(blob_str(&downloadName)); |
| 983 | 981 | if( zMime ){ |
| 984 | 982 | if( strcmp(zMime, "text/html")==0 ){ |
| 985 | 983 | if( P("txt") ){ |
| 986 | 984 | style_submenu_element("Html", "Html", |
| 987 | | - "%s/artifact?name=%d", g.zTop, rid); |
| 985 | + "%s/artifact?name=%s", g.zTop, zUuid); |
| 988 | 986 | }else{ |
| 989 | 987 | renderAsHtml = 1; |
| 990 | 988 | style_submenu_element("Text", "Text", |
| 991 | | - "%s/artifact?name=%d&txt=1", g.zTop, rid); |
| 989 | + "%s/artifact?name=%s&txt=1", g.zTop, zUuid); |
| 992 | 990 | } |
| 993 | 991 | }else if( strcmp(zMime, "application/x-fossil-wiki")==0 ){ |
| 994 | 992 | if( P("txt") ){ |
| 995 | 993 | style_submenu_element("Wiki", "Wiki", |
| 996 | | - "%s/artifact?name=%d", g.zTop, rid); |
| 994 | + "%s/artifact?name=%s", g.zTop, zUuid); |
| 997 | 995 | }else{ |
| 998 | 996 | renderAsWiki = 1; |
| 999 | 997 | style_submenu_element("Text", "Text", |
| 1000 | | - "%s/artifact?name=%d&txt=1", g.zTop, rid); |
| 998 | + "%s/artifact?name=%s&txt=1", g.zTop, zUuid); |
| 1001 | 999 | } |
| 1002 | 1000 | } |
| 1003 | 1001 | } |
| 1004 | 1002 | @ </blockquote> |
| 1005 | 1003 | @ <hr> |
| | @@ -1015,14 +1013,14 @@ |
| 1015 | 1013 | @ <blockquote> |
| 1016 | 1014 | if( zMime==0 ){ |
| 1017 | 1015 | @ <pre> |
| 1018 | 1016 | @ %h(blob_str(&content)) |
| 1019 | 1017 | @ </pre> |
| 1020 | | - style_submenu_element("Hex","Hex", "%s/hexdump?name=%d", g.zTop, rid); |
| 1018 | + style_submenu_element("Hex","Hex", "%s/hexdump?name=%s", g.zTop, zUuid); |
| 1021 | 1019 | }else if( strncmp(zMime, "image/", 6)==0 ){ |
| 1022 | | - @ <img src="%s(g.zBaseURL)/raw?name=%d(rid)&m=%s(zMime)"></img> |
| 1023 | | - style_submenu_element("Hex","Hex", "%s/hexdump?name=%d", g.zTop, rid); |
| 1020 | + @ <img src="%s(g.zBaseURL)/raw?name=%s(zUuid)&m=%s(zMime)"></img> |
| 1021 | + style_submenu_element("Hex","Hex", "%s/hexdump?name=%s", g.zTop, zUuid); |
| 1024 | 1022 | }else{ |
| 1025 | 1023 | @ <pre> |
| 1026 | 1024 | hexdump(&content); |
| 1027 | 1025 | @ </pre> |
| 1028 | 1026 | } |
| | @@ -1196,17 +1194,17 @@ |
| 1196 | 1194 | int nColor = sizeof(aColor)/sizeof(aColor[0]); |
| 1197 | 1195 | int i; |
| 1198 | 1196 | |
| 1199 | 1197 | login_check_credentials(); |
| 1200 | 1198 | if( !g.okWrite ){ login_needed(); return; } |
| 1201 | | - rid = atoi(PD("r","0")); |
| 1199 | + rid = name_to_rid(P("r")); |
| 1202 | 1200 | zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid); |
| 1203 | 1201 | zComment = db_text(0, "SELECT coalesce(ecomment,comment)" |
| 1204 | 1202 | " FROM event WHERE objid=%d", rid); |
| 1205 | 1203 | if( zComment==0 ) fossil_redirect_home(); |
| 1206 | 1204 | if( P("cancel") ){ |
| 1207 | | - cgi_redirectf("ci?name=%d", rid); |
| 1205 | + cgi_redirectf("ci?name=%s", zUuid); |
| 1208 | 1206 | } |
| 1209 | 1207 | zNewComment = PD("c",zComment); |
| 1210 | 1208 | zUser = db_text(0, "SELECT coalesce(euser,user)" |
| 1211 | 1209 | " FROM event WHERE objid=%d", rid); |
| 1212 | 1210 | if( zUser==0 ) fossil_redirect_home(); |
| | @@ -1315,11 +1313,11 @@ |
| 1315 | 1313 | g.markPrivate = content_is_private(rid); |
| 1316 | 1314 | nrid = content_put(&ctrl, 0, 0); |
| 1317 | 1315 | manifest_crosslink(nrid, &ctrl); |
| 1318 | 1316 | db_end_transaction(0); |
| 1319 | 1317 | } |
| 1320 | | - cgi_redirectf("ci?name=%d", rid); |
| 1318 | + cgi_redirectf("ci?name=%s", zUuid); |
| 1321 | 1319 | } |
| 1322 | 1320 | blob_zero(&comment); |
| 1323 | 1321 | blob_append(&comment, zNewComment, -1); |
| 1324 | 1322 | zUuid[10] = 0; |
| 1325 | 1323 | style_header("Edit Check-in [%s]", zUuid); |
| | @@ -1357,11 +1355,11 @@ |
| 1357 | 1355 | @ </blockquote> |
| 1358 | 1356 | @ <hr> |
| 1359 | 1357 | blob_reset(&suffix); |
| 1360 | 1358 | } |
| 1361 | 1359 | @ <p>Make changes to attributes of check-in |
| 1362 | | - @ [<a href="ci?name=%d(rid)">%s(zUuid)</a>]:</p> |
| 1360 | + @ [<a href="ci?name=%s(zUuid)">%s(zUuid)</a>]:</p> |
| 1363 | 1361 | @ <form action="%s(g.zBaseURL)/ci_edit" method="POST"> |
| 1364 | 1362 | login_insert_csrf_secret(); |
| 1365 | 1363 | @ <input type="hidden" name="r" value="%d(rid)"> |
| 1366 | 1364 | @ <table border="0" cellspacing="10"> |
| 1367 | 1365 | |
| 1368 | 1366 | |