# 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 reference 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
    ref: master
    repo: git@github.com:Masterminds/cookoo.git

  # Here's an example with a commit hash for a ref. 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
    ref: 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
    # Only tags can be used as refs. If you'd like to change that... please
    # submit a patch. We don't know much about bzr
    ref: 1.0.0

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

  # For SVN, the only valid ref 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
