Fossil SCM
Enhance the finfo page to show renames and/or where the file was added.
Commit
dac6424e66a82723a487e44c647f9e5d1ab83c50
Parent
a9372c05f5937dd…
1 file changed
+29
-9
+29
-9
| --- src/finfo.c | ||
| +++ src/finfo.c | ||
| @@ -229,10 +229,12 @@ | ||
| 229 | 229 | const char *zFilename; |
| 230 | 230 | char zPrevDate[20]; |
| 231 | 231 | const char *zA; |
| 232 | 232 | const char *zB; |
| 233 | 233 | int n; |
| 234 | + int fnid; | |
| 235 | + | |
| 234 | 236 | Blob title; |
| 235 | 237 | Blob sql; |
| 236 | 238 | HQuery url; |
| 237 | 239 | GraphContext *pGraph; |
| 238 | 240 | int brBg = P("brbg")!=0; |
| @@ -263,16 +265,15 @@ | ||
| 263 | 265 | " (SELECT uuid FROM blob WHERE rid=mlink.pid)," /* Parent file uuid */ |
| 264 | 266 | " (SELECT uuid FROM blob WHERE rid=mlink.fid)," /* Current file uuid */ |
| 265 | 267 | " (SELECT uuid FROM blob WHERE rid=mlink.mid)," /* Check-in uuid */ |
| 266 | 268 | " event.bgcolor," /* Background color */ |
| 267 | 269 | " (SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0" |
| 268 | - " AND tagxref.rid=mlink.mid)", /* Tags */ | |
| 270 | + " AND tagxref.rid=mlink.mid)," /* Tags */ | |
| 271 | + " mlink.mid," /* check-in ID */ | |
| 272 | + " mlink.pfnid", /* Previous filename */ | |
| 269 | 273 | TAG_BRANCH |
| 270 | 274 | ); |
| 271 | - if( fDebug & FINFO_DEBUG_MLINK ){ | |
| 272 | - blob_appendf(&sql, ", mlink.mid"); | |
| 273 | - } | |
| 274 | 275 | if( firstChngOnly ){ |
| 275 | 276 | blob_appendf(&sql, ", min(event.mtime)"); |
| 276 | 277 | } |
| 277 | 278 | blob_appendf(&sql, |
| 278 | 279 | " FROM mlink, event" |
| @@ -322,18 +323,16 @@ | ||
| 322 | 323 | const char *zPUuid = db_column_text(&q, 5); |
| 323 | 324 | const char *zUuid = db_column_text(&q, 6); |
| 324 | 325 | const char *zCkin = db_column_text(&q,7); |
| 325 | 326 | const char *zBgClr = db_column_text(&q, 8); |
| 326 | 327 | const char *zBr = db_column_text(&q, 9); |
| 327 | - int fmid = 0; | |
| 328 | + int fmid = db_column_int(&q, 10); | |
| 329 | + int pfnid = db_column_int(&q, 11); | |
| 328 | 330 | int gidx; |
| 329 | 331 | char zTime[10]; |
| 330 | 332 | char zShort[20]; |
| 331 | 333 | char zShortCkin[20]; |
| 332 | - if( fDebug & FINFO_DEBUG_MLINK ){ | |
| 333 | - fmid = db_column_int(&q,10); | |
| 334 | - } | |
| 335 | 334 | if( zBr==0 ) zBr = "trunk"; |
| 336 | 335 | if( uBg ){ |
| 337 | 336 | zBgClr = hash_color(zUser); |
| 338 | 337 | }else if( brBg || zBgClr==0 || zBgClr[0]==0 ){ |
| 339 | 338 | zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBr); |
| @@ -356,13 +355,34 @@ | ||
| 356 | 355 | @ <td class="timelineTableCell"> |
| 357 | 356 | } |
| 358 | 357 | sqlite3_snprintf(sizeof(zShort), zShort, "%.10s", zUuid); |
| 359 | 358 | sqlite3_snprintf(sizeof(zShortCkin), zShortCkin, "%.10s", zCkin); |
| 360 | 359 | if( zUuid ){ |
| 360 | + if( fpid==0 ){ | |
| 361 | + @ <b>Added</b> | |
| 362 | + }else if( pfnid ){ | |
| 363 | + char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d", | |
| 364 | + pfnid); | |
| 365 | + @ <b>Renamed</b> from | |
| 366 | + @ %z(href("%R/finfo?name=%t", zPrevName))%h(zPrevName)</a> | |
| 367 | + } | |
| 361 | 368 | @ %z(href("%R/artifact/%s",zUuid))[%S(zUuid)]</a> part of check-in |
| 362 | 369 | }else{ |
| 363 | - @ <b>Deleted</b> by check-in | |
| 370 | + char *zNewName; | |
| 371 | + zNewName = db_text(0, | |
| 372 | + "SELECT name FROM filename WHERE fnid = " | |
| 373 | + " (SELECT fnid FROM mlink" | |
| 374 | + " WHERE mid=%d" | |
| 375 | + " AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q %s))", | |
| 376 | + fmid, zFilename, filename_collation()); | |
| 377 | + if( zNewName ){ | |
| 378 | + @ <b>Renamed</b> to | |
| 379 | + @ %z(href("%R/finfo?name=%t",zNewName))%h(zNewName)</a> by check-in | |
| 380 | + fossil_free(zNewName); | |
| 381 | + }else{ | |
| 382 | + @ <b>Deleted</b> by check-in | |
| 383 | + } | |
| 364 | 384 | } |
| 365 | 385 | hyperlink_to_uuid(zShortCkin); |
| 366 | 386 | @ %h(zCom) (user: |
| 367 | 387 | hyperlink_to_user(zUser, zDate, ""); |
| 368 | 388 | @ branch: %h(zBr)) |
| 369 | 389 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -229,10 +229,12 @@ | |
| 229 | const char *zFilename; |
| 230 | char zPrevDate[20]; |
| 231 | const char *zA; |
| 232 | const char *zB; |
| 233 | int n; |
| 234 | Blob title; |
| 235 | Blob sql; |
| 236 | HQuery url; |
| 237 | GraphContext *pGraph; |
| 238 | int brBg = P("brbg")!=0; |
| @@ -263,16 +265,15 @@ | |
| 263 | " (SELECT uuid FROM blob WHERE rid=mlink.pid)," /* Parent file uuid */ |
| 264 | " (SELECT uuid FROM blob WHERE rid=mlink.fid)," /* Current file uuid */ |
| 265 | " (SELECT uuid FROM blob WHERE rid=mlink.mid)," /* Check-in uuid */ |
| 266 | " event.bgcolor," /* Background color */ |
| 267 | " (SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0" |
| 268 | " AND tagxref.rid=mlink.mid)", /* Tags */ |
| 269 | TAG_BRANCH |
| 270 | ); |
| 271 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 272 | blob_appendf(&sql, ", mlink.mid"); |
| 273 | } |
| 274 | if( firstChngOnly ){ |
| 275 | blob_appendf(&sql, ", min(event.mtime)"); |
| 276 | } |
| 277 | blob_appendf(&sql, |
| 278 | " FROM mlink, event" |
| @@ -322,18 +323,16 @@ | |
| 322 | const char *zPUuid = db_column_text(&q, 5); |
| 323 | const char *zUuid = db_column_text(&q, 6); |
| 324 | const char *zCkin = db_column_text(&q,7); |
| 325 | const char *zBgClr = db_column_text(&q, 8); |
| 326 | const char *zBr = db_column_text(&q, 9); |
| 327 | int fmid = 0; |
| 328 | int gidx; |
| 329 | char zTime[10]; |
| 330 | char zShort[20]; |
| 331 | char zShortCkin[20]; |
| 332 | if( fDebug & FINFO_DEBUG_MLINK ){ |
| 333 | fmid = db_column_int(&q,10); |
| 334 | } |
| 335 | if( zBr==0 ) zBr = "trunk"; |
| 336 | if( uBg ){ |
| 337 | zBgClr = hash_color(zUser); |
| 338 | }else if( brBg || zBgClr==0 || zBgClr[0]==0 ){ |
| 339 | zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBr); |
| @@ -356,13 +355,34 @@ | |
| 356 | @ <td class="timelineTableCell"> |
| 357 | } |
| 358 | sqlite3_snprintf(sizeof(zShort), zShort, "%.10s", zUuid); |
| 359 | sqlite3_snprintf(sizeof(zShortCkin), zShortCkin, "%.10s", zCkin); |
| 360 | if( zUuid ){ |
| 361 | @ %z(href("%R/artifact/%s",zUuid))[%S(zUuid)]</a> part of check-in |
| 362 | }else{ |
| 363 | @ <b>Deleted</b> by check-in |
| 364 | } |
| 365 | hyperlink_to_uuid(zShortCkin); |
| 366 | @ %h(zCom) (user: |
| 367 | hyperlink_to_user(zUser, zDate, ""); |
| 368 | @ branch: %h(zBr)) |
| 369 |
| --- src/finfo.c | |
| +++ src/finfo.c | |
| @@ -229,10 +229,12 @@ | |
| 229 | const char *zFilename; |
| 230 | char zPrevDate[20]; |
| 231 | const char *zA; |
| 232 | const char *zB; |
| 233 | int n; |
| 234 | int fnid; |
| 235 | |
| 236 | Blob title; |
| 237 | Blob sql; |
| 238 | HQuery url; |
| 239 | GraphContext *pGraph; |
| 240 | int brBg = P("brbg")!=0; |
| @@ -263,16 +265,15 @@ | |
| 265 | " (SELECT uuid FROM blob WHERE rid=mlink.pid)," /* Parent file uuid */ |
| 266 | " (SELECT uuid FROM blob WHERE rid=mlink.fid)," /* Current file uuid */ |
| 267 | " (SELECT uuid FROM blob WHERE rid=mlink.mid)," /* Check-in uuid */ |
| 268 | " event.bgcolor," /* Background color */ |
| 269 | " (SELECT value FROM tagxref WHERE tagid=%d AND tagtype>0" |
| 270 | " AND tagxref.rid=mlink.mid)," /* Tags */ |
| 271 | " mlink.mid," /* check-in ID */ |
| 272 | " mlink.pfnid", /* Previous filename */ |
| 273 | TAG_BRANCH |
| 274 | ); |
| 275 | if( firstChngOnly ){ |
| 276 | blob_appendf(&sql, ", min(event.mtime)"); |
| 277 | } |
| 278 | blob_appendf(&sql, |
| 279 | " FROM mlink, event" |
| @@ -322,18 +323,16 @@ | |
| 323 | const char *zPUuid = db_column_text(&q, 5); |
| 324 | const char *zUuid = db_column_text(&q, 6); |
| 325 | const char *zCkin = db_column_text(&q,7); |
| 326 | const char *zBgClr = db_column_text(&q, 8); |
| 327 | const char *zBr = db_column_text(&q, 9); |
| 328 | int fmid = db_column_int(&q, 10); |
| 329 | int pfnid = db_column_int(&q, 11); |
| 330 | int gidx; |
| 331 | char zTime[10]; |
| 332 | char zShort[20]; |
| 333 | char zShortCkin[20]; |
| 334 | if( zBr==0 ) zBr = "trunk"; |
| 335 | if( uBg ){ |
| 336 | zBgClr = hash_color(zUser); |
| 337 | }else if( brBg || zBgClr==0 || zBgClr[0]==0 ){ |
| 338 | zBgClr = strcmp(zBr,"trunk")==0 ? "" : hash_color(zBr); |
| @@ -356,13 +355,34 @@ | |
| 355 | @ <td class="timelineTableCell"> |
| 356 | } |
| 357 | sqlite3_snprintf(sizeof(zShort), zShort, "%.10s", zUuid); |
| 358 | sqlite3_snprintf(sizeof(zShortCkin), zShortCkin, "%.10s", zCkin); |
| 359 | if( zUuid ){ |
| 360 | if( fpid==0 ){ |
| 361 | @ <b>Added</b> |
| 362 | }else if( pfnid ){ |
| 363 | char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d", |
| 364 | pfnid); |
| 365 | @ <b>Renamed</b> from |
| 366 | @ %z(href("%R/finfo?name=%t", zPrevName))%h(zPrevName)</a> |
| 367 | } |
| 368 | @ %z(href("%R/artifact/%s",zUuid))[%S(zUuid)]</a> part of check-in |
| 369 | }else{ |
| 370 | char *zNewName; |
| 371 | zNewName = db_text(0, |
| 372 | "SELECT name FROM filename WHERE fnid = " |
| 373 | " (SELECT fnid FROM mlink" |
| 374 | " WHERE mid=%d" |
| 375 | " AND pfnid IN (SELECT fnid FROM filename WHERE name=%Q %s))", |
| 376 | fmid, zFilename, filename_collation()); |
| 377 | if( zNewName ){ |
| 378 | @ <b>Renamed</b> to |
| 379 | @ %z(href("%R/finfo?name=%t",zNewName))%h(zNewName)</a> by check-in |
| 380 | fossil_free(zNewName); |
| 381 | }else{ |
| 382 | @ <b>Deleted</b> by check-in |
| 383 | } |
| 384 | } |
| 385 | hyperlink_to_uuid(zShortCkin); |
| 386 | @ %h(zCom) (user: |
| 387 | hyperlink_to_user(zUser, zDate, ""); |
| 388 | @ branch: %h(zBr)) |
| 389 |