blob: ac05e6f62cdae07b53a6fc007cbf944cbd27e032 [file] [log] [blame]
// 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"
"gopkg.in/src-d/go-git.v4/plumbing/format/config"
)
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
}