| | @@ -294,19 +294,21 @@ |
| 294 | 294 | char zPrevDate[20]; |
| 295 | 295 | const char *zA; |
| 296 | 296 | const char *zB; |
| 297 | 297 | int n; |
| 298 | 298 | int baseCheckin; |
| 299 | + int fnid; |
| 299 | 300 | |
| 300 | 301 | Blob title; |
| 301 | 302 | Blob sql; |
| 302 | 303 | HQuery url; |
| 303 | 304 | GraphContext *pGraph; |
| 304 | 305 | int brBg = P("brbg")!=0; |
| 305 | 306 | int uBg = P("ubg")!=0; |
| 306 | 307 | int firstChngOnly = atoi(PD("fco","1"))!=0; |
| 307 | 308 | int fDebug = atoi(PD("debug","0")); |
| 309 | + int fShowId = P("showid")!=0; |
| 308 | 310 | |
| 309 | 311 | login_check_credentials(); |
| 310 | 312 | if( !g.perm.Read ){ login_needed(); return; } |
| 311 | 313 | style_header("File History"); |
| 312 | 314 | login_anonymous_available(); |
| | @@ -317,10 +319,16 @@ |
| 317 | 319 | if( baseCheckin ) firstChngOnly = 1; |
| 318 | 320 | if( !firstChngOnly ) url_add_parameter(&url, "fco", "0"); |
| 319 | 321 | |
| 320 | 322 | zPrevDate[0] = 0; |
| 321 | 323 | zFilename = PD("name",""); |
| 324 | + fnid = db_int(0, "SELECT fnid FROM filename WHERE name=%Q", zFilename); |
| 325 | + if( fnid==0 ){ |
| 326 | + @ No such file: %h(zFilename) |
| 327 | + style_footer(); |
| 328 | + return; |
| 329 | + } |
| 322 | 330 | url_add_parameter(&url, "name", zFilename); |
| 323 | 331 | blob_zero(&sql); |
| 324 | 332 | blob_append_sql(&sql, |
| 325 | 333 | "SELECT" |
| 326 | 334 | " datetime(event.mtime%s)," /* Date of change */ |
| | @@ -337,26 +345,22 @@ |
| 337 | 345 | " mlink.mid," /* check-in ID */ |
| 338 | 346 | " mlink.pfnid", /* Previous filename */ |
| 339 | 347 | timeline_utc(), TAG_BRANCH |
| 340 | 348 | ); |
| 341 | 349 | if( firstChngOnly ){ |
| 342 | | -#if 0 |
| 343 | | - blob_append_sql(&sql, ", min(event.mtime)"); |
| 344 | | -#else |
| 345 | 350 | blob_append_sql(&sql, |
| 346 | 351 | ", min(CASE (SELECT value FROM tagxref" |
| 347 | 352 | " WHERE tagtype>0 AND tagid=%d" |
| 348 | 353 | " AND tagxref.rid=mlink.mid)" |
| 349 | 354 | " WHEN 'trunk' THEN event.mtime-10000 ELSE event.mtime END)", |
| 350 | 355 | TAG_BRANCH); |
| 351 | | -#endif |
| 352 | 356 | } |
| 353 | 357 | blob_append_sql(&sql, |
| 354 | 358 | " FROM mlink, event" |
| 355 | | - " WHERE mlink.fnid IN (SELECT fnid FROM filename WHERE name=%Q)" |
| 359 | + " WHERE mlink.fnid=%d" |
| 356 | 360 | " AND event.objid=mlink.mid", |
| 357 | | - zFilename |
| 361 | + fnid |
| 358 | 362 | ); |
| 359 | 363 | if( baseCheckin ){ |
| 360 | 364 | compute_direct_ancestors(baseCheckin, 10000000); |
| 361 | 365 | blob_append_sql(&sql," AND mlink.mid IN (SELECT rid FROM ancestor)"); |
| 362 | 366 | } |
| | @@ -401,10 +405,11 @@ |
| 401 | 405 | fossil_free(zUuid); |
| 402 | 406 | }else{ |
| 403 | 407 | blob_appendf(&title, "History of files named "); |
| 404 | 408 | hyperlinked_path(zFilename, &title, 0, "tree", ""); |
| 405 | 409 | } |
| 410 | + if( fShowId ) blob_appendf(&title, " (%d)", fnid); |
| 406 | 411 | @ <h2>%b(&title)</h2> |
| 407 | 412 | blob_reset(&title); |
| 408 | 413 | pGraph = graph_init(); |
| 409 | 414 | @ <div id="canvas" style="position:relative;width:1px;height:1px;" |
| 410 | 415 | @ onclick="clickOnGraph(event)"></div> |
| | @@ -455,11 +460,15 @@ |
| 455 | 460 | char *zPrevName = db_text(0, "SELECT name FROM filename WHERE fnid=%d", |
| 456 | 461 | pfnid); |
| 457 | 462 | @ <b>Renamed</b> from |
| 458 | 463 | @ %z(href("%R/finfo?name=%t", zPrevName))%h(zPrevName)</a> |
| 459 | 464 | } |
| 460 | | - @ %z(href("%R/artifact/%s",zUuid))[%S(zUuid)]</a> part of check-in |
| 465 | + @ %z(href("%R/artifact/%s",zUuid))[%S(zUuid)]</a> |
| 466 | + if( fShowId ){ |
| 467 | + @ (%d(frid)) |
| 468 | + } |
| 469 | + @ part of check-in |
| 461 | 470 | }else{ |
| 462 | 471 | char *zNewName; |
| 463 | 472 | zNewName = db_text(0, |
| 464 | 473 | "SELECT name FROM filename WHERE fnid = " |
| 465 | 474 | " (SELECT fnid FROM mlink" |
| | @@ -473,10 +482,13 @@ |
| 473 | 482 | }else{ |
| 474 | 483 | @ <b>Deleted</b> by check-in |
| 475 | 484 | } |
| 476 | 485 | } |
| 477 | 486 | hyperlink_to_uuid(zCkin); |
| 487 | + if( fShowId ){ |
| 488 | + @ (%d(fmid)) |
| 489 | + } |
| 478 | 490 | @ %W(zCom) (user: |
| 479 | 491 | hyperlink_to_user(zUser, zDate, ""); |
| 480 | 492 | @ branch: %h(zBr)) |
| 481 | 493 | if( g.perm.Hyperlink && zUuid ){ |
| 482 | 494 | const char *z = zFilename; |
| 483 | 495 | |