Created
August 31, 2020 08:48
-
-
Save fcharlie/83d0d40dea6367fd824de5578945333e to your computer and use it in GitHub Desktop.
create too many commits
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"os" | |
"time" | |
"github.com/go-git/go-git/v5" | |
"github.com/go-git/go-git/v5/plumbing" | |
"github.com/go-git/go-git/v5/plumbing/object" | |
) | |
// Builder build compile | |
type Builder struct { | |
repo *git.Repository | |
tree plumbing.Hash | |
parent plumbing.Hash | |
message string | |
author object.Signature | |
committer object.Signature | |
refName plumbing.ReferenceName | |
} | |
// NewBuilder new builder | |
func NewBuilder(dir string) (*Builder, error) { | |
repo, err := git.PlainOpen(dir) | |
if err != nil { | |
return nil, err | |
} | |
ref, err := repo.Head() | |
if err != nil { | |
return nil, err | |
} | |
commit, err := repo.CommitObject(ref.Hash()) | |
if err != nil { | |
return nil, err | |
} | |
return &Builder{ | |
repo: repo, | |
parent: ref.Hash(), | |
message: commit.Message, | |
author: commit.Author, | |
committer: commit.Committer, | |
tree: commit.TreeHash, | |
refName: plumbing.NewBranchReferenceName("master")}, nil | |
} | |
// Build todo | |
func (b *Builder) Build() error { | |
now := time.Now() | |
var total int64 | |
for now.Year() < 2101 { | |
total++ | |
b.author.When = now | |
b.committer.When = now | |
newCommit := &object.Commit{ | |
Author: b.author, | |
Committer: b.committer, | |
TreeHash: b.tree, | |
Message: b.message, | |
ParentHashes: []plumbing.Hash{b.parent}, | |
} | |
obj := b.repo.Storer.NewEncodedObject() | |
if err := newCommit.Encode(obj); err != nil { | |
return err | |
} | |
oh, err := b.repo.Storer.SetEncodedObject(obj) | |
if err != nil { | |
return err | |
} | |
b.parent = oh | |
ref := plumbing.NewHashReference(b.refName, oh) | |
if err := b.repo.Storer.SetReference(ref); err != nil { | |
return err | |
} | |
fmt.Fprintf(os.Stderr, "\x1b[2K\r\x1b[01;32m%s total: %d\x1b[0m", oh.String(), total) | |
now = now.Add(time.Hour * 8) | |
} | |
return nil | |
} | |
func main() { | |
if len(os.Args) < 2 { | |
fmt.Fprintf(os.Stderr, "usage: %s git-dir\n", os.Args[0]) | |
os.Exit(1) | |
} | |
b, err := NewBuilder(os.Args[1]) | |
if err != nil { | |
fmt.Fprintf(os.Stderr, "unable open repo: %v\n", err) | |
os.Exit(1) | |
} | |
if err := b.Build(); err != nil { | |
fmt.Fprintf(os.Stderr, "unable create commit: %v\n", err) | |
os.Exit(1) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment