Skip to content

Instantly share code, notes, and snippets.

@fcharlie
Created August 31, 2020 08:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fcharlie/83d0d40dea6367fd824de5578945333e to your computer and use it in GitHub Desktop.
Save fcharlie/83d0d40dea6367fd824de5578945333e to your computer and use it in GitHub Desktop.
create too many commits
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