Fossil SCM

Add pEditHead field to avoid repeatedly walking back to find the original post

andygoth 2020-08-21 19:41 andygoth-forum-refactor
Commit 7114bdc827e9ee2cc65715fc0106d6d20da576c31b79614654e0e06e560e9ea5
1 file changed +2
--- src/forum.c
+++ src/forum.c
@@ -38,10 +38,11 @@
3838
int firt; /* This entry replies to firt */
3939
int mfirt; /* Root in-reply-to */
4040
int nReply; /* Number of replies to this entry */
4141
int sid; /* Serial ID number */
4242
char *zUuid; /* Artifact hash */
43
+ ForumEntry *pEditHead; /* Original, unedited entry */
4344
ForumEntry *pEditTail; /* Most recent edit for this entry */
4445
ForumEntry *pEditNext; /* This entry is edited by pEditNext */
4546
ForumEntry *pEditPrev; /* This entry is an edit of pEditPrev */
4647
ForumEntry *pNext; /* Next in chronological order */
4748
ForumEntry *pPrev; /* Previous in chronological order */
@@ -202,10 +203,11 @@
202203
if( pEntry->fprev ){
203204
ForumEntry *pBase = 0, *p;
204205
p = forumentry_backward(pEntry->pPrev, pEntry->fprev);
205206
p->pEditNext = pEntry;
206207
pEntry->pEditPrev = p;
208
+ pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;
207209
while( p ){
208210
pBase = p;
209211
p->pEditTail = pEntry;
210212
p = pBase->pEditPrev;
211213
}
212214
--- src/forum.c
+++ src/forum.c
@@ -38,10 +38,11 @@
38 int firt; /* This entry replies to firt */
39 int mfirt; /* Root in-reply-to */
40 int nReply; /* Number of replies to this entry */
41 int sid; /* Serial ID number */
42 char *zUuid; /* Artifact hash */
 
43 ForumEntry *pEditTail; /* Most recent edit for this entry */
44 ForumEntry *pEditNext; /* This entry is edited by pEditNext */
45 ForumEntry *pEditPrev; /* This entry is an edit of pEditPrev */
46 ForumEntry *pNext; /* Next in chronological order */
47 ForumEntry *pPrev; /* Previous in chronological order */
@@ -202,10 +203,11 @@
202 if( pEntry->fprev ){
203 ForumEntry *pBase = 0, *p;
204 p = forumentry_backward(pEntry->pPrev, pEntry->fprev);
205 p->pEditNext = pEntry;
206 pEntry->pEditPrev = p;
 
207 while( p ){
208 pBase = p;
209 p->pEditTail = pEntry;
210 p = pBase->pEditPrev;
211 }
212
--- src/forum.c
+++ src/forum.c
@@ -38,10 +38,11 @@
38 int firt; /* This entry replies to firt */
39 int mfirt; /* Root in-reply-to */
40 int nReply; /* Number of replies to this entry */
41 int sid; /* Serial ID number */
42 char *zUuid; /* Artifact hash */
43 ForumEntry *pEditHead; /* Original, unedited entry */
44 ForumEntry *pEditTail; /* Most recent edit for this entry */
45 ForumEntry *pEditNext; /* This entry is edited by pEditNext */
46 ForumEntry *pEditPrev; /* This entry is an edit of pEditPrev */
47 ForumEntry *pNext; /* Next in chronological order */
48 ForumEntry *pPrev; /* Previous in chronological order */
@@ -202,10 +203,11 @@
203 if( pEntry->fprev ){
204 ForumEntry *pBase = 0, *p;
205 p = forumentry_backward(pEntry->pPrev, pEntry->fprev);
206 p->pEditNext = pEntry;
207 pEntry->pEditPrev = p;
208 pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;
209 while( p ){
210 pBase = p;
211 p->pEditTail = pEntry;
212 p = pBase->pEditPrev;
213 }
214

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button