Make push use the scanner

This commit is contained in:
rubyist 2014-10-20 14:49:15 -04:00
parent d2210119cf
commit 4f84e07a1b
3 changed files with 20 additions and 31 deletions

@ -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...)