| // Copyright 2016 Google Inc. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package gitindex |
| |
| import ( |
| "bytes" |
| |
| "github.com/go-git/go-git/v5/plumbing/format/config" |
| ) |
| |
| // SubmoduleEntry represent one entry in a .gitmodules file |
| type SubmoduleEntry struct { |
| Path string |
| URL string |
| Branch string |
| } |
| |
| // ParseGitModules parses the contents of a .gitmodules file. |
| func ParseGitModules(content []byte) (map[string]*SubmoduleEntry, error) { |
| dec := config.NewDecoder(bytes.NewBuffer(content)) |
| cfg := &config.Config{} |
| |
| if err := dec.Decode(cfg); err != nil { |
| return nil, err |
| } |
| |
| result := map[string]*SubmoduleEntry{} |
| for _, s := range cfg.Sections { |
| if s.Name != "submodule" { |
| continue |
| } |
| |
| for _, ss := range s.Subsections { |
| name := ss.Name |
| e := &SubmoduleEntry{} |
| for _, o := range ss.Options { |
| switch o.Key { |
| case "branch": |
| e.Branch = o.Value |
| case "path": |
| e.Path = o.Value |
| case "url": |
| e.URL = o.Value |
| } |
| } |
| |
| result[name] = e |
| } |
| } |
| |
| return result, nil |
| } |