(fsys fs.FS, inputs []string, output string)
| 681 | } |
| 682 | |
| 683 | func createTasks(fsys fs.FS, inputs []string, output string) ([]Task, []string, error) { |
| 684 | tasks := []Task{} |
| 685 | roots := []string{} |
| 686 | for _, input := range inputs { |
| 687 | root := filepath.Clean(filepath.Dir(input)) |
| 688 | input = filepath.Clean(input) |
| 689 | |
| 690 | var err error |
| 691 | var info os.FileInfo |
| 692 | if !preserveLinks { |
| 693 | // follow and dereference symlinks |
| 694 | info, err = fs.Stat(fsys, input) |
| 695 | } else { |
| 696 | info, err = os.Lstat(input) |
| 697 | } |
| 698 | if err != nil { |
| 699 | Error.Println(err) |
| 700 | continue |
| 701 | } |
| 702 | |
| 703 | if preserveLinks && info.Mode()&os.ModeSymlink != 0 { |
| 704 | // copy symlink as is |
| 705 | if !sync { |
| 706 | return nil, nil, fmt.Errorf("--sync not specified, omitting symbolic link %v", input) |
| 707 | } |
| 708 | task, err := NewTask(root, input, output, true) |
| 709 | if err != nil { |
| 710 | return nil, nil, err |
| 711 | } |
| 712 | tasks = append(tasks, task) |
| 713 | } else if info.Mode().IsRegular() { |
| 714 | valid := fileFilter(input) // don't filter mimetype |
| 715 | if valid || sync { |
| 716 | if mimetype == "" && !sync { |
| 717 | ext := filepath.Ext(input) |
| 718 | if 0 < len(ext) { |
| 719 | ext = ext[1:] |
| 720 | } |
| 721 | if _, ok := extMap[ext]; !ok { |
| 722 | return nil, nil, fmt.Errorf("cannot infer mimetype from extension in %v, set --type explicitly", input) |
| 723 | } |
| 724 | } |
| 725 | task, err := NewTask(root, input, output, !valid) |
| 726 | if err != nil { |
| 727 | return nil, nil, err |
| 728 | } |
| 729 | tasks = append(tasks, task) |
| 730 | } |
| 731 | } else if info.Mode().IsDir() { |
| 732 | if !recursive { |
| 733 | Warning.Printf("--recursive not specified, omitting directory %v", input) |
| 734 | continue |
| 735 | } |
| 736 | |
| 737 | var walkFn func(string, fs.DirEntry, error) error |
| 738 | walkFn = func(input string, d fs.DirEntry, err error) error { |
| 739 | if err != nil { |
| 740 | return err |
searching dependent graphs…