Error prone but functioning happy path. Doesn't handle many cases yet

This commit is contained in:
rubyist 2014-09-18 16:31:09 -04:00
parent 326790e42d
commit c8e49b31f2

@ -1,10 +1,16 @@
package commands
import (
"bufio"
"bytes"
"fmt"
"github.com/github/git-media/gitmedia"
"github.com/github/git-media/gitmediaclient"
"github.com/spf13/cobra"
"io/ioutil"
"os"
"os/exec"
"path/filepath"
"strings"
)
@ -14,40 +20,51 @@ var (
Short: "Push files to the media endpoint",
Run: pushCommand,
}
z40 = "0000000000000000000000000000000000000000"
)
func pushCommand(cmd *cobra.Command, args []string) {
q, err := gitmedia.UploadQueue()
refsData, err := ioutil.ReadAll(os.Stdin)
if err != nil {
Panic(err, "Error setting up the queue")
Panic(err, "Error reading refs on stdin")
}
count, err := q.Count()
i := 1
// TODO handle nothing on stdin sanely
if len(refsData) == 0 {
return
}
q.Walk(func(id string, body []byte) error {
fileInfo := string(body)
parts := strings.SplitN(fileInfo, ":", 2)
refs := strings.Split(strings.TrimSpace(string(refsData)), " ")
var oid, filename string
oid = parts[0]
if len(parts) > 1 {
filename = parts[1]
output, err := exec.Command("git", "rev-list", "--objects", refs[1], "^"+refs[3]).Output()
if err != nil {
Panic(err, "Error running git rev-list")
}
scanner := bufio.NewScanner(bytes.NewBuffer(output))
blobOids := make([]string, 0)
for scanner.Scan() {
line := strings.Split(scanner.Text(), " ")
sha1 := line[0]
linkPath := filepath.Join(gitmedia.LocalLinkDir, sha1[0:2], sha1[2:len(sha1)])
if _, err := os.Stat(linkPath); err == nil {
oid, err := ioutil.ReadFile(linkPath)
if err != nil {
Panic(err, "Error reading link file")
}
blobOids = append(blobOids, string(oid))
}
}
if wErr := pushAsset(oid, filename, i, count); wErr != nil {
// TODO - filename
for i, oid := range blobOids {
if wErr := pushAsset(oid, "", i+1, len(blobOids)); wErr != nil {
Panic(wErr.Err, wErr.Error())
}
i += 1
fmt.Printf("\n")
if err := q.Del(id); err != nil {
Panic(err, "error removing %s from queue", oid)
}
return nil
})
}
}
func pushAsset(oid, filename string, index, totalFiles int) *gitmedia.WrappedError {