Fossil SCM

Remove fprev

andygoth 2020-08-21 21:52 andygoth-forum-refactor
Commit d585c347071e7c9bf48b180ad6462707be923c79f902d5bcef37da9690234f00
1 file changed +14 -20
+14 -20
--- src/forum.c
+++ src/forum.c
@@ -32,11 +32,10 @@
3232
** either the initial post, an edit to a post, a reply, or an edit to
3333
** a reply.
3434
*/
3535
struct ForumEntry {
3636
int fpid; /* rid for this entry */
37
- int fprev; /* zero if initial entry. non-zero if an edit */
3837
int mfirt; /* Root in-reply-to */
3938
int sid; /* Serial ID number */
4039
char *zUuid; /* Artifact hash */
4140
ForumEntry *pIrt; /* This entry replies to pIrt */
4241
ForumEntry *pEditHead; /* Original, unedited entry */
@@ -131,11 +130,11 @@
131130
ForumEntry *pBase /* Add replies to this entry */
132131
){
133132
ForumEntry *p;
134133
ForumEntry *pPrev = 0;
135134
for(p=pBase->pNext; p; p=p->pNext){
136
- if( p->fprev==0 && p->mfirt==pBase->fpid ){
135
+ if( !p->pEditPrev && p->mfirt==pBase->fpid ){
137136
if( pPrev ){
138137
pPrev->nIndent = pBase->nIndent + 1;
139138
forumentry_add_to_display(pThread, pPrev);
140139
forumthread_display_order(pThread, pPrev);
141140
}
@@ -157,11 +156,11 @@
157156
ForumThread *pThread;
158157
ForumEntry *pEntry;
159158
ForumEntry *p;
160159
Stmt q;
161160
int sid = 1;
162
- int firt;
161
+ int firt, fprev;
163162
pThread = fossil_malloc( sizeof(*pThread) );
164163
memset(pThread, 0, sizeof(*pThread));
165164
db_prepare(&q,
166165
"SELECT fpid, firt, fprev, (SELECT uuid FROM blob WHERE rid=fpid)"
167166
" FROM forumpost"
@@ -171,11 +170,11 @@
171170
while( db_step(&q)==SQLITE_ROW ){
172171
pEntry = fossil_malloc( sizeof(*pEntry) );
173172
memset(pEntry, 0, sizeof(*pEntry));
174173
pEntry->fpid = db_column_int(&q, 0);
175174
firt = db_column_int(&q, 1);
176
- pEntry->fprev = db_column_int(&q, 2);
175
+ fprev = db_column_int(&q, 2);
177176
pEntry->zUuid = fossil_strdup(db_column_text(&q,3));
178177
pEntry->mfirt = firt;
179178
pEntry->sid = sid++;
180179
pEntry->pPrev = pThread->pLast;
181180
pEntry->pNext = 0;
@@ -191,35 +190,28 @@
191190
pEntry->pIrt = p;
192191
break;
193192
}
194193
}
195194
}
196
- pThread->pLast = pEntry;
197
- }
198
- db_finalize(&q);
199
-
200
- /* Establish which entries are the latest edit. After this loop
201
- ** completes, entries that have non-NULL pEditTail should not be
202
- ** displayed.
203
- */
204
- for(pEntry=pThread->pFirst; pEntry; pEntry=pEntry->pNext){
205
- if( pEntry->fprev ){
195
+ if( fprev ){
206196
ForumEntry *pBase = 0;
207
- p = forumentry_backward(pEntry->pPrev, pEntry->fprev);
197
+ p = forumentry_backward(pEntry->pPrev, fprev);
208198
p->pEditNext = pEntry;
209199
pEntry->pEditPrev = p;
210200
pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;
211201
while( p ){
212202
pBase = p;
213203
p->pEditTail = pEntry;
214
- p = pBase->pEditPrev;
204
+ p = p->pEditPrev;
215205
}
216206
for(p=pEntry->pNext; p; p=p->pNext){
217207
if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid;
218208
}
219209
}
210
+ pThread->pLast = pEntry;
220211
}
212
+ db_finalize(&q);
221213
222214
if( computeHierarchy ){
223215
/* Compute the hierarchical display order */
224216
pEntry = pThread->pFirst;
225217
pEntry->nIndent = 1;
@@ -299,14 +291,16 @@
299291
pThread = forumthread_create(froot, 1);
300292
fossil_print("Chronological:\n");
301293
fossil_print(
302294
/* 0 1 2 3 4 5 6 7 */
303295
/* 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */
304
- " sid fpid pIrt fprev mfirt pEditTail hash\n");
296
+ " sid fpid pIrt pEditPrev mfirt pEditTail hash\n");
305297
for(p=pThread->pFirst; p; p=p->pNext){
306298
fossil_print("%4d %9d %9d %9d %9d %9d %8.8s\n", p->sid,
307
- p->fpid, p->pIrt ? p->pIrt->fpid : 0, p->fprev, p->mfirt,
299
+ p->fpid, p->pIrt ? p->pIrt->fpid : 0,
300
+ p->pEditPrev ? p->pEditPrev->fpid : 0,
301
+ p->mfirt,
308302
p->pEditTail ? p->pEditTail->fpid : 0, p->zUuid);
309303
}
310304
fossil_print("\nDisplay\n");
311305
for(p=pThread->pDisplay; p; p=p->pDisplay){
312306
fossil_print("%*s", (p->nIndent-1)*3, "");
@@ -519,16 +513,16 @@
519513
** to be displayed for debugging purposes.
520514
*/
521515
if( PB("threadtable") ){
522516
@ <hr>
523517
@ <table border="1" cellpadding="3" cellspacing="0">
524
- @ <tr><th>sid<th>fpid<th>pIrt<th>fprev<th>mfirt<th>pEditHead<th>pEditTail\
518
+ @ <tr><th>sid<th>fpid<th>pIrt<th>mfirt<th>pEditHead<th>pEditTail\
525519
@ <th>pEditNext<th>pEditPrev<th>hash
526520
for(p=pThread->pFirst; p; p=p->pNext){
527521
@ <tr><td>%d(p->sid)<td>%d(p->fpid)\
528522
@ <td>%d(p->pIrt?p->pIrt->fpid:0)\
529
- @ <td>%d(p->fprev)<td>%d(p->mfirt)\
523
+ @ <td>%d(p->mfirt)\
530524
@ <td>%d(p->pEditHead?p->pEditHead->fpid:0)\
531525
@ <td>%d(p->pEditTail?p->pEditTail->fpid:0)\
532526
@ <td>%d(p->pEditNext?p->pEditNext->fpid:0)\
533527
@ <td>%d(p->pEditPrev?p->pEditPrev->fpid:0)\
534528
@ <td>%S(p->zUuid)</tr>
535529
--- src/forum.c
+++ src/forum.c
@@ -32,11 +32,10 @@
32 ** either the initial post, an edit to a post, a reply, or an edit to
33 ** a reply.
34 */
35 struct ForumEntry {
36 int fpid; /* rid for this entry */
37 int fprev; /* zero if initial entry. non-zero if an edit */
38 int mfirt; /* Root in-reply-to */
39 int sid; /* Serial ID number */
40 char *zUuid; /* Artifact hash */
41 ForumEntry *pIrt; /* This entry replies to pIrt */
42 ForumEntry *pEditHead; /* Original, unedited entry */
@@ -131,11 +130,11 @@
131 ForumEntry *pBase /* Add replies to this entry */
132 ){
133 ForumEntry *p;
134 ForumEntry *pPrev = 0;
135 for(p=pBase->pNext; p; p=p->pNext){
136 if( p->fprev==0 && p->mfirt==pBase->fpid ){
137 if( pPrev ){
138 pPrev->nIndent = pBase->nIndent + 1;
139 forumentry_add_to_display(pThread, pPrev);
140 forumthread_display_order(pThread, pPrev);
141 }
@@ -157,11 +156,11 @@
157 ForumThread *pThread;
158 ForumEntry *pEntry;
159 ForumEntry *p;
160 Stmt q;
161 int sid = 1;
162 int firt;
163 pThread = fossil_malloc( sizeof(*pThread) );
164 memset(pThread, 0, sizeof(*pThread));
165 db_prepare(&q,
166 "SELECT fpid, firt, fprev, (SELECT uuid FROM blob WHERE rid=fpid)"
167 " FROM forumpost"
@@ -171,11 +170,11 @@
171 while( db_step(&q)==SQLITE_ROW ){
172 pEntry = fossil_malloc( sizeof(*pEntry) );
173 memset(pEntry, 0, sizeof(*pEntry));
174 pEntry->fpid = db_column_int(&q, 0);
175 firt = db_column_int(&q, 1);
176 pEntry->fprev = db_column_int(&q, 2);
177 pEntry->zUuid = fossil_strdup(db_column_text(&q,3));
178 pEntry->mfirt = firt;
179 pEntry->sid = sid++;
180 pEntry->pPrev = pThread->pLast;
181 pEntry->pNext = 0;
@@ -191,35 +190,28 @@
191 pEntry->pIrt = p;
192 break;
193 }
194 }
195 }
196 pThread->pLast = pEntry;
197 }
198 db_finalize(&q);
199
200 /* Establish which entries are the latest edit. After this loop
201 ** completes, entries that have non-NULL pEditTail should not be
202 ** displayed.
203 */
204 for(pEntry=pThread->pFirst; pEntry; pEntry=pEntry->pNext){
205 if( pEntry->fprev ){
206 ForumEntry *pBase = 0;
207 p = forumentry_backward(pEntry->pPrev, pEntry->fprev);
208 p->pEditNext = pEntry;
209 pEntry->pEditPrev = p;
210 pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;
211 while( p ){
212 pBase = p;
213 p->pEditTail = pEntry;
214 p = pBase->pEditPrev;
215 }
216 for(p=pEntry->pNext; p; p=p->pNext){
217 if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid;
218 }
219 }
 
220 }
 
221
222 if( computeHierarchy ){
223 /* Compute the hierarchical display order */
224 pEntry = pThread->pFirst;
225 pEntry->nIndent = 1;
@@ -299,14 +291,16 @@
299 pThread = forumthread_create(froot, 1);
300 fossil_print("Chronological:\n");
301 fossil_print(
302 /* 0 1 2 3 4 5 6 7 */
303 /* 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */
304 " sid fpid pIrt fprev mfirt pEditTail hash\n");
305 for(p=pThread->pFirst; p; p=p->pNext){
306 fossil_print("%4d %9d %9d %9d %9d %9d %8.8s\n", p->sid,
307 p->fpid, p->pIrt ? p->pIrt->fpid : 0, p->fprev, p->mfirt,
 
 
308 p->pEditTail ? p->pEditTail->fpid : 0, p->zUuid);
309 }
310 fossil_print("\nDisplay\n");
311 for(p=pThread->pDisplay; p; p=p->pDisplay){
312 fossil_print("%*s", (p->nIndent-1)*3, "");
@@ -519,16 +513,16 @@
519 ** to be displayed for debugging purposes.
520 */
521 if( PB("threadtable") ){
522 @ <hr>
523 @ <table border="1" cellpadding="3" cellspacing="0">
524 @ <tr><th>sid<th>fpid<th>pIrt<th>fprev<th>mfirt<th>pEditHead<th>pEditTail\
525 @ <th>pEditNext<th>pEditPrev<th>hash
526 for(p=pThread->pFirst; p; p=p->pNext){
527 @ <tr><td>%d(p->sid)<td>%d(p->fpid)\
528 @ <td>%d(p->pIrt?p->pIrt->fpid:0)\
529 @ <td>%d(p->fprev)<td>%d(p->mfirt)\
530 @ <td>%d(p->pEditHead?p->pEditHead->fpid:0)\
531 @ <td>%d(p->pEditTail?p->pEditTail->fpid:0)\
532 @ <td>%d(p->pEditNext?p->pEditNext->fpid:0)\
533 @ <td>%d(p->pEditPrev?p->pEditPrev->fpid:0)\
534 @ <td>%S(p->zUuid)</tr>
535
--- src/forum.c
+++ src/forum.c
@@ -32,11 +32,10 @@
32 ** either the initial post, an edit to a post, a reply, or an edit to
33 ** a reply.
34 */
35 struct ForumEntry {
36 int fpid; /* rid for this entry */
 
37 int mfirt; /* Root in-reply-to */
38 int sid; /* Serial ID number */
39 char *zUuid; /* Artifact hash */
40 ForumEntry *pIrt; /* This entry replies to pIrt */
41 ForumEntry *pEditHead; /* Original, unedited entry */
@@ -131,11 +130,11 @@
130 ForumEntry *pBase /* Add replies to this entry */
131 ){
132 ForumEntry *p;
133 ForumEntry *pPrev = 0;
134 for(p=pBase->pNext; p; p=p->pNext){
135 if( !p->pEditPrev && p->mfirt==pBase->fpid ){
136 if( pPrev ){
137 pPrev->nIndent = pBase->nIndent + 1;
138 forumentry_add_to_display(pThread, pPrev);
139 forumthread_display_order(pThread, pPrev);
140 }
@@ -157,11 +156,11 @@
156 ForumThread *pThread;
157 ForumEntry *pEntry;
158 ForumEntry *p;
159 Stmt q;
160 int sid = 1;
161 int firt, fprev;
162 pThread = fossil_malloc( sizeof(*pThread) );
163 memset(pThread, 0, sizeof(*pThread));
164 db_prepare(&q,
165 "SELECT fpid, firt, fprev, (SELECT uuid FROM blob WHERE rid=fpid)"
166 " FROM forumpost"
@@ -171,11 +170,11 @@
170 while( db_step(&q)==SQLITE_ROW ){
171 pEntry = fossil_malloc( sizeof(*pEntry) );
172 memset(pEntry, 0, sizeof(*pEntry));
173 pEntry->fpid = db_column_int(&q, 0);
174 firt = db_column_int(&q, 1);
175 fprev = db_column_int(&q, 2);
176 pEntry->zUuid = fossil_strdup(db_column_text(&q,3));
177 pEntry->mfirt = firt;
178 pEntry->sid = sid++;
179 pEntry->pPrev = pThread->pLast;
180 pEntry->pNext = 0;
@@ -191,35 +190,28 @@
190 pEntry->pIrt = p;
191 break;
192 }
193 }
194 }
195 if( fprev ){
 
 
 
 
 
 
 
 
 
196 ForumEntry *pBase = 0;
197 p = forumentry_backward(pEntry->pPrev, fprev);
198 p->pEditNext = pEntry;
199 pEntry->pEditPrev = p;
200 pEntry->pEditHead = p->pEditHead ? p->pEditHead : p;
201 while( p ){
202 pBase = p;
203 p->pEditTail = pEntry;
204 p = p->pEditPrev;
205 }
206 for(p=pEntry->pNext; p; p=p->pNext){
207 if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid;
208 }
209 }
210 pThread->pLast = pEntry;
211 }
212 db_finalize(&q);
213
214 if( computeHierarchy ){
215 /* Compute the hierarchical display order */
216 pEntry = pThread->pFirst;
217 pEntry->nIndent = 1;
@@ -299,14 +291,16 @@
291 pThread = forumthread_create(froot, 1);
292 fossil_print("Chronological:\n");
293 fossil_print(
294 /* 0 1 2 3 4 5 6 7 */
295 /* 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123 */
296 " sid fpid pIrt pEditPrev mfirt pEditTail hash\n");
297 for(p=pThread->pFirst; p; p=p->pNext){
298 fossil_print("%4d %9d %9d %9d %9d %9d %8.8s\n", p->sid,
299 p->fpid, p->pIrt ? p->pIrt->fpid : 0,
300 p->pEditPrev ? p->pEditPrev->fpid : 0,
301 p->mfirt,
302 p->pEditTail ? p->pEditTail->fpid : 0, p->zUuid);
303 }
304 fossil_print("\nDisplay\n");
305 for(p=pThread->pDisplay; p; p=p->pDisplay){
306 fossil_print("%*s", (p->nIndent-1)*3, "");
@@ -519,16 +513,16 @@
513 ** to be displayed for debugging purposes.
514 */
515 if( PB("threadtable") ){
516 @ <hr>
517 @ <table border="1" cellpadding="3" cellspacing="0">
518 @ <tr><th>sid<th>fpid<th>pIrt<th>mfirt<th>pEditHead<th>pEditTail\
519 @ <th>pEditNext<th>pEditPrev<th>hash
520 for(p=pThread->pFirst; p; p=p->pNext){
521 @ <tr><td>%d(p->sid)<td>%d(p->fpid)\
522 @ <td>%d(p->pIrt?p->pIrt->fpid:0)\
523 @ <td>%d(p->mfirt)\
524 @ <td>%d(p->pEditHead?p->pEditHead->fpid:0)\
525 @ <td>%d(p->pEditTail?p->pEditTail->fpid:0)\
526 @ <td>%d(p->pEditNext?p->pEditNext->fpid:0)\
527 @ <td>%d(p->pEditPrev?p->pEditPrev->fpid:0)\
528 @ <td>%S(p->zUuid)</tr>
529

Keyboard Shortcuts

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