| 798 | } |
| 799 | |
| 800 | func (w *Worktree) readGitmodulesFile() (*config.Modules, error) { |
| 801 | if w.isSymlink(gitmodulesFile) { |
| 802 | return nil, ErrGitModulesSymlink |
| 803 | } |
| 804 | |
| 805 | f, err := w.Filesystem.Open(gitmodulesFile) |
| 806 | if err != nil { |
| 807 | if os.IsNotExist(err) { |
| 808 | return nil, nil |
| 809 | } |
| 810 | |
| 811 | return nil, err |
| 812 | } |
| 813 | |
| 814 | defer f.Close() |
| 815 | input, err := io.ReadAll(f) |
| 816 | if err != nil { |
| 817 | return nil, err |
| 818 | } |
| 819 | |
| 820 | m := config.NewModules() |
| 821 | if err := m.Unmarshal(input); err != nil { |
| 822 | return m, err |
| 823 | } |
| 824 | |
| 825 | return m, nil |
| 826 | } |
| 827 | |
| 828 | // Clean the worktree by removing untracked files. |
| 829 | // An empty dir could be removed - this is what `git clean -f -d .` does. |