Make --dry-run a bit smarter and more useful
This commit is contained in:
parent
17ce00dc09
commit
141bd6f180
@ -23,25 +23,42 @@ var (
|
||||
)
|
||||
|
||||
func pushCommand(cmd *cobra.Command, args []string) {
|
||||
refsData, err := ioutil.ReadAll(os.Stdin)
|
||||
if err != nil {
|
||||
Panic(err, "Error reading refs on stdin")
|
||||
}
|
||||
var left, right string
|
||||
|
||||
if len(refsData) == 0 {
|
||||
return
|
||||
}
|
||||
if dryRun {
|
||||
if len(args) != 2 {
|
||||
Print("Usage: git media push --dry-run <repo> <refspec>")
|
||||
return
|
||||
}
|
||||
|
||||
ref, err := gitmedia.CurrentRef()
|
||||
if err != nil {
|
||||
Panic(err, "Error getting current ref")
|
||||
}
|
||||
left = ref
|
||||
right = fmt.Sprintf("^%s/%s", args[0], args[1])
|
||||
} else {
|
||||
refsData, err := ioutil.ReadAll(os.Stdin)
|
||||
if err != nil {
|
||||
Panic(err, "Error reading refs on stdin")
|
||||
}
|
||||
|
||||
if len(refsData) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
left, right = decodeRefs(string(refsData))
|
||||
if left == deleteBranch {
|
||||
return
|
||||
}
|
||||
|
||||
left, right := decodeRefs(string(refsData))
|
||||
if left == deleteBranch {
|
||||
return
|
||||
}
|
||||
|
||||
links := linksFromRefs(left, right)
|
||||
|
||||
for i, link := range links {
|
||||
if dryRun {
|
||||
fmt.Println("push", link.Oid, link.Name)
|
||||
Print("push %s", link.Name)
|
||||
continue
|
||||
}
|
||||
if wErr := pushAsset(link.Oid, link.Name, i+1, len(links)); wErr != nil {
|
||||
|
@ -1,11 +1,13 @@
|
||||
package gitmedia
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/github/git-media/git"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"strings"
|
||||
)
|
||||
@ -83,6 +85,33 @@ func InRepo() bool {
|
||||
return LocalWorkingDir != ""
|
||||
}
|
||||
|
||||
var shaMatcher = regexp.MustCompile(`^[0-9a-f]{40}`)
|
||||
|
||||
func CurrentRef() (string, error) {
|
||||
head, err := ioutil.ReadFile(filepath.Join(LocalGitDir, "HEAD"))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if shaMatcher.Match(head) {
|
||||
return strings.TrimSpace(string(head)), nil
|
||||
}
|
||||
|
||||
headString := string(head)
|
||||
parts := strings.Split(headString, " ")
|
||||
if len(parts) != 2 {
|
||||
return "", errors.New("Unable to parse HEAD")
|
||||
}
|
||||
|
||||
refFile := strings.TrimSpace(parts[1])
|
||||
sha, err := ioutil.ReadFile(filepath.Join(LocalGitDir, refFile))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return strings.TrimSpace(string(sha)), nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
var err error
|
||||
LocalWorkingDir, LocalGitDir, err = resolveGitDir()
|
||||
|
Loading…
Reference in New Issue
Block a user