s
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
package gitcmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (r *Repository) refSHA(ref string) (string, error) {
|
||||
out, _, err := NewCommand("rev-parse", "--verify", "--quiet").
|
||||
AddDynamicArguments(ref).
|
||||
WithDir(r.Path).RunStdString(r.ctx)
|
||||
if err != nil {
|
||||
return "", nil
|
||||
}
|
||||
return strings.TrimSpace(out), nil
|
||||
}
|
||||
|
||||
func (r *Repository) hashObject(content, dir string) (string, error) {
|
||||
out, _, err := NewCommand("hash-object", "-w", "--stdin").
|
||||
WithStdin(strings.NewReader(content)).
|
||||
WithDir(dir).RunStdString(r.ctx)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("hash-object: %w", err)
|
||||
}
|
||||
return strings.TrimSpace(out), nil
|
||||
}
|
||||
|
||||
func (r *Repository) commitTree(tree, message, authorName, authorEmail, dir string, parents ...string) (string, error) {
|
||||
cmd := NewCommand("commit-tree").AddDynamicArguments(tree).WithDir(dir)
|
||||
for _, p := range parents {
|
||||
cmd.Add("-p").AddDynamicArguments(p)
|
||||
}
|
||||
cmd.WithEnv(
|
||||
"GIT_AUTHOR_NAME="+authorName,
|
||||
"GIT_AUTHOR_EMAIL="+authorEmail,
|
||||
"GIT_COMMITTER_NAME="+authorName,
|
||||
"GIT_COMMITTER_EMAIL="+authorEmail,
|
||||
).WithStdin(strings.NewReader(message))
|
||||
out, _, err := cmd.RunStdString(r.ctx)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("commit-tree: %w", err)
|
||||
}
|
||||
return strings.TrimSpace(out), nil
|
||||
}
|
||||
|
||||
func (r *Repository) updateRef(ref, newSHA, expectedSHA string) error {
|
||||
cmd := NewCommand("update-ref").AddDynamicArguments(ref, newSHA).WithDir(r.Path)
|
||||
if expectedSHA != "" {
|
||||
cmd.AddDynamicArguments(expectedSHA)
|
||||
}
|
||||
if _, _, err := cmd.RunStdString(r.ctx); err != nil {
|
||||
return fmt.Errorf("update-ref %s: %w", ref, err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *Repository) isAncestor(ancestor, descendant string) bool {
|
||||
err := NewCommand("merge-base", "--is-ancestor").
|
||||
AddDynamicArguments(ancestor, descendant).
|
||||
WithDir(r.Path).Run(r.ctx)
|
||||
return err == nil
|
||||
}
|
||||
|
||||
func (r *Repository) removePathFromIndex(dir, path string, env ...string) error {
|
||||
entry := "0 " + strings.Repeat("0", 40) + "\t" + path + "\x00"
|
||||
cmd := NewCommand("update-index", "--remove", "-z", "--index-info").
|
||||
WithStdin(strings.NewReader(entry)).
|
||||
WithDir(dir)
|
||||
if len(env) > 0 {
|
||||
cmd.WithEnv(env...)
|
||||
}
|
||||
if _, _, err := cmd.RunStdString(r.ctx); err != nil {
|
||||
return fmt.Errorf("update-index --index-info (remove): %w", err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user