(flags *pflag.FlagSet, mounts *[]mount.Mount)
| 925 | } |
| 926 | |
| 927 | func updateMounts(flags *pflag.FlagSet, mounts *[]mount.Mount) error { |
| 928 | mountsByTarget := map[string]mount.Mount{} |
| 929 | |
| 930 | if flags.Changed(flagMountAdd) { |
| 931 | values := flags.Lookup(flagMountAdd).Value.(*opts.MountOpt).Value() |
| 932 | for _, mnt := range values { |
| 933 | if _, ok := mountsByTarget[mnt.Target]; ok { |
| 934 | return errors.New("duplicate mount target") |
| 935 | } |
| 936 | mountsByTarget[mnt.Target] = mnt |
| 937 | } |
| 938 | } |
| 939 | |
| 940 | // Add old list of mount points minus updated one. |
| 941 | for _, mnt := range *mounts { |
| 942 | if _, ok := mountsByTarget[mnt.Target]; !ok { |
| 943 | mountsByTarget[mnt.Target] = mnt |
| 944 | } |
| 945 | } |
| 946 | |
| 947 | newMounts := make([]mount.Mount, 0, len(mountsByTarget)) |
| 948 | |
| 949 | toRemove := buildToRemoveSet(flags, flagMountRemove) |
| 950 | |
| 951 | for _, mnt := range mountsByTarget { |
| 952 | if _, exists := toRemove[mnt.Target]; !exists { |
| 953 | newMounts = append(newMounts, mnt) |
| 954 | } |
| 955 | } |
| 956 | sort.Slice(newMounts, func(i, j int) bool { |
| 957 | a, b := newMounts[i], newMounts[j] |
| 958 | |
| 959 | if a.Source == b.Source { |
| 960 | return a.Target < b.Target |
| 961 | } |
| 962 | |
| 963 | return a.Source < b.Source |
| 964 | }) |
| 965 | *mounts = newMounts |
| 966 | return nil |
| 967 | } |
| 968 | |
| 969 | func updateGroups(flags *pflag.FlagSet, groups *[]string) error { |
| 970 | if flags.Changed(flagGroupAdd) { |
searching dependent graphs…