func()

in iterator/fs.go [257:315]


func (obj *Fs) GitSubmodulesHelper(ctx context.Context, path safepath.Path) ([]interfaces.Iterator, error) {
	// TODO: this could happen in init() if we wanted to optimize perf a bit
	gitModulesRelFile, err := safepath.ParseIntoRelFile(".gitmodules")
	if err != nil {
		return nil, err // bug!
	}

	absFile, ok := path.(safepath.AbsFile)
	if !ok || absFile.Base().Cmp(gitModulesRelFile) != nil {
		return nil, nil
	}

	// parse absFile and get a list of URL's
	contents, err := os.ReadFile(absFile.Path())
	if err != nil {
		return nil, err
	}

	// found some possible git submodules
	modules := gitConfig.NewModules()
	if err := modules.Unmarshal(contents); err != nil {
		return nil, err
	}

	iterators := []interfaces.Iterator{}
	names := []string{}
	for name := range modules.Submodules {
		names = append(names, name)
	}
	sort.Strings(names) // loop in deterministic order
	for _, name := range names {
		submodule := modules.Submodules[name]
		if err := submodule.Validate(); err != nil {
			return nil, err
		}

		if obj.Debug {
			obj.Logf("found git submodule named: %s", submodule.Name)
		}

		iterator := &Git{
			Debug: obj.Debug,
			Logf: func(format string, v ...interface{}) {
				obj.Logf(format, v...) // TODO: add a prefix?
			},
			Prefix: obj.Prefix,

			Iterator: obj,

			//submodule.Path
			URL: submodule.URL,
			//submodule.Branch // TODO: use this?
			TrimGitSuffix: true,
		}
		iterators = append(iterators, iterator)
	}

	return iterators, nil
}