-rw-r--r-- | cgit.css | 6 | ||||
-rwxr-xr-x | tests/t0105-commit.sh | 2 | ||||
-rw-r--r-- | ui-commit.c | 4 | ||||
-rw-r--r-- | ui-log.h | 1 |
4 files changed, 12 insertions, 1 deletions
@@ -311,268 +311,274 @@ table.diffstat th { | |||
311 | font-weight: normal; | 311 | font-weight: normal; |
312 | text-align: left; | 312 | text-align: left; |
313 | text-decoration: underline; | 313 | text-decoration: underline; |
314 | padding: 0.1em 1em 0.1em 0.1em; | 314 | padding: 0.1em 1em 0.1em 0.1em; |
315 | font-size: 100%; | 315 | font-size: 100%; |
316 | } | 316 | } |
317 | 317 | ||
318 | table.diffstat td { | 318 | table.diffstat td { |
319 | padding: 0.2em 0.2em 0.1em 0.1em; | 319 | padding: 0.2em 0.2em 0.1em 0.1em; |
320 | font-size: 100%; | 320 | font-size: 100%; |
321 | border: none; | 321 | border: none; |
322 | } | 322 | } |
323 | 323 | ||
324 | table.diffstat td.mode { | 324 | table.diffstat td.mode { |
325 | white-space: nowrap; | 325 | white-space: nowrap; |
326 | } | 326 | } |
327 | 327 | ||
328 | table.diffstat td span.modechange { | 328 | table.diffstat td span.modechange { |
329 | padding-left: 1em; | 329 | padding-left: 1em; |
330 | color: red; | 330 | color: red; |
331 | } | 331 | } |
332 | 332 | ||
333 | table.diffstat td.add a { | 333 | table.diffstat td.add a { |
334 | color: green; | 334 | color: green; |
335 | } | 335 | } |
336 | 336 | ||
337 | table.diffstat td.del a { | 337 | table.diffstat td.del a { |
338 | color: red; | 338 | color: red; |
339 | } | 339 | } |
340 | 340 | ||
341 | table.diffstat td.upd a { | 341 | table.diffstat td.upd a { |
342 | color: blue; | 342 | color: blue; |
343 | } | 343 | } |
344 | 344 | ||
345 | table.diffstat td.graph { | 345 | table.diffstat td.graph { |
346 | width: 500px; | 346 | width: 500px; |
347 | vertical-align: middle; | 347 | vertical-align: middle; |
348 | } | 348 | } |
349 | 349 | ||
350 | table.diffstat td.graph table { | 350 | table.diffstat td.graph table { |
351 | border: none; | 351 | border: none; |
352 | } | 352 | } |
353 | 353 | ||
354 | table.diffstat td.graph td { | 354 | table.diffstat td.graph td { |
355 | padding: 0px; | 355 | padding: 0px; |
356 | border: 0px; | 356 | border: 0px; |
357 | height: 7pt; | 357 | height: 7pt; |
358 | } | 358 | } |
359 | 359 | ||
360 | table.diffstat td.graph td.add { | 360 | table.diffstat td.graph td.add { |
361 | background-color: #5c5; | 361 | background-color: #5c5; |
362 | } | 362 | } |
363 | 363 | ||
364 | table.diffstat td.graph td.rem { | 364 | table.diffstat td.graph td.rem { |
365 | background-color: #c55; | 365 | background-color: #c55; |
366 | } | 366 | } |
367 | 367 | ||
368 | div.diffstat-summary { | 368 | div.diffstat-summary { |
369 | color: #888; | 369 | color: #888; |
370 | padding-top: 0.5em; | 370 | padding-top: 0.5em; |
371 | } | 371 | } |
372 | 372 | ||
373 | table.diff { | 373 | table.diff { |
374 | width: 100%; | 374 | width: 100%; |
375 | } | 375 | } |
376 | 376 | ||
377 | table.diff td { | 377 | table.diff td { |
378 | font-family: monospace; | 378 | font-family: monospace; |
379 | white-space: pre; | 379 | white-space: pre; |
380 | } | 380 | } |
381 | 381 | ||
382 | table.diff td div.head { | 382 | table.diff td div.head { |
383 | font-weight: bold; | 383 | font-weight: bold; |
384 | margin-top: 1em; | 384 | margin-top: 1em; |
385 | color: black; | 385 | color: black; |
386 | } | 386 | } |
387 | 387 | ||
388 | table.diff td div.hunk { | 388 | table.diff td div.hunk { |
389 | color: #009; | 389 | color: #009; |
390 | } | 390 | } |
391 | 391 | ||
392 | table.diff td div.add { | 392 | table.diff td div.add { |
393 | color: green; | 393 | color: green; |
394 | } | 394 | } |
395 | 395 | ||
396 | table.diff td div.del { | 396 | table.diff td div.del { |
397 | color: red; | 397 | color: red; |
398 | } | 398 | } |
399 | 399 | ||
400 | .sha1 { | 400 | .sha1 { |
401 | font-family: monospace; | 401 | font-family: monospace; |
402 | font-size: 90%; | 402 | font-size: 90%; |
403 | } | 403 | } |
404 | 404 | ||
405 | .left { | 405 | .left { |
406 | text-align: left; | 406 | text-align: left; |
407 | } | 407 | } |
408 | 408 | ||
409 | .right { | 409 | .right { |
410 | text-align: right; | 410 | text-align: right; |
411 | } | 411 | } |
412 | 412 | ||
413 | table.list td.repogroup { | 413 | table.list td.repogroup { |
414 | font-style: italic; | 414 | font-style: italic; |
415 | color: #888; | 415 | color: #888; |
416 | } | 416 | } |
417 | 417 | ||
418 | a.button { | 418 | a.button { |
419 | font-size: 80%; | 419 | font-size: 80%; |
420 | padding: 0em 0.5em; | 420 | padding: 0em 0.5em; |
421 | } | 421 | } |
422 | 422 | ||
423 | a.primary { | 423 | a.primary { |
424 | font-size: 100%; | 424 | font-size: 100%; |
425 | } | 425 | } |
426 | 426 | ||
427 | a.secondary { | 427 | a.secondary { |
428 | font-size: 90%; | 428 | font-size: 90%; |
429 | } | 429 | } |
430 | 430 | ||
431 | td.toplevel-repo { | 431 | td.toplevel-repo { |
432 | 432 | ||
433 | } | 433 | } |
434 | 434 | ||
435 | table.list td.sublevel-repo { | 435 | table.list td.sublevel-repo { |
436 | padding-left: 1.5em; | 436 | padding-left: 1.5em; |
437 | } | 437 | } |
438 | 438 | ||
439 | div.pager { | 439 | div.pager { |
440 | text-align: center; | 440 | text-align: center; |
441 | margin: 1em 0em 0em 0em; | 441 | margin: 1em 0em 0em 0em; |
442 | } | 442 | } |
443 | 443 | ||
444 | div.pager a { | 444 | div.pager a { |
445 | color: #777; | 445 | color: #777; |
446 | margin: 0em 0.5em; | 446 | margin: 0em 0.5em; |
447 | } | 447 | } |
448 | 448 | ||
449 | span.age-mins { | 449 | span.age-mins { |
450 | font-weight: bold; | 450 | font-weight: bold; |
451 | color: #080; | 451 | color: #080; |
452 | } | 452 | } |
453 | 453 | ||
454 | span.age-hours { | 454 | span.age-hours { |
455 | color: #080; | 455 | color: #080; |
456 | } | 456 | } |
457 | 457 | ||
458 | span.age-days { | 458 | span.age-days { |
459 | color: #040; | 459 | color: #040; |
460 | } | 460 | } |
461 | 461 | ||
462 | span.age-weeks { | 462 | span.age-weeks { |
463 | color: #444; | 463 | color: #444; |
464 | } | 464 | } |
465 | 465 | ||
466 | span.age-months { | 466 | span.age-months { |
467 | color: #888; | 467 | color: #888; |
468 | } | 468 | } |
469 | 469 | ||
470 | span.age-years { | 470 | span.age-years { |
471 | color: #bbb; | 471 | color: #bbb; |
472 | } | 472 | } |
473 | div.footer { | 473 | div.footer { |
474 | margin-top: 0.5em; | 474 | margin-top: 0.5em; |
475 | text-align: center; | 475 | text-align: center; |
476 | font-size: 80%; | 476 | font-size: 80%; |
477 | color: #ccc; | 477 | color: #ccc; |
478 | } | 478 | } |
479 | a.branch-deco { | 479 | a.branch-deco { |
480 | margin: 0px 0.5em; | 480 | margin: 0px 0.5em; |
481 | padding: 0px 0.25em; | 481 | padding: 0px 0.25em; |
482 | background-color: #88ff88; | 482 | background-color: #88ff88; |
483 | border: solid 1px #007700; | 483 | border: solid 1px #007700; |
484 | } | 484 | } |
485 | a.tag-deco { | 485 | a.tag-deco { |
486 | margin: 0px 0.5em; | 486 | margin: 0px 0.5em; |
487 | padding: 0px 0.25em; | 487 | padding: 0px 0.25em; |
488 | background-color: #ffff88; | 488 | background-color: #ffff88; |
489 | border: solid 1px #777700; | 489 | border: solid 1px #777700; |
490 | } | 490 | } |
491 | a.remote-deco { | 491 | a.remote-deco { |
492 | margin: 0px 0.5em; | 492 | margin: 0px 0.5em; |
493 | padding: 0px 0.25em; | 493 | padding: 0px 0.25em; |
494 | background-color: #ccccff; | 494 | background-color: #ccccff; |
495 | border: solid 1px #000077; | 495 | border: solid 1px #000077; |
496 | } | 496 | } |
497 | a.deco { | 497 | a.deco { |
498 | margin: 0px 0.5em; | 498 | margin: 0px 0.5em; |
499 | padding: 0px 0.25em; | 499 | padding: 0px 0.25em; |
500 | background-color: #ff8888; | 500 | background-color: #ff8888; |
501 | border: solid 1px #770000; | 501 | border: solid 1px #770000; |
502 | } | 502 | } |
503 | |||
504 | div.commit-subject a { | ||
505 | margin-left: 1em; | ||
506 | font-size: 75%; | ||
507 | } | ||
508 | |||
503 | table.stats { | 509 | table.stats { |
504 | border: solid 1px black; | 510 | border: solid 1px black; |
505 | border-collapse: collapse; | 511 | border-collapse: collapse; |
506 | } | 512 | } |
507 | 513 | ||
508 | table.stats th { | 514 | table.stats th { |
509 | text-align: left; | 515 | text-align: left; |
510 | padding: 1px 0.5em; | 516 | padding: 1px 0.5em; |
511 | background-color: #eee; | 517 | background-color: #eee; |
512 | border: solid 1px black; | 518 | border: solid 1px black; |
513 | } | 519 | } |
514 | 520 | ||
515 | table.stats td { | 521 | table.stats td { |
516 | text-align: right; | 522 | text-align: right; |
517 | padding: 1px 0.5em; | 523 | padding: 1px 0.5em; |
518 | border: solid 1px black; | 524 | border: solid 1px black; |
519 | } | 525 | } |
520 | 526 | ||
521 | table.stats td.total { | 527 | table.stats td.total { |
522 | font-weight: bold; | 528 | font-weight: bold; |
523 | text-align: left; | 529 | text-align: left; |
524 | } | 530 | } |
525 | 531 | ||
526 | table.stats td.sum { | 532 | table.stats td.sum { |
527 | color: #c00; | 533 | color: #c00; |
528 | font-weight: bold; | 534 | font-weight: bold; |
529 | /*background-color: #eee; */ | 535 | /*background-color: #eee; */ |
530 | } | 536 | } |
531 | 537 | ||
532 | table.stats td.left { | 538 | table.stats td.left { |
533 | text-align: left; | 539 | text-align: left; |
534 | } | 540 | } |
535 | 541 | ||
536 | table.vgraph { | 542 | table.vgraph { |
537 | border-collapse: separate; | 543 | border-collapse: separate; |
538 | border: solid 1px black; | 544 | border: solid 1px black; |
539 | height: 200px; | 545 | height: 200px; |
540 | } | 546 | } |
541 | 547 | ||
542 | table.vgraph th { | 548 | table.vgraph th { |
543 | background-color: #eee; | 549 | background-color: #eee; |
544 | font-weight: bold; | 550 | font-weight: bold; |
545 | border: solid 1px white; | 551 | border: solid 1px white; |
546 | padding: 1px 0.5em; | 552 | padding: 1px 0.5em; |
547 | } | 553 | } |
548 | 554 | ||
549 | table.vgraph td { | 555 | table.vgraph td { |
550 | vertical-align: bottom; | 556 | vertical-align: bottom; |
551 | padding: 0px 10px; | 557 | padding: 0px 10px; |
552 | } | 558 | } |
553 | 559 | ||
554 | table.vgraph div.bar { | 560 | table.vgraph div.bar { |
555 | background-color: #eee; | 561 | background-color: #eee; |
556 | } | 562 | } |
557 | 563 | ||
558 | table.hgraph { | 564 | table.hgraph { |
559 | border: solid 1px black; | 565 | border: solid 1px black; |
560 | width: 800px; | 566 | width: 800px; |
561 | } | 567 | } |
562 | 568 | ||
563 | table.hgraph th { | 569 | table.hgraph th { |
564 | background-color: #eee; | 570 | background-color: #eee; |
565 | font-weight: bold; | 571 | font-weight: bold; |
566 | border: solid 1px black; | 572 | border: solid 1px black; |
567 | padding: 1px 0.5em; | 573 | padding: 1px 0.5em; |
568 | } | 574 | } |
569 | 575 | ||
570 | table.hgraph td { | 576 | table.hgraph td { |
571 | vertical-align: center; | 577 | vertical-align: center; |
572 | padding: 2px 2px; | 578 | padding: 2px 2px; |
573 | } | 579 | } |
574 | 580 | ||
575 | table.hgraph div.bar { | 581 | table.hgraph div.bar { |
576 | background-color: #eee; | 582 | background-color: #eee; |
577 | height: 1em; | 583 | height: 1em; |
578 | } | 584 | } |
diff --git a/tests/t0105-commit.sh b/tests/t0105-commit.sh index a864612..ae794c8 100755 --- a/tests/t0105-commit.sh +++ b/tests/t0105-commit.sh | |||
@@ -1,37 +1,37 @@ | |||
1 | #!/bin/sh | 1 | #!/bin/sh |
2 | 2 | ||
3 | . ./setup.sh | 3 | . ./setup.sh |
4 | 4 | ||
5 | prepare_tests "Check content on commit page" | 5 | prepare_tests "Check content on commit page" |
6 | 6 | ||
7 | run_test 'generate foo/commit' 'cgit_url "foo/commit" >trash/tmp' | 7 | run_test 'generate foo/commit' 'cgit_url "foo/commit" >trash/tmp' |
8 | run_test 'find tree link' 'grep -e "<a href=./foo/tree/.>" trash/tmp' | 8 | run_test 'find tree link' 'grep -e "<a href=./foo/tree/.>" trash/tmp' |
9 | run_test 'find parent link' 'grep -E "<a href=./foo/commit/\?id=.+>" trash/tmp' | 9 | run_test 'find parent link' 'grep -E "<a href=./foo/commit/\?id=.+>" trash/tmp' |
10 | 10 | ||
11 | run_test 'find commit subject' ' | 11 | run_test 'find commit subject' ' |
12 | grep -e "<div class=.commit-subject.>commit 5</div>" trash/tmp | 12 | grep -e "<div class=.commit-subject.>commit 5<" trash/tmp |
13 | ' | 13 | ' |
14 | 14 | ||
15 | run_test 'find commit msg' 'grep -e "<div class=.commit-msg.></div>" trash/tmp' | 15 | run_test 'find commit msg' 'grep -e "<div class=.commit-msg.></div>" trash/tmp' |
16 | run_test 'find diffstat' 'grep -e "<table summary=.diffstat. class=.diffstat.>" trash/tmp' | 16 | run_test 'find diffstat' 'grep -e "<table summary=.diffstat. class=.diffstat.>" trash/tmp' |
17 | 17 | ||
18 | run_test 'find diff summary' ' | 18 | run_test 'find diff summary' ' |
19 | grep -e "1 files changed, 1 insertions, 0 deletions" trash/tmp | 19 | grep -e "1 files changed, 1 insertions, 0 deletions" trash/tmp |
20 | ' | 20 | ' |
21 | 21 | ||
22 | run_test 'get root commit' ' | 22 | run_test 'get root commit' ' |
23 | root=$(cd trash/repos/foo && git rev-list --reverse HEAD | head -1) && | 23 | root=$(cd trash/repos/foo && git rev-list --reverse HEAD | head -1) && |
24 | cgit_url "foo/commit&id=$root" >trash/tmp && | 24 | cgit_url "foo/commit&id=$root" >trash/tmp && |
25 | grep "</html>" trash/tmp | 25 | grep "</html>" trash/tmp |
26 | ' | 26 | ' |
27 | 27 | ||
28 | run_test 'root commit contains diffstat' ' | 28 | run_test 'root commit contains diffstat' ' |
29 | grep "<a href=./foo/diff/file-1.id=[0-9a-f]\{40\}.>file-1</a>" trash/tmp | 29 | grep "<a href=./foo/diff/file-1.id=[0-9a-f]\{40\}.>file-1</a>" trash/tmp |
30 | ' | 30 | ' |
31 | 31 | ||
32 | run_test 'root commit contains diff' ' | 32 | run_test 'root commit contains diff' ' |
33 | grep ">diff --git a/file-1 b/file-1<" trash/tmp && | 33 | grep ">diff --git a/file-1 b/file-1<" trash/tmp && |
34 | grep -e "<div class=.add.>+1</div>" trash/tmp | 34 | grep -e "<div class=.add.>+1</div>" trash/tmp |
35 | ' | 35 | ' |
36 | 36 | ||
37 | tests_done | 37 | tests_done |
diff --git a/ui-commit.c b/ui-commit.c index a6a85a4..41ce70e 100644 --- a/ui-commit.c +++ b/ui-commit.c | |||
@@ -1,102 +1,106 @@ | |||
1 | /* ui-commit.c: generate commit view | 1 | /* ui-commit.c: generate commit view |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include "cgit.h" | 9 | #include "cgit.h" |
10 | #include "html.h" | 10 | #include "html.h" |
11 | #include "ui-shared.h" | 11 | #include "ui-shared.h" |
12 | #include "ui-diff.h" | 12 | #include "ui-diff.h" |
13 | #include "ui-log.h" | ||
13 | 14 | ||
14 | void cgit_print_commit(char *hex) | 15 | void cgit_print_commit(char *hex) |
15 | { | 16 | { |
16 | struct commit *commit, *parent; | 17 | struct commit *commit, *parent; |
17 | struct commitinfo *info; | 18 | struct commitinfo *info; |
18 | struct commit_list *p; | 19 | struct commit_list *p; |
19 | unsigned char sha1[20]; | 20 | unsigned char sha1[20]; |
20 | char *tmp; | 21 | char *tmp; |
21 | int parents = 0; | 22 | int parents = 0; |
22 | 23 | ||
23 | if (!hex) | 24 | if (!hex) |
24 | hex = ctx.qry.head; | 25 | hex = ctx.qry.head; |
25 | 26 | ||
26 | if (get_sha1(hex, sha1)) { | 27 | if (get_sha1(hex, sha1)) { |
27 | cgit_print_error(fmt("Bad object id: %s", hex)); | 28 | cgit_print_error(fmt("Bad object id: %s", hex)); |
28 | return; | 29 | return; |
29 | } | 30 | } |
30 | commit = lookup_commit_reference(sha1); | 31 | commit = lookup_commit_reference(sha1); |
31 | if (!commit) { | 32 | if (!commit) { |
32 | cgit_print_error(fmt("Bad commit reference: %s", hex)); | 33 | cgit_print_error(fmt("Bad commit reference: %s", hex)); |
33 | return; | 34 | return; |
34 | } | 35 | } |
35 | info = cgit_parse_commit(commit); | 36 | info = cgit_parse_commit(commit); |
36 | 37 | ||
38 | load_ref_decorations(); | ||
39 | |||
37 | html("<table summary='commit info' class='commit-info'>\n"); | 40 | html("<table summary='commit info' class='commit-info'>\n"); |
38 | html("<tr><th>author</th><td>"); | 41 | html("<tr><th>author</th><td>"); |
39 | html_txt(info->author); | 42 | html_txt(info->author); |
40 | html(" "); | 43 | html(" "); |
41 | html_txt(info->author_email); | 44 | html_txt(info->author_email); |
42 | html("</td><td class='right'>"); | 45 | html("</td><td class='right'>"); |
43 | cgit_print_date(info->author_date, FMT_LONGDATE, ctx.cfg.local_time); | 46 | cgit_print_date(info->author_date, FMT_LONGDATE, ctx.cfg.local_time); |
44 | html("</td></tr>\n"); | 47 | html("</td></tr>\n"); |
45 | html("<tr><th>committer</th><td>"); | 48 | html("<tr><th>committer</th><td>"); |
46 | html_txt(info->committer); | 49 | html_txt(info->committer); |
47 | html(" "); | 50 | html(" "); |
48 | html_txt(info->committer_email); | 51 | html_txt(info->committer_email); |
49 | html("</td><td class='right'>"); | 52 | html("</td><td class='right'>"); |
50 | cgit_print_date(info->committer_date, FMT_LONGDATE, ctx.cfg.local_time); | 53 | cgit_print_date(info->committer_date, FMT_LONGDATE, ctx.cfg.local_time); |
51 | html("</td></tr>\n"); | 54 | html("</td></tr>\n"); |
52 | html("<tr><th>commit</th><td colspan='2' class='sha1'>"); | 55 | html("<tr><th>commit</th><td colspan='2' class='sha1'>"); |
53 | tmp = sha1_to_hex(commit->object.sha1); | 56 | tmp = sha1_to_hex(commit->object.sha1); |
54 | cgit_commit_link(tmp, NULL, NULL, ctx.qry.head, tmp); | 57 | cgit_commit_link(tmp, NULL, NULL, ctx.qry.head, tmp); |
55 | html(" ("); | 58 | html(" ("); |
56 | cgit_patch_link("patch", NULL, NULL, NULL, tmp); | 59 | cgit_patch_link("patch", NULL, NULL, NULL, tmp); |
57 | html(")</td></tr>\n"); | 60 | html(")</td></tr>\n"); |
58 | html("<tr><th>tree</th><td colspan='2' class='sha1'>"); | 61 | html("<tr><th>tree</th><td colspan='2' class='sha1'>"); |
59 | tmp = xstrdup(hex); | 62 | tmp = xstrdup(hex); |
60 | cgit_tree_link(sha1_to_hex(commit->tree->object.sha1), NULL, NULL, | 63 | cgit_tree_link(sha1_to_hex(commit->tree->object.sha1), NULL, NULL, |
61 | ctx.qry.head, tmp, NULL); | 64 | ctx.qry.head, tmp, NULL); |
62 | html("</td></tr>\n"); | 65 | html("</td></tr>\n"); |
63 | for (p = commit->parents; p ; p = p->next) { | 66 | for (p = commit->parents; p ; p = p->next) { |
64 | parent = lookup_commit_reference(p->item->object.sha1); | 67 | parent = lookup_commit_reference(p->item->object.sha1); |
65 | if (!parent) { | 68 | if (!parent) { |
66 | html("<tr><td colspan='3'>"); | 69 | html("<tr><td colspan='3'>"); |
67 | cgit_print_error("Error reading parent commit"); | 70 | cgit_print_error("Error reading parent commit"); |
68 | html("</td></tr>"); | 71 | html("</td></tr>"); |
69 | continue; | 72 | continue; |
70 | } | 73 | } |
71 | html("<tr><th>parent</th>" | 74 | html("<tr><th>parent</th>" |
72 | "<td colspan='2' class='sha1'>"); | 75 | "<td colspan='2' class='sha1'>"); |
73 | cgit_commit_link(sha1_to_hex(p->item->object.sha1), NULL, NULL, | 76 | cgit_commit_link(sha1_to_hex(p->item->object.sha1), NULL, NULL, |
74 | ctx.qry.head, sha1_to_hex(p->item->object.sha1)); | 77 | ctx.qry.head, sha1_to_hex(p->item->object.sha1)); |
75 | html(" ("); | 78 | html(" ("); |
76 | cgit_diff_link("diff", NULL, NULL, ctx.qry.head, hex, | 79 | cgit_diff_link("diff", NULL, NULL, ctx.qry.head, hex, |
77 | sha1_to_hex(p->item->object.sha1), NULL); | 80 | sha1_to_hex(p->item->object.sha1), NULL); |
78 | html(")</td></tr>"); | 81 | html(")</td></tr>"); |
79 | parents++; | 82 | parents++; |
80 | } | 83 | } |
81 | if (ctx.repo->snapshots) { | 84 | if (ctx.repo->snapshots) { |
82 | html("<tr><th>download</th><td colspan='2' class='sha1'>"); | 85 | html("<tr><th>download</th><td colspan='2' class='sha1'>"); |
83 | cgit_print_snapshot_links(ctx.qry.repo, ctx.qry.head, | 86 | cgit_print_snapshot_links(ctx.qry.repo, ctx.qry.head, |
84 | hex, ctx.repo->snapshots); | 87 | hex, ctx.repo->snapshots); |
85 | html("</td></tr>"); | 88 | html("</td></tr>"); |
86 | } | 89 | } |
87 | html("</table>\n"); | 90 | html("</table>\n"); |
88 | html("<div class='commit-subject'>"); | 91 | html("<div class='commit-subject'>"); |
89 | html_txt(info->subject); | 92 | html_txt(info->subject); |
93 | show_commit_decorations(commit); | ||
90 | html("</div>"); | 94 | html("</div>"); |
91 | html("<div class='commit-msg'>"); | 95 | html("<div class='commit-msg'>"); |
92 | html_txt(info->msg); | 96 | html_txt(info->msg); |
93 | html("</div>"); | 97 | html("</div>"); |
94 | if (parents < 3) { | 98 | if (parents < 3) { |
95 | if (parents) | 99 | if (parents) |
96 | tmp = sha1_to_hex(commit->parents->item->object.sha1); | 100 | tmp = sha1_to_hex(commit->parents->item->object.sha1); |
97 | else | 101 | else |
98 | tmp = NULL; | 102 | tmp = NULL; |
99 | cgit_print_diff(ctx.qry.sha1, tmp, NULL); | 103 | cgit_print_diff(ctx.qry.sha1, tmp, NULL); |
100 | } | 104 | } |
101 | cgit_free_commitinfo(info); | 105 | cgit_free_commitinfo(info); |
102 | } | 106 | } |
@@ -1,7 +1,8 @@ | |||
1 | #ifndef UI_LOG_H | 1 | #ifndef UI_LOG_H |
2 | #define UI_LOG_H | 2 | #define UI_LOG_H |
3 | 3 | ||
4 | extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, | 4 | extern void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, |
5 | char *pattern, char *path, int pager); | 5 | char *pattern, char *path, int pager); |
6 | extern void show_commit_decorations(struct commit *commit); | ||
6 | 7 | ||
7 | #endif /* UI_LOG_H */ | 8 | #endif /* UI_LOG_H */ |