ソースを参照

Display last commits for each file/directory

Lucas Stadler 8 年 前
コミット
bef9b2cc18
共有1 個のファイルを変更した68 個の追加2 個の削除を含む
  1. 68 2
      quit.go

+ 68 - 2
quit.go

@ -434,12 +434,76 @@ func (fc *FancyFile) Name() string {
434 434
435 435
func (fc *FancyFile) Commit() (*FancyCommit, error) {
436 436
	if fc.commit == nil {
437
		commit, err := fc.repo.LookupCommit(fc.entry.Id)
437
		walk, err := fc.repo.Walk()
438 438
		if err != nil {
439 439
			return nil, err
440 440
		}
441 441
442
		fc.commit = NewFancyCommit(commit)
442
		err = walk.PushHead()
443
		if err != nil {
444
			return nil, err
445
		}
446
447
		opts, err := git.DefaultDiffOptions()
448
		if err != nil {
449
			return nil, err
450
		}
451
		opts.Pathspec = []string{fc.entry.Name}
452
453
		var lastCommit *git.Commit
454
		var findErr error
455
		c := 0
456
		err = walk.Iterate(func(commit *git.Commit) bool {
457
			c += 1
458
459
			if commit.ParentCount() <= 0 {
460
				lastCommit = commit
461
				return false
462
			}
463
			tree, err := commit.Tree()
464
			if err != nil {
465
				findErr = err
466
				return false
467
			}
468
469
			parentCommit := commit.Parent(0)
470
			parentTree, err := parentCommit.Tree()
471
			if err != nil {
472
				findErr = err
473
				return false
474
			}
475
476
			diff, err := fc.repo.DiffTreeToTree(parentTree, tree, &opts)
477
			if err != nil {
478
				findErr = err
479
				return false
480
			}
481
482
			n, err := diff.NumDeltas()
483
			if err != nil {
484
				findErr = err
485
				return false
486
			}
487
			if n <= 0 {
488
				return true
489
			}
490
491
			lastCommit = commit
492
			return false
493
		})
494
		if err != nil {
495
			return nil, err
496
		}
497
498
		if findErr != nil {
499
			return nil, err
500
		}
501
502
		if lastCommit == nil {
503
			return nil, fmt.Errorf("did not find commit for %q", fc.entry.Name)
504
		}
505
506
		fc.commit = NewFancyCommit(lastCommit)
443 507
	}
444 508
	return fc.commit, nil
445 509
}
@ -533,6 +597,8 @@ var repoTmpl = template.Must(template.New("").Funcs(repoFuncs).Parse(`<!doctype
533 597
			{{ range $file := .Repo.Commit.Files false }}
534 598
			<tr class="file">
535 599
				<td class="file-name file-type-{{ $file.Type }}">{{ $file.Name }}</td>
600
				<td class="file-commit">{{ $file.Commit.Summary }}</td>
601
				<td class="file-date">{{ $file.Commit.Date.PrettyString }}</td>
536 602
			</tr>
537 603
			{{ end }}
538 604
		</table>