• 
      
    Util
    1
    package main
    2
    3
    import (
    4
        "encoding/json"
    5
        "log"
    6
        "io/ioutil"
    7
    )
    8
    9
    var Repos []Repository
    10
    11
    // Loads the configuration file. The configuration file is assumed to
    12
    // be a json file. Currently just loads all repositories with their
    13
    // corresponding file paths. It also reads in the SCM type, which
    14
    // I intend to identify through the program in the future without
    15
    // needing it to be specified in the config
    16
    func LoadConfig() {
    17
        const CONF_PATH = "config.json"
    18
    19
        type JsonRepo struct {
    20
            Name    string
    21
            Path    string
    22
            Scm     string
    23
        }
    24
    25
        type Configuration struct {
    26
            Repositories []JsonRepo
    27
        }
    28
    29
        var conf Configuration
    30
    31
        content, err := ioutil.ReadFile(CONF_PATH)
    32
        if err != nil {
    33
            log.Fatal("ReadFile: ", err)
    34
        }
    35
    36
        if json.Unmarshal(content, &conf) != nil {
    37
            log.Fatal("Unmarshal: ", err)
    38
        }
    39
    40
        for _, r := range conf.Repositories {
    41
            switch r.Scm {
    42
                // to implement more later.. for now it's just git
    43
                case "git":
    44
                    Repos = append(Repos,
    45
                        &GitRepository { RepositoryInfo { r.Name, r.Path } })
    46
            }
    47
        }
    48
    }
    49
    50
    // Gets the repository by name - assuming name uniqueness right now
    51
    // based on the config file, likely will need a way to reinforce this later.
    52
    func GetRepository(name string) Repository {
    53
        // Simply iterating through the array - shouldn't be an issue
    54
        // if we aren't assuming clients have hundreds of repositories.
    55
        // If it is, I will use a map implementation instead.
    56
        var repo Repository
    57
    58
        for _, r := range Repos {
    59
            if r.GetName() == name {
    60
                repo = r
    61
            }
    62
        }
    63
    64
        return repo
    65
    }