Fossil SCM
Demonstrate how the mkindex.c utility could be extended to automatically put a complete web-page construction inside a transaction.
Commit
67c420402f2958eed8119ee74b807900147c9927201a01c3fffe463a34b536d6
Parent
48dca1b4c9ca20e…
4 files changed
+1
+2
+3
+1
-1
+1
| --- src/dispatch.c | ||
| +++ src/dispatch.c | ||
| @@ -48,10 +48,11 @@ | ||
| 48 | 48 | #define CMDFLAG_SETTING 0x0020 /* A setting */ |
| 49 | 49 | #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */ |
| 50 | 50 | #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */ |
| 51 | 51 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 52 | 52 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */ |
| 53 | +#define CMDFLAG_RDTRANS 0x0400 /* Run inside a read transaction */ | |
| 53 | 54 | /**************************************************************************/ |
| 54 | 55 | |
| 55 | 56 | /* Values for the 2nd parameter to dispatch_name_search() */ |
| 56 | 57 | #define CMDFLAG_ANY 0x0038 /* Match anything */ |
| 57 | 58 | #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */ |
| 58 | 59 |
| --- src/dispatch.c | |
| +++ src/dispatch.c | |
| @@ -48,10 +48,11 @@ | |
| 48 | #define CMDFLAG_SETTING 0x0020 /* A setting */ |
| 49 | #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */ |
| 50 | #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */ |
| 51 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 52 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */ |
| 53 | /**************************************************************************/ |
| 54 | |
| 55 | /* Values for the 2nd parameter to dispatch_name_search() */ |
| 56 | #define CMDFLAG_ANY 0x0038 /* Match anything */ |
| 57 | #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */ |
| 58 |
| --- src/dispatch.c | |
| +++ src/dispatch.c | |
| @@ -48,10 +48,11 @@ | |
| 48 | #define CMDFLAG_SETTING 0x0020 /* A setting */ |
| 49 | #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */ |
| 50 | #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */ |
| 51 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 52 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret POST content */ |
| 53 | #define CMDFLAG_RDTRANS 0x0400 /* Run inside a read transaction */ |
| 54 | /**************************************************************************/ |
| 55 | |
| 56 | /* Values for the 2nd parameter to dispatch_name_search() */ |
| 57 | #define CMDFLAG_ANY 0x0038 /* Match anything */ |
| 58 | #define CMDFLAG_PREFIX 0x0200 /* Prefix match is ok */ |
| 59 |
+2
| --- src/main.c | ||
| +++ src/main.c | ||
| @@ -1920,11 +1920,13 @@ | ||
| 1920 | 1920 | rc = TH_OK; |
| 1921 | 1921 | } |
| 1922 | 1922 | if( rc==TH_OK || rc==TH_RETURN || rc==TH_CONTINUE ){ |
| 1923 | 1923 | if( rc==TH_OK || rc==TH_RETURN ){ |
| 1924 | 1924 | #endif |
| 1925 | + if( pCmd->eCmdFlags & CMDFLAG_RDTRANS ) db_begin_transaction(); | |
| 1925 | 1926 | pCmd->xFunc(); |
| 1927 | + if( pCmd->eCmdFlags & CMDFLAG_RDTRANS ) db_commit_transaction(); | |
| 1926 | 1928 | #ifdef FOSSIL_ENABLE_TH1_HOOKS |
| 1927 | 1929 | } |
| 1928 | 1930 | if( !g.fNoThHook && (rc==TH_OK || rc==TH_CONTINUE) ){ |
| 1929 | 1931 | Th_WebpageNotify(pCmd->zName+1, pCmd->eCmdFlags); |
| 1930 | 1932 | } |
| 1931 | 1933 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1920,11 +1920,13 @@ | |
| 1920 | rc = TH_OK; |
| 1921 | } |
| 1922 | if( rc==TH_OK || rc==TH_RETURN || rc==TH_CONTINUE ){ |
| 1923 | if( rc==TH_OK || rc==TH_RETURN ){ |
| 1924 | #endif |
| 1925 | pCmd->xFunc(); |
| 1926 | #ifdef FOSSIL_ENABLE_TH1_HOOKS |
| 1927 | } |
| 1928 | if( !g.fNoThHook && (rc==TH_OK || rc==TH_CONTINUE) ){ |
| 1929 | Th_WebpageNotify(pCmd->zName+1, pCmd->eCmdFlags); |
| 1930 | } |
| 1931 |
| --- src/main.c | |
| +++ src/main.c | |
| @@ -1920,11 +1920,13 @@ | |
| 1920 | rc = TH_OK; |
| 1921 | } |
| 1922 | if( rc==TH_OK || rc==TH_RETURN || rc==TH_CONTINUE ){ |
| 1923 | if( rc==TH_OK || rc==TH_RETURN ){ |
| 1924 | #endif |
| 1925 | if( pCmd->eCmdFlags & CMDFLAG_RDTRANS ) db_begin_transaction(); |
| 1926 | pCmd->xFunc(); |
| 1927 | if( pCmd->eCmdFlags & CMDFLAG_RDTRANS ) db_commit_transaction(); |
| 1928 | #ifdef FOSSIL_ENABLE_TH1_HOOKS |
| 1929 | } |
| 1930 | if( !g.fNoThHook && (rc==TH_OK || rc==TH_CONTINUE) ){ |
| 1931 | Th_WebpageNotify(pCmd->zName+1, pCmd->eCmdFlags); |
| 1932 | } |
| 1933 |
+3
| --- src/mkindex.c | ||
| +++ src/mkindex.c | ||
| @@ -90,10 +90,11 @@ | ||
| 90 | 90 | #define CMDFLAG_SETTING 0x0020 /* A setting */ |
| 91 | 91 | #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */ |
| 92 | 92 | #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */ |
| 93 | 93 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 94 | 94 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */ |
| 95 | +#define CMDFLAG_RDTRANS 0x0400 /* Run inside a read transaction */ | |
| 95 | 96 | /**************************************************************************/ |
| 96 | 97 | |
| 97 | 98 | /* |
| 98 | 99 | ** Each entry looks like this: |
| 99 | 100 | */ |
| @@ -239,10 +240,12 @@ | ||
| 239 | 240 | }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){ |
| 240 | 241 | aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER); |
| 241 | 242 | aEntry[nUsed].eType |= CMDFLAG_TEST; |
| 242 | 243 | }else if( j==11 && strncmp(&zLine[i], "raw-content", j)==0 ){ |
| 243 | 244 | aEntry[nUsed].eType |= CMDFLAG_RAWCONTENT; |
| 245 | + }else if( j==16 && strncmp(&zLine[i], "read-transaction", j)==0 ){ | |
| 246 | + aEntry[nUsed].eType |= CMDFLAG_RDTRANS; | |
| 244 | 247 | }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){ |
| 245 | 248 | aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT); |
| 246 | 249 | aEntry[nUsed].iWidth = 0; |
| 247 | 250 | aEntry[nUsed].eType |= CMDFLAG_BOOLEAN; |
| 248 | 251 | }else if( j==10 && strncmp(&zLine[i], "block-text", j)==0 ){ |
| 249 | 252 |
| --- src/mkindex.c | |
| +++ src/mkindex.c | |
| @@ -90,10 +90,11 @@ | |
| 90 | #define CMDFLAG_SETTING 0x0020 /* A setting */ |
| 91 | #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */ |
| 92 | #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */ |
| 93 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 94 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */ |
| 95 | /**************************************************************************/ |
| 96 | |
| 97 | /* |
| 98 | ** Each entry looks like this: |
| 99 | */ |
| @@ -239,10 +240,12 @@ | |
| 239 | }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){ |
| 240 | aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER); |
| 241 | aEntry[nUsed].eType |= CMDFLAG_TEST; |
| 242 | }else if( j==11 && strncmp(&zLine[i], "raw-content", j)==0 ){ |
| 243 | aEntry[nUsed].eType |= CMDFLAG_RAWCONTENT; |
| 244 | }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){ |
| 245 | aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT); |
| 246 | aEntry[nUsed].iWidth = 0; |
| 247 | aEntry[nUsed].eType |= CMDFLAG_BOOLEAN; |
| 248 | }else if( j==10 && strncmp(&zLine[i], "block-text", j)==0 ){ |
| 249 |
| --- src/mkindex.c | |
| +++ src/mkindex.c | |
| @@ -90,10 +90,11 @@ | |
| 90 | #define CMDFLAG_SETTING 0x0020 /* A setting */ |
| 91 | #define CMDFLAG_VERSIONABLE 0x0040 /* A versionable setting */ |
| 92 | #define CMDFLAG_BLOCKTEXT 0x0080 /* Multi-line text setting */ |
| 93 | #define CMDFLAG_BOOLEAN 0x0100 /* A boolean setting */ |
| 94 | #define CMDFLAG_RAWCONTENT 0x0200 /* Do not interpret webpage content */ |
| 95 | #define CMDFLAG_RDTRANS 0x0400 /* Run inside a read transaction */ |
| 96 | /**************************************************************************/ |
| 97 | |
| 98 | /* |
| 99 | ** Each entry looks like this: |
| 100 | */ |
| @@ -239,10 +240,12 @@ | |
| 240 | }else if( j==4 && strncmp(&zLine[i], "test", j)==0 ){ |
| 241 | aEntry[nUsed].eType &= ~(CMDFLAG_1ST_TIER|CMDFLAG_2ND_TIER); |
| 242 | aEntry[nUsed].eType |= CMDFLAG_TEST; |
| 243 | }else if( j==11 && strncmp(&zLine[i], "raw-content", j)==0 ){ |
| 244 | aEntry[nUsed].eType |= CMDFLAG_RAWCONTENT; |
| 245 | }else if( j==16 && strncmp(&zLine[i], "read-transaction", j)==0 ){ |
| 246 | aEntry[nUsed].eType |= CMDFLAG_RDTRANS; |
| 247 | }else if( j==7 && strncmp(&zLine[i], "boolean", j)==0 ){ |
| 248 | aEntry[nUsed].eType &= ~(CMDFLAG_BLOCKTEXT); |
| 249 | aEntry[nUsed].iWidth = 0; |
| 250 | aEntry[nUsed].eType |= CMDFLAG_BOOLEAN; |
| 251 | }else if( j==10 && strncmp(&zLine[i], "block-text", j)==0 ){ |
| 252 |
+1
-1
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -1579,11 +1579,11 @@ | ||
| 1579 | 1579 | return zEDate; |
| 1580 | 1580 | } |
| 1581 | 1581 | |
| 1582 | 1582 | |
| 1583 | 1583 | /* |
| 1584 | -** WEBPAGE: timeline | |
| 1584 | +** WEBPAGE: timeline read-transaction | |
| 1585 | 1585 | ** |
| 1586 | 1586 | ** Query parameters: |
| 1587 | 1587 | ** |
| 1588 | 1588 | ** a=TIMEORTAG After this event |
| 1589 | 1589 | ** b=TIMEORTAG Before this event |
| 1590 | 1590 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1579,11 +1579,11 @@ | |
| 1579 | return zEDate; |
| 1580 | } |
| 1581 | |
| 1582 | |
| 1583 | /* |
| 1584 | ** WEBPAGE: timeline |
| 1585 | ** |
| 1586 | ** Query parameters: |
| 1587 | ** |
| 1588 | ** a=TIMEORTAG After this event |
| 1589 | ** b=TIMEORTAG Before this event |
| 1590 |
| --- src/timeline.c | |
| +++ src/timeline.c | |
| @@ -1579,11 +1579,11 @@ | |
| 1579 | return zEDate; |
| 1580 | } |
| 1581 | |
| 1582 | |
| 1583 | /* |
| 1584 | ** WEBPAGE: timeline read-transaction |
| 1585 | ** |
| 1586 | ** Query parameters: |
| 1587 | ** |
| 1588 | ** a=TIMEORTAG After this event |
| 1589 | ** b=TIMEORTAG Before this event |
| 1590 |