| Index: client/cmd/isolate/exp_archive.go
|
| diff --git a/client/cmd/isolate/exp_archive.go b/client/cmd/isolate/exp_archive.go
|
| index d795b70b7ee0ac2220586f1e78f65817af8da481..742e105fa2ba63572dfb0885eb36e03e6d55142e 100644
|
| --- a/client/cmd/isolate/exp_archive.go
|
| +++ b/client/cmd/isolate/exp_archive.go
|
| @@ -169,111 +169,6 @@ func partitionDeps(deps []string, rootDir string, blacklist []string) (partition
|
| return walker.parts, nil
|
| }
|
|
|
| -type uploadTracker struct {
|
| - checker *Checker
|
| - uploader *Uploader
|
| - files map[string]isolated.File
|
| -}
|
| -
|
| -func newUploadTracker(checker *Checker, uploader *Uploader) *uploadTracker {
|
| - return &uploadTracker{
|
| - checker: checker,
|
| - uploader: uploader,
|
| - files: make(map[string]isolated.File),
|
| - }
|
| -}
|
| -
|
| -func (ut *uploadTracker) Files() map[string]isolated.File {
|
| - return ut.files
|
| -}
|
| -
|
| -// populateSymlinks adds an isolated.File to files for each provided symlink
|
| -func (ut *uploadTracker) populateSymlinks(symlinks []*Item) error {
|
| - for _, item := range symlinks {
|
| - l, err := os.Readlink(item.Path)
|
| - if err != nil {
|
| - return fmt.Errorf("unable to resolve symlink for %q: %v", item.Path, err)
|
| - }
|
| - ut.files[item.RelPath] = isolated.SymLink(l)
|
| - }
|
| - return nil
|
| -}
|
| -
|
| -// tarAndUploadFiles creates bundles of files, uploads them, and adds each bundle to files.
|
| -func (ut *uploadTracker) tarAndUploadFiles(smallFiles []*Item) error {
|
| - bundles := ShardItems(smallFiles, archiveMaxSize)
|
| - log.Printf("\t%d TAR archives to be isolated", len(bundles))
|
| -
|
| - for _, bundle := range bundles {
|
| - bundle := bundle
|
| - digest, tarSize, err := bundle.Digest()
|
| - if err != nil {
|
| - return err
|
| - }
|
| -
|
| - log.Printf("Created tar archive %q (%s)", digest, humanize.Bytes(uint64(tarSize)))
|
| - log.Printf("\tcontains %d files (total %s)", len(bundle.Items), humanize.Bytes(uint64(bundle.ItemSize)))
|
| - // Mint an item for this tar.
|
| - item := &Item{
|
| - Path: fmt.Sprintf(".%s.tar", digest),
|
| - RelPath: fmt.Sprintf(".%s.tar", digest),
|
| - Size: tarSize,
|
| - Mode: 0644, // Read
|
| - Digest: digest,
|
| - }
|
| - ut.files[item.RelPath] = isolated.TarFile(item.Digest, int(item.Mode), item.Size)
|
| -
|
| - ut.checker.AddItem(item, false, func(item *Item, ps *isolatedclient.PushState) {
|
| - if ps == nil {
|
| - return
|
| - }
|
| - log.Printf("QUEUED %q for upload", item.RelPath)
|
| - ut.uploader.Upload(item.RelPath, bundle.Contents, ps, func() {
|
| - log.Printf("UPLOADED %q", item.RelPath)
|
| - })
|
| - })
|
| - }
|
| - return nil
|
| -}
|
| -
|
| -// uploadFiles uploads each file and adds it to files.
|
| -func (ut *uploadTracker) uploadFiles(files []*Item) error {
|
| - // Handle the large individually-uploaded files.
|
| - for _, item := range files {
|
| - d, err := hashFile(item.Path)
|
| - if err != nil {
|
| - return err
|
| - }
|
| - item.Digest = d
|
| - ut.files[item.RelPath] = isolated.BasicFile(item.Digest, int(item.Mode), item.Size)
|
| - ut.checker.AddItem(item, false, func(item *Item, ps *isolatedclient.PushState) {
|
| - if ps == nil {
|
| - return
|
| - }
|
| - log.Printf("QUEUED %q for upload", item.RelPath)
|
| - ut.uploader.UploadFile(item, ps, func() {
|
| - log.Printf("UPLOADED %q", item.RelPath)
|
| - })
|
| - })
|
| - }
|
| - return nil
|
| -}
|
| -
|
| -func (ut *uploadTracker) UploadDeps(parts partitionedDeps) error {
|
| - if err := ut.populateSymlinks(parts.links.items); err != nil {
|
| - return err
|
| - }
|
| -
|
| - if err := ut.tarAndUploadFiles(parts.filesToArchive.items); err != nil {
|
| - return err
|
| - }
|
| -
|
| - if err := ut.uploadFiles(parts.indivFiles.items); err != nil {
|
| - return err
|
| - }
|
| - return nil
|
| -}
|
| -
|
| // main contains the core logic for experimental archive.
|
| func (c *expArchiveRun) main() error {
|
| // TODO(djd): This func is long and has a lot of internal complexity (like,
|
| @@ -317,7 +212,7 @@ func (c *expArchiveRun) main() error {
|
| log.Printf("\t%d files (%s) to be isolated individually", len(parts.indivFiles.items), humanize.Bytes(uint64(parts.indivFiles.totalSize)))
|
| log.Printf("\t%d files (%s) to be isolated in archives", len(parts.filesToArchive.items), humanize.Bytes(uint64(parts.filesToArchive.totalSize)))
|
|
|
| - tracker := newUploadTracker(checker, uploader)
|
| + tracker := NewUploadTracker(checker, uploader)
|
| if err := tracker.UploadDeps(parts); err != nil {
|
| return err
|
| }
|
|
|