@@ -430,7 +430,7 @@ func HeadCommit(wd ...string) (Commit, error) {
430
430
}
431
431
defer repo .Free ()
432
432
433
- headCommit , err := lookupHeadCommit (repo )
433
+ headCommit , err := lookupCommit (repo )
434
434
if err != nil {
435
435
if err == ErrHeadUnborn {
436
436
return commit , nil
@@ -457,13 +457,14 @@ func HeadCommit(wd ...string) (Commit, error) {
457
457
}
458
458
459
459
// CreateNote creates a git note associated with the head commit
460
- func CreateNote (noteTxt string , nameSpace string , wd ... string ) error {
460
+ func CreateNote (noteTxt , nameSpace , commitHash string , wd ... string ) error {
461
461
defer util .Profile ()()
462
462
463
463
var (
464
464
repo * git.Repository
465
465
err error
466
466
prevNote * git.Note
467
+ commit * git.Commit
467
468
)
468
469
469
470
if len (wd ) > 0 {
@@ -476,26 +477,33 @@ func CreateNote(noteTxt string, nameSpace string, wd ...string) error {
476
477
}
477
478
defer repo .Free ()
478
479
479
- headCommit , err := lookupHeadCommit (repo )
480
+ if commitHash != "" {
481
+
482
+ }
483
+ if commitHash != "" {
484
+ commit , err = lookupCommit (repo , commitHash )
485
+ } else {
486
+ commit , err = lookupCommit (repo )
487
+ }
480
488
if err != nil {
481
489
return err
482
490
}
483
491
484
492
sig := & git.Signature {
485
- Name : headCommit .Author ().Name ,
486
- Email : headCommit .Author ().Email ,
487
- When : headCommit .Author ().When ,
493
+ Name : commit .Author ().Name ,
494
+ Email : commit .Author ().Email ,
495
+ When : commit .Author ().When ,
488
496
}
489
497
490
- prevNote , err = repo .Notes .Read ("refs/notes/" + nameSpace , headCommit .Id ())
498
+ prevNote , err = repo .Notes .Read ("refs/notes/" + nameSpace , commit .Id ())
491
499
492
500
if prevNote != nil {
493
501
noteTxt += "\n " + prevNote .Message ()
494
502
if err := repo .Notes .Remove (
495
503
"refs/notes/" + nameSpace ,
496
504
prevNote .Author (),
497
505
prevNote .Committer (),
498
- headCommit .Id ()); err != nil {
506
+ commit .Id ()); err != nil {
499
507
return err
500
508
}
501
509
@@ -504,11 +512,45 @@ func CreateNote(noteTxt string, nameSpace string, wd ...string) error {
504
512
}
505
513
}
506
514
507
- _ , err = repo .Notes .Create ("refs/notes/" + nameSpace , sig , sig , headCommit .Id (), noteTxt , false )
515
+
516
+ _ , err = repo .Notes .Create ("refs/notes/" + nameSpace , sig , sig , commit .Id (), noteTxt , false )
508
517
509
518
return err
510
519
}
511
520
521
+ func RemoveNote (nameSpace , commitHash string , wd ... string ) error {
522
+ var (
523
+ repo * git.Repository
524
+ err error
525
+ commit * git.Commit
526
+ )
527
+
528
+ if len (wd ) > 0 {
529
+ repo , err = openRepository (wd [0 ])
530
+ } else {
531
+ repo , err = openRepository ()
532
+ }
533
+ if err != nil {
534
+ return err
535
+ }
536
+ defer repo .Free ()
537
+
538
+ commit , err = lookupCommit (repo , commitHash )
539
+
540
+ if err != nil {
541
+ return err
542
+ }
543
+
544
+ sig := & git.Signature {
545
+ Name : commit .Author ().Name ,
546
+ Email : commit .Author ().Email ,
547
+ When : commit .Author ().When ,
548
+ }
549
+
550
+ err = repo .Notes .Remove ("refs/notes/" + nameSpace , sig , sig , commit .Id ())
551
+ return err
552
+ }
553
+
512
554
// CommitNote contains a git note's details
513
555
type CommitNote struct {
514
556
ID string
@@ -611,6 +653,19 @@ func ReadNote(commitID string, nameSpace string, calcStats bool, wd ...string) (
611
653
}, nil
612
654
}
613
655
656
+ func RewriteNote (oldHash , newHash , nameSpace string , wd ... string ) error {
657
+ oldNote , err := ReadNote (oldHash , nameSpace , true , wd ... )
658
+ if err != nil {
659
+ return err
660
+ }
661
+ fmt .Println (oldNote .Note )
662
+ err = CreateNote (oldNote .Note , nameSpace , newHash , wd ... )
663
+ if err != nil {
664
+ return err
665
+ }
666
+ return RemoveNote (nameSpace , oldHash , wd ... )
667
+ }
668
+
614
669
// ConfigSet persists git configuration settings
615
670
func ConfigSet (settings map [string ]string , wd ... string ) error {
616
671
var (
@@ -984,23 +1039,34 @@ var (
984
1039
ErrHeadUnborn = errors .New ("Head commit not found" )
985
1040
)
986
1041
987
- func lookupHeadCommit (repo * git.Repository ) (* git.Commit , error ) {
988
-
989
- headUnborn , err := repo .IsHeadUnborn ()
990
- if err != nil {
991
- return nil , err
992
- }
993
- if headUnborn {
994
- return nil , ErrHeadUnborn
995
- }
1042
+ func lookupCommit (repo * git.Repository , hash ... string ) (* git.Commit , error ) {
1043
+ var (
1044
+ oid * git.Oid
1045
+ err error
1046
+ )
1047
+ if len (hash ) > 0 {
1048
+ oid , err = git .NewOid (hash [0 ])
1049
+ if err != nil {
1050
+ return nil , err
1051
+ }
1052
+ } else {
1053
+ headUnborn , err := repo .IsHeadUnborn ()
1054
+ if err != nil {
1055
+ return nil , err
1056
+ }
1057
+ if headUnborn {
1058
+ return nil , ErrHeadUnborn
1059
+ }
996
1060
997
- headRef , err := repo .Head ()
998
- if err != nil {
999
- return nil , err
1061
+ headRef , err := repo .Head ()
1062
+ if err != nil {
1063
+ return nil , err
1064
+ }
1065
+ defer headRef .Free ()
1066
+ oid = headRef .Target ()
1000
1067
}
1001
- defer headRef .Free ()
1002
1068
1003
- commit , err := repo .LookupCommit (headRef . Target () )
1069
+ commit , err := repo .LookupCommit (oid )
1004
1070
if err != nil {
1005
1071
return nil , err
1006
1072
}
0 commit comments