Make push
use the scanner
This commit is contained in:
parent
d2210119cf
commit
4f84e07a1b
@ -27,7 +27,7 @@ func lsFilesCommand(cmd *cobra.Command, args []string) {
|
||||
}
|
||||
}
|
||||
|
||||
pointers, err := scanner.Scan(ref)
|
||||
pointers, err := scanner.Scan(ref, "")
|
||||
if err != nil {
|
||||
Panic(err, "Could not scan for git media files")
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ import (
|
||||
"github.com/github/git-media/git"
|
||||
"github.com/github/git-media/gitmedia"
|
||||
"github.com/github/git-media/gitmediaclient"
|
||||
"github.com/github/git-media/pointer"
|
||||
"github.com/github/git-media/scanner"
|
||||
"github.com/rubyist/tracerx"
|
||||
"github.com/spf13/cobra"
|
||||
"io/ioutil"
|
||||
@ -105,14 +105,18 @@ func pushCommand(cmd *cobra.Command, args []string) {
|
||||
}
|
||||
}
|
||||
|
||||
links := linksFromRefs(left, right)
|
||||
// Just use scanner here
|
||||
pointers, err := scanner.Scan(left, right)
|
||||
if err != nil {
|
||||
Panic(err, "Error scanning for media files")
|
||||
}
|
||||
|
||||
for i, link := range links {
|
||||
for i, pointer := range pointers {
|
||||
if dryRun {
|
||||
Print("push %s", link.Name)
|
||||
Print("push %s", pointer.Name)
|
||||
continue
|
||||
}
|
||||
if wErr := pushAsset(link.Oid, link.Name, i+1, len(links)); wErr != nil {
|
||||
if wErr := pushAsset(pointer.Oid, pointer.Name, i+1, len(pointers)); wErr != nil {
|
||||
Panic(wErr.Err, wErr.Error())
|
||||
}
|
||||
}
|
||||
@ -168,27 +172,6 @@ func decodeRefs(input string) (string, string) {
|
||||
return left, right
|
||||
}
|
||||
|
||||
// linksFromRefs runs git.RevListObjects for the passed refs and builds
|
||||
// a slice of pointer.Link's for any object that has an associated git media file.
|
||||
func linksFromRefs(left, right string) []*pointer.Link {
|
||||
revList, err := git.RevListObjects(left, right, false)
|
||||
if err != nil {
|
||||
Panic(err, "Error running git rev-list --objects %s %s", left, right)
|
||||
}
|
||||
|
||||
links := make([]*pointer.Link, 0)
|
||||
for _, object := range revList {
|
||||
link, err := pointer.FindLink(object.Sha1)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
links = append(links, link)
|
||||
}
|
||||
|
||||
return links
|
||||
}
|
||||
|
||||
func init() {
|
||||
pushCmd.Flags().BoolVarP(&dryRun, "dry-run", "d", false, "Do everything except actually send the updates")
|
||||
pushCmd.Flags().BoolVarP(&useStdin, "stdin", "s", false, "Take refs on stdin (for pre-push hook)")
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"github.com/rubyist/tracerx"
|
||||
"io"
|
||||
"os/exec"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@ -34,13 +35,15 @@ type wrappedPointer struct {
|
||||
*pointer.Pointer
|
||||
}
|
||||
|
||||
var z40 = regexp.MustCompile(`\^?0{40}`)
|
||||
|
||||
// Scan takes a ref and returns a slice of pointer.Pointer objects
|
||||
// for all git media pointers it finds for that ref.
|
||||
func Scan(ref string) ([]*wrappedPointer, error) {
|
||||
func Scan(refLeft, refRight string) ([]*wrappedPointer, error) {
|
||||
nameMap := make(map[string]string, 0)
|
||||
start := time.Now()
|
||||
|
||||
revs, err := revListShas(ref, ref == "", nameMap)
|
||||
revs, err := revListShas(refLeft, refRight, refLeft == "", nameMap)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -71,13 +74,16 @@ func Scan(ref string) ([]*wrappedPointer, error) {
|
||||
// revListShas uses git rev-list to return the list of object sha1s
|
||||
// for the given ref. If all is true, ref is ignored. It returns a
|
||||
// channel from which sha1 strings can be read.
|
||||
func revListShas(ref string, all bool, nameMap map[string]string) (chan string, error) {
|
||||
func revListShas(refLeft, refRight string, all bool, nameMap map[string]string) (chan string, error) {
|
||||
refArgs := []string{"rev-list", "--objects"}
|
||||
if all {
|
||||
refArgs = append(refArgs, "--all")
|
||||
} else {
|
||||
refArgs = append(refArgs, "--no-walk")
|
||||
refArgs = append(refArgs, ref)
|
||||
refArgs = append(refArgs, refLeft)
|
||||
if refRight != "" && !z40.MatchString(refRight) {
|
||||
refArgs = append(refArgs, refRight)
|
||||
}
|
||||
}
|
||||
|
||||
cmd, err := startCommand("git", refArgs...)
|
||||
|
Loading…
Reference in New Issue
Block a user