MCPcopy
hub / github.com/tailscale/tailscale / runFileGetOneBatch

Function runFileGetOneBatch

cmd/tailscale/cli/file.go:713–763  ·  view source on GitHub ↗
(ctx context.Context, dir string)

Source from the content-addressed store, hash-verified

711}
712
713func runFileGetOneBatch(ctx context.Context, dir string) []error {
714 var wfs []apitype.WaitingFile
715 var err error
716 var errs []error
717 for len(errs) == 0 {
718 wfs, err = localClient.WaitingFiles(ctx)
719 if err != nil {
720 errs = append(errs, fmt.Errorf("getting WaitingFiles: %w", err))
721 break
722 }
723 if len(wfs) != 0 || !(fileGetArgs.wait || fileGetArgs.loop) {
724 break
725 }
726 if fileGetArgs.verbose {
727 printf("waiting for file...")
728 }
729 if err := waitForFile(ctx); err != nil {
730 errs = append(errs, err)
731 }
732 }
733
734 deleted := 0
735 for i, wf := range wfs {
736 if len(errs) > 100 {
737 // Likely, everything is broken.
738 // Don't try to receive any more files in this batch.
739 errs = append(errs, fmt.Errorf("too many errors in runFileGetOneBatch(). %d files unexamined", len(wfs)-i))
740 break
741 }
742 writtenFile, size, err := receiveFile(ctx, wf, dir)
743 if err != nil {
744 errs = append(errs, err)
745 continue
746 }
747 if fileGetArgs.verbose {
748 printf("wrote %v as %v (%d bytes)\n", wf.Name, writtenFile, size)
749 }
750 if err = localClient.DeleteWaitingFile(ctx, wf.Name); err != nil {
751 errs = append(errs, fmt.Errorf("deleting %q from inbox: %v", wf.Name, err))
752 continue
753 }
754 deleted++
755 }
756 if deleted == 0 && len(wfs) > 0 {
757 // persistently stuck files are basically an error
758 errs = append(errs, fmt.Errorf("moved %d/%d files", deleted, len(wfs)))
759 } else if fileGetArgs.verbose {
760 printf("moved %d/%d files\n", deleted, len(wfs))
761 }
762 return errs
763}
764
765func runFileGet(ctx context.Context, args []string) error {
766 if len(args) != 1 {

Callers 1

runFileGetFunction · 0.85

Calls 6

waitForFileFunction · 0.85
receiveFileFunction · 0.85
DeleteWaitingFileMethod · 0.80
printfFunction · 0.70
ErrorfMethod · 0.65
WaitingFilesMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…