# The name of this package.
package: github.com/Masterminds/glide

# Provide an alternate command to be run on 'glide in'. Normally, a glide in
# will just spawn a new shell.
incmd: bash -l

# Any listed import will only be imported once. Effectively preventing vendored
# packages from importing the same pkg via a glide.yaml file.
# Defaults to false
flatten: true

# External dependencies.
import:
  # Minimal definition
  # This will use "go get [-u]" to fetch and update the package, and it will
  # attempt to keep the release at the tip of master. It does this by looking
  # for telltale signs that this is a git, bzr, or hg repo, and then acting
  # accordingly.
  - package: github.com/kylelemons/go-gypsy

  # Full definition
  # This will check out the given Git repo, set the version to master,
  # use "git" (not "go get") to manage it, and alias the package to the
  # import path github.com/Masterminds/cookoo
  - package: github.com/Masterminds/cookoo
    vcs: git
    version: master
    repo: git@github.com:Masterminds/cookoo.git

  # Here's an example with a commit hash for a version. Since repo is not
  # specified, this will use git to to try to clone
  # 'http://github.com/aokoli/goutils' and then set the revision to the given
  # hash.
  - package: github.com/aokoli/goutils
    vcs: git
    version: 9c37978a95bd5c709a15883b6242714ea6709e64

  # MASKING: This takes my fork of goamz (technosophos/goamz) and clones it
  # as if it were the crowdmob/goamz package. This is incredibly useful for
  # masking packages and/or working with forks or clones.
  #
  # Note that absolutely no namespace munging happens on the code. If you want
  # that, you'll have to do it on your own. The intent of this masking was to
  # make it so you don't have to vendor imports.
  - package: github.com/crowdmob/goamz
    vcs: git
    repo: git@github.com:technosophos/goamz.git

  # This will fetch the entire technosophos/luge package, but only
  # 'go build' the technosophos/luge/foo and technosophos/luge/bar packages.
  - package: github.com/technosophos/luge
    vcs: git
    subpackages:
      - foo
      - bar
      # Shell globs are also supported:
      - pa?e
      - [wc]*

  # Use '...' to tell glide to build ALL of the subpackages.
  - package: github.com/Masterminds/blarg
    subpackages: ...

  - package: bzr.example.com/foo/bar/trunk
    vcs: bzr
    repo: bzr://bzr.example.com/foo/bar/trunk
    # The version can be a branch, tag, commit id, or a semantic version
    # constraint parsable by https://github.com/Masterminds/semver
    version: 1.0.0

  - package: hg.example.com/foo/bar
    vcs: hg
    repo: http://hg.example.com/foo/bar
    version: ae081cd1d6cc

  # For SVN, the only valid version is a commit number. Tags and branches go in
  # the repo URL.
  - package: svn.example.com/foo/bar/trunk
    vcs: svn
    repo: http://svn.example.com/foo/bar/trunk


  # If a package is dependent on OS, you can tell Glide to only
  # fetch for certain OS or architectures.
  #
  # os can be any valid GOOS.
  # arch can be any valid GOARCH.
  - package: github.com/unixy/package
    os:
      - linux
      - darwin
    arch:
      - amd64

  # If you would like to only include the package once and prevent vendored
  # packages from including the same package.
  - package: github.com/awesome/only_once
    flatten: true
