Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch th1-doc-vars Excluding Merge-Ins
This is equivalent to a diff from 96bf76a4b1 to 9b76469b38
2022-02-10
| ||
15:50 | Update the built-in SQLite to the latest 3.38.0 beta that includes the performance enhancements on the datetime() function. ... (check-in: 740d655e55 user: drh tags: trunk) | |
00:29 | Merge from trunk ... (Leaf check-in: 2b5f9b211c user: george tags: search-terms-highlighting) | |
00:22 | Merge from trunk ... (Leaf check-in: a961a67ba7 user: george tags: rptview-submenu-paralink) | |
00:17 | Merge from trunk ... (check-in: 88ff4e5dea user: george tags: wcontent-subsets) | |
00:12 | Merge from trunk ... (Leaf check-in: 9b76469b38 user: george tags: th1-doc-vars) | |
00:05 | Remove unused local variable from cgi_parse_POST_JSON() to fix a compiler warning. ... (check-in: 96bf76a4b1 user: george tags: trunk) | |
2022-02-09
| ||
20:23 | Cherrypicked [92221aaa192e82] and [7283ae6e120c10] on behalf of George. ... (check-in: f902814db6 user: stephan tags: trunk) | |
2022-01-21
| ||
19:58 | Merge from trunk ... (check-in: 6721c654a9 user: george tags: th1-doc-vars) | |
Changes to src/doc.c.
︙ | ︙ | |||
908 909 910 911 912 913 914 | ** form: "href='$ROOT/" or "action='$ROOT" has the $ROOT name expanded ** to the top-level of the repository. */ void doc_page(void){ const char *zName = 0; /* Argument to the /doc page */ const char *zOrigName = "?"; /* Original document name */ const char *zMime; /* Document MIME type */ | | | > | | 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 | ** form: "href='$ROOT/" or "action='$ROOT" has the $ROOT name expanded ** to the top-level of the repository. */ void doc_page(void){ const char *zName = 0; /* Argument to the /doc page */ const char *zOrigName = "?"; /* Original document name */ const char *zMime; /* Document MIME type */ const char *zCheckin = "tip"; /* The check-in holding the document */ const char *zPathSuffix = ""; /* Text to append to g.zPath */ int vid = 0; /* Artifact of check-in */ int rid = 0; /* Artifact of file */ int i; /* Loop counter */ Blob filebody; /* Content of the documentation file */ Blob title; /* Document title */ Blob filehash = empty_blob; /* Hashsum of the document's source */ int nMiss = (-1); /* Failed attempts to find the document */ const int isUV = g.zPath[0]=='u'; /* True for /uv. False for /doc */ const char *zDfltTitle; static const char *const azSuffix[] = { "index.html", "index.wiki", "index.md" #ifdef FOSSIL_ENABLE_TH1_DOCS , "index.th1" #endif }; |
︙ | ︙ | |||
984 985 986 987 988 989 990 | }else{ goto doc_not_found; } } if( isUV ){ if( db_table_exists("repository","unversioned") ){ rid = unversioned_content(zName, &filebody); | | > > | | > > > > > > > > > > > > > > > > > > > | 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 | }else{ goto doc_not_found; } } if( isUV ){ if( db_table_exists("repository","unversioned") ){ rid = unversioned_content(zName, &filebody); if( rid==1 ){ /* found by name */ Stmt q; db_prepare(&q, "SELECT hash, mtime FROM unversioned" " WHERE name=%Q", zName); if( db_step(&q)==SQLITE_ROW ){ const char* hash = db_column_text(&q,0); blob_set_dynamic( &filehash, fossil_strdup( hash )); etag_check(ETAG_HASH,hash); etag_last_modified(db_column_int64(&q,1)); } db_finalize(&q); }else if( rid==2 ){ /* found by hash */ blob_set_dynamic( &filehash, fossil_strdup( zName )); zName = db_text(zName, "SELECT name FROM unversioned WHERE hash=%Q", zName); g.isConst = 1; } zDfltTitle = zName; } }else if( fossil_strcmp(zCheckin,"ckout")==0 || fossil_strcmp(zCheckin,g.zCkoutAlias)==0 ){ /* Read from the local checkout */ char *zFullpath; db_must_be_within_tree(); zFullpath = mprintf("%s/%s", g.zLocalRoot, zName); if( file_isfile(zFullpath, RepoFILE) && blob_read_from_file(&filebody, zFullpath, RepoFILE)>0 ){ rid = 1; /* Fake RID just to get the loop to end */ if(filebody.nUsed <= 256*1024){/* don't hash big files */ hname_hash( &filebody, 0, &filehash ); } } fossil_free(zFullpath); }else{ vid = symbolic_name_to_rid(zCheckin, "ci"); rid = vid>0 ? doc_load_content(vid, zName, &filebody) : 0; if( rid ){ blob_set_dynamic( &filehash, rid_to_uuid(rid) ); } } } g.zPath = mprintf("%s/%s", g.zPath, zPathSuffix); if( rid==0 ) goto doc_not_found; blob_to_utf8_no_bom(&filebody, 0); /* The file is now contained in the filebody blob. Deliver the ** file to the user */ zMime = nMiss==0 ? P("mimetype") : 0; if( zMime==0 ){ zMime = mimetype_from_name(zName); } Th_Store("doc_name", zName); if( !blob_is_reset(&filehash) ){ Th_Store( "artifact_hashsum", blob_str(&filehash)); Th_Store( isUV ? "uv_hashsum" : "doc_hashsum", blob_str(&filehash)); blob_reset( &filehash ); } if( vid ){ /* FIXME: the following two Th1 variables seem misleading because ** 1) variables' names imply a document while their ** values correspond to a check-in that is being served, ** 2) truncation and mangling of `uuid` seems very unhelpful, ** 3) the date's meaning seems ambiguous ** (expecially if check-in has been amended) */ Th_Store("doc_version", db_text(0, "SELECT '[' || substr(uuid,1,10) || ']'" " FROM blob WHERE rid=%d", vid)); Th_Store("doc_date", db_text(0, "SELECT datetime(mtime) FROM event" " WHERE objid=%d AND type='ci'", vid)); } document_render(&filebody, zMime, zDfltTitle, zName); if( nMiss>=count(azSuffix) ) cgi_set_status(404, "Not Found"); |
︙ | ︙ |
Changes to src/wiki.c.
︙ | ︙ | |||
541 542 543 544 545 546 547 548 549 550 551 552 553 554 | int rid = 0; int isSandbox; unsigned submenuFlags = W_HELP; Blob wiki; Manifest *pWiki = 0; const char *zPageName; const char *zMimetype = 0; int isPopup = P("popup")!=0; char *zBody = mprintf("%s","<i>Empty Page</i>"); int noSubmenu = P("nsm")!=0 || g.isHome; login_check_credentials(); if( !g.perm.RdWiki ){ login_needed(g.anon.RdWiki); return; } zPageName = P("name"); | > | 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 | int rid = 0; int isSandbox; unsigned submenuFlags = W_HELP; Blob wiki; Manifest *pWiki = 0; const char *zPageName; const char *zMimetype = 0; const char *zHashsum = 0; /* of the wiki's corresponding artifact */ int isPopup = P("popup")!=0; char *zBody = mprintf("%s","<i>Empty Page</i>"); int noSubmenu = P("nsm")!=0 || g.isHome; login_check_credentials(); if( !g.perm.RdWiki ){ login_needed(g.anon.RdWiki); return; } zPageName = P("name"); |
︙ | ︙ | |||
578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 | ); free(zTag); } pWiki = manifest_get(rid, CFTYPE_WIKI, 0); if( pWiki ){ zBody = pWiki->zWiki; zMimetype = pWiki->zMimetype; } } zMimetype = wiki_filter_mimetypes(zMimetype); if( !noSubmenu ){ if( ((rid && g.perm.WrWiki) || (!rid && g.perm.NewWiki)) && wiki_special_permission(zPageName) ){ style_submenu_element("Edit", "%R/wikiedit?name=%T", zPageName); }else if( rid && g.perm.ApndWiki ){ style_submenu_element("Edit", "%R/wikiappend?name=%T", zPageName); } if( g.perm.Hyperlink ){ style_submenu_element("History", "%R/whistory?name=%T", zPageName); } } if( !isPopup ){ style_set_current_page("%T?name=%T", g.zPath, zPageName); wiki_page_header(WIKITYPE_UNKNOWN, zPageName, ""); if( !noSubmenu ){ wiki_standard_submenu(submenuFlags); } } if( zBody[0]==0 ){ | > > > > > > > > > > > > | 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 | ); free(zTag); } pWiki = manifest_get(rid, CFTYPE_WIKI, 0); if( pWiki ){ zBody = pWiki->zWiki; zMimetype = pWiki->zMimetype; zHashsum = rid_to_uuid(rid); } } zMimetype = wiki_filter_mimetypes(zMimetype); if( !noSubmenu ){ if( ((rid && g.perm.WrWiki) || (!rid && g.perm.NewWiki)) && wiki_special_permission(zPageName) ){ style_submenu_element("Edit", "%R/wikiedit?name=%T", zPageName); }else if( rid && g.perm.ApndWiki ){ style_submenu_element("Edit", "%R/wikiappend?name=%T", zPageName); } if( g.perm.Hyperlink ){ style_submenu_element("History", "%R/whistory?name=%T", zPageName); } } if( !isPopup ){ if( zHashsum ){ char *zDate = db_text(0,"SELECT strftime('%%Y-%%m-%%d %%H:%%M'," "'%.17g',toLocal())",pWiki->rDate); Th_Store("wiki_timestamp",zDate); fossil_free( zDate ); Th_Store("wiki_editor",pWiki->zUser); Th_Store("artifact_hashsum",zHashsum); Th_Store("wiki_hashsum",zHashsum); fossil_free( (char*)zHashsum ); } style_set_current_page("%T?name=%T", g.zPath, zPageName); wiki_page_header(WIKITYPE_UNKNOWN, zPageName, ""); if( !noSubmenu ){ wiki_standard_submenu(submenuFlags); } } if( zBody[0]==0 ){ |
︙ | ︙ |