From 4f84e07a1b11db9394bb86b72a6c677a718a04d3 Mon Sep 17 00:00:00 2001 From: rubyist Date: Mon, 20 Oct 2014 14:49:15 -0400 Subject: [PATCH] Make `push` use the scanner --- commands/command_ls_files.go | 2 +- commands/command_push.go | 35 +++++++++-------------------------- scanner/scanner.go | 14 ++++++++++---- 3 files changed, 20 insertions(+), 31 deletions(-) diff --git a/commands/command_ls_files.go b/commands/command_ls_files.go index e9456159..a57990a4 100644 --- a/commands/command_ls_files.go +++ b/commands/command_ls_files.go @@ -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") } diff --git a/commands/command_push.go b/commands/command_push.go index a5ceceed..6b7e79e5 100644 --- a/commands/command_push.go +++ b/commands/command_push.go @@ -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)") diff --git a/scanner/scanner.go b/scanner/scanner.go index 64172a81..bf54975a 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -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...)