Index: client/cmd/isolate/exp_archive.go |
diff --git a/client/cmd/isolate/exp_archive.go b/client/cmd/isolate/exp_archive.go |
index 6b164a9c9aabb161b7c68da8ed3204747c7c3937..d795b70b7ee0ac2220586f1e78f65817af8da481 100644 |
--- a/client/cmd/isolate/exp_archive.go |
+++ b/client/cmd/isolate/exp_archive.go |
@@ -187,18 +187,21 @@ func (ut *uploadTracker) Files() map[string]isolated.File { |
return ut.files |
} |
-func (ut *uploadTracker) UploadDeps(parts partitionedDeps) error { |
- // Handle the symlinks. |
- for _, item := range parts.links.items { |
+// 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 |
+} |
- // Handle the small to-be-archived files. |
- bundles := ShardItems(parts.filesToArchive.items, archiveMaxSize) |
+// 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 { |
@@ -230,9 +233,13 @@ func (ut *uploadTracker) UploadDeps(parts partitionedDeps) error { |
}) |
}) |
} |
+ 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 parts.indivFiles.items { |
+ for _, item := range files { |
d, err := hashFile(item.Path) |
if err != nil { |
return err |
@@ -252,6 +259,21 @@ func (ut *uploadTracker) UploadDeps(parts partitionedDeps) error { |
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, |