Store filename in pointer link, display during push

This commit is contained in:
rubyist 2014-09-19 12:52:03 -04:00
parent e9092a89a5
commit 53aaad1344
3 changed files with 58 additions and 19 deletions

@ -69,7 +69,7 @@ func cleanCommand(cmd *cobra.Command, args []string) {
Debug("Writing %s", mediafile)
}
err = cleaned.CreateLink()
err = cleaned.CreateLink(filename)
if err != nil {
Panic(err, "Unable to write link file %s", err)
}

@ -6,6 +6,7 @@ import (
"fmt"
"github.com/github/git-media/gitmedia"
"github.com/github/git-media/gitmediaclient"
"github.com/github/git-media/pointer"
"github.com/spf13/cobra"
"io/ioutil"
"os"
@ -57,29 +58,33 @@ func pushCommand(cmd *cobra.Command, args []string) {
}
scanner := bufio.NewScanner(bytes.NewBuffer(output))
blobOids := make([]string, 0)
links := make([]*pointer.Link, 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))
}
}
// TODO - filename
for i, oid := range blobOids {
if dryRun {
fmt.Println("push", oid)
linkFile, err := os.Open(linkPath)
if err != nil {
continue
}
if wErr := pushAsset(oid, "", i+1, len(blobOids)); wErr != nil {
link, err := pointer.DecodeLink(linkFile)
if err != nil {
Panic(err, "Error decoding link file") // don't panic
}
links = append(links, link)
}
for i, link := range links {
if dryRun {
fmt.Println("push", link.Oid, link.Name)
continue
}
if wErr := pushAsset(link.Oid, link.Name, i+1, len(links)); wErr != nil {
Panic(wErr.Err, wErr.Error())
}
fmt.Printf("\n")

@ -23,8 +23,11 @@ var (
oid sha256:%s
size %d
`
matcher = []byte("git-media")
pointerKeys = []string{"version", "oid", "size"}
matcher = []byte("git-media")
pointerKeys = []string{"version", "oid", "size"}
linkTemplate = `oid %s
name %s
`
)
type Pointer struct {
@ -34,6 +37,11 @@ type Pointer struct {
OidType string
}
type Link struct {
Oid string
Name string
}
func NewPointer(oid string, size int64) *Pointer {
return &Pointer{latest, oid, size, oidType}
}
@ -50,7 +58,7 @@ func (p *Pointer) Encoded() string {
return fmt.Sprintf(template, latest, p.Oid, p.Size)
}
func (p *Pointer) CreateLink() error {
func (p *Pointer) CreateLink(filename string) error {
gitHash, err := gitmedia.NewGitHash()
if err != nil {
return err
@ -65,7 +73,7 @@ func (p *Pointer) CreateLink() error {
return err
}
return ioutil.WriteFile(linkFile, []byte(p.Oid), 0644)
return ioutil.WriteFile(linkFile, []byte(fmt.Sprintf(linkTemplate, latest, p.Oid, filename)), 0644)
}
func Encode(writer io.Writer, pointer *Pointer) (int, error) {
@ -88,6 +96,32 @@ func Decode(reader io.Reader) (*Pointer, error) {
}
}
func DecodeLink(reader io.Reader) (*Link, error) {
link := &Link{}
m := make(map[string]string)
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
text := scanner.Text()
if len(text) == 0 {
continue
}
parts := strings.SplitN(text, " ", 2)
key := parts[0]
m[key] = parts[1]
}
oid, ok := m["oid"]
if !ok {
return nil, errors.New("No Oid in link file")
}
link.Oid = oid
link.Name = m["name"]
return link, nil
}
func decodeKV(data []byte) (*Pointer, error) {
parsed, err := decodeKVData(data)
if err != nil {