Parcourir la Source

Display last commits for each file/directory

Lucas Stadler 8 ans auparavant
Parent
commit
bef9b2cc18
1 fichiers modifiés avec 68 ajouts et 2 suppressions
  1. 68 2
      quit.go

+ 68 - 2
quit.go

434
434
435
func (fc *FancyFile) Commit() (*FancyCommit, error) {
435
func (fc *FancyFile) Commit() (*FancyCommit, error) {
436
	if fc.commit == nil {
436
	if fc.commit == nil {
437
		commit, err := fc.repo.LookupCommit(fc.entry.Id)
437
		walk, err := fc.repo.Walk()
438
		if err != nil {
438
		if err != nil {
439
			return nil, err
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
	return fc.commit, nil
508
	return fc.commit, nil
445
}
509
}
533
			{{ range $file := .Repo.Commit.Files false }}
597
			{{ range $file := .Repo.Commit.Files false }}
534
			<tr class="file">
598
			<tr class="file">
535
				<td class="file-name file-type-{{ $file.Type }}">{{ $file.Name }}</td>
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
			</tr>
602
			</tr>
537
			{{ end }}
603
			{{ end }}
538
		</table>
604
		</table>