Fossil SCM
Remove fprev
Commit
d585c347071e7c9bf48b180ad6462707be923c79f902d5bcef37da9690234f00
Parent
c76023e39eb9616…
1 file changed
+14
-20
+14
-20
| --- src/forum.c | ||
| +++ src/forum.c | ||
| @@ -32,11 +32,10 @@ | ||
| 32 | 32 | ** either the initial post, an edit to a post, a reply, or an edit to |
| 33 | 33 | ** a reply. |
| 34 | 34 | */ |
| 35 | 35 | struct ForumEntry { |
| 36 | 36 | int fpid; /* rid for this entry */ |
| 37 | - int fprev; /* zero if initial entry. non-zero if an edit */ | |
| 38 | 37 | int mfirt; /* Root in-reply-to */ |
| 39 | 38 | int sid; /* Serial ID number */ |
| 40 | 39 | char *zUuid; /* Artifact hash */ |
| 41 | 40 | ForumEntry *pIrt; /* This entry replies to pIrt */ |
| 42 | 41 | ForumEntry *pEditHead; /* Original, unedited entry */ |
| @@ -131,11 +130,11 @@ | ||
| 131 | 130 | ForumEntry *pBase /* Add replies to this entry */ |
| 132 | 131 | ){ |
| 133 | 132 | ForumEntry *p; |
| 134 | 133 | ForumEntry *pPrev = 0; |
| 135 | 134 | 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 ){ | |
| 137 | 136 | if( pPrev ){ |
| 138 | 137 | pPrev->nIndent = pBase->nIndent + 1; |
| 139 | 138 | forumentry_add_to_display(pThread, pPrev); |
| 140 | 139 | forumthread_display_order(pThread, pPrev); |
| 141 | 140 | } |
| @@ -157,11 +156,11 @@ | ||
| 157 | 156 | ForumThread *pThread; |
| 158 | 157 | ForumEntry *pEntry; |
| 159 | 158 | ForumEntry *p; |
| 160 | 159 | Stmt q; |
| 161 | 160 | int sid = 1; |
| 162 | - int firt; | |
| 161 | + int firt, fprev; | |
| 163 | 162 | pThread = fossil_malloc( sizeof(*pThread) ); |
| 164 | 163 | memset(pThread, 0, sizeof(*pThread)); |
| 165 | 164 | db_prepare(&q, |
| 166 | 165 | "SELECT fpid, firt, fprev, (SELECT uuid FROM blob WHERE rid=fpid)" |
| 167 | 166 | " FROM forumpost" |
| @@ -171,11 +170,11 @@ | ||
| 171 | 170 | while( db_step(&q)==SQLITE_ROW ){ |
| 172 | 171 | pEntry = fossil_malloc( sizeof(*pEntry) ); |
| 173 | 172 | memset(pEntry, 0, sizeof(*pEntry)); |
| 174 | 173 | pEntry->fpid = db_column_int(&q, 0); |
| 175 | 174 | firt = db_column_int(&q, 1); |
| 176 | - pEntry->fprev = db_column_int(&q, 2); | |
| 175 | + fprev = db_column_int(&q, 2); | |
| 177 | 176 | pEntry->zUuid = fossil_strdup(db_column_text(&q,3)); |
| 178 | 177 | pEntry->mfirt = firt; |
| 179 | 178 | pEntry->sid = sid++; |
| 180 | 179 | pEntry->pPrev = pThread->pLast; |
| 181 | 180 | pEntry->pNext = 0; |
| @@ -191,35 +190,28 @@ | ||
| 191 | 190 | pEntry->pIrt = p; |
| 192 | 191 | break; |
| 193 | 192 | } |
| 194 | 193 | } |
| 195 | 194 | } |
| 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 ){ | |
| 206 | 196 | ForumEntry *pBase = 0; |
| 207 | - p = forumentry_backward(pEntry->pPrev, pEntry->fprev); | |
| 197 | + p = forumentry_backward(pEntry->pPrev, fprev); | |
| 208 | 198 | p->pEditNext = pEntry; |
| 209 | 199 | pEntry->pEditPrev = p; |
| 210 | 200 | pEntry->pEditHead = p->pEditHead ? p->pEditHead : p; |
| 211 | 201 | while( p ){ |
| 212 | 202 | pBase = p; |
| 213 | 203 | p->pEditTail = pEntry; |
| 214 | - p = pBase->pEditPrev; | |
| 204 | + p = p->pEditPrev; | |
| 215 | 205 | } |
| 216 | 206 | for(p=pEntry->pNext; p; p=p->pNext){ |
| 217 | 207 | if( p->mfirt==pEntry->fpid ) p->mfirt = pBase->fpid; |
| 218 | 208 | } |
| 219 | 209 | } |
| 210 | + pThread->pLast = pEntry; | |
| 220 | 211 | } |
| 212 | + db_finalize(&q); | |
| 221 | 213 | |
| 222 | 214 | if( computeHierarchy ){ |
| 223 | 215 | /* Compute the hierarchical display order */ |
| 224 | 216 | pEntry = pThread->pFirst; |
| 225 | 217 | pEntry->nIndent = 1; |
| @@ -299,14 +291,16 @@ | ||
| 299 | 291 | pThread = forumthread_create(froot, 1); |
| 300 | 292 | fossil_print("Chronological:\n"); |
| 301 | 293 | fossil_print( |
| 302 | 294 | /* 0 1 2 3 4 5 6 7 */ |
| 303 | 295 | /* 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"); | |
| 305 | 297 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 306 | 298 | 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, | |
| 308 | 302 | p->pEditTail ? p->pEditTail->fpid : 0, p->zUuid); |
| 309 | 303 | } |
| 310 | 304 | fossil_print("\nDisplay\n"); |
| 311 | 305 | for(p=pThread->pDisplay; p; p=p->pDisplay){ |
| 312 | 306 | fossil_print("%*s", (p->nIndent-1)*3, ""); |
| @@ -519,16 +513,16 @@ | ||
| 519 | 513 | ** to be displayed for debugging purposes. |
| 520 | 514 | */ |
| 521 | 515 | if( PB("threadtable") ){ |
| 522 | 516 | @ <hr> |
| 523 | 517 | @ <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\ | |
| 525 | 519 | @ <th>pEditNext<th>pEditPrev<th>hash |
| 526 | 520 | for(p=pThread->pFirst; p; p=p->pNext){ |
| 527 | 521 | @ <tr><td>%d(p->sid)<td>%d(p->fpid)\ |
| 528 | 522 | @ <td>%d(p->pIrt?p->pIrt->fpid:0)\ |
| 529 | - @ <td>%d(p->fprev)<td>%d(p->mfirt)\ | |
| 523 | + @ <td>%d(p->mfirt)\ | |
| 530 | 524 | @ <td>%d(p->pEditHead?p->pEditHead->fpid:0)\ |
| 531 | 525 | @ <td>%d(p->pEditTail?p->pEditTail->fpid:0)\ |
| 532 | 526 | @ <td>%d(p->pEditNext?p->pEditNext->fpid:0)\ |
| 533 | 527 | @ <td>%d(p->pEditPrev?p->pEditPrev->fpid:0)\ |
| 534 | 528 | @ <td>%S(p->zUuid)</tr> |
| 535 | 529 |
| --- 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 |