case: ghq.root unset ok: ghq get github.com/a/b -> exit 0 ok: ghq create x -> exit 0 case: ghq.root another path ok: ghq get github.com/a/b -> exit 0 ok: ghq rm x -> exit 0 case: ghq.root the shared root, by its real path ok: ghq get --shallow --partial blobless github.com/a/b -> exit 0 ok: ghq list -> exit 0 ok: ghq create x -> exit 2 ok: ghq get github.com/a/fail github.com/a/b -> exit 3 case: a directory under the shared root names its repository ok: ghq get -u . -> exit 0 ok: ghq get . -> exit 0 ok: ghq get /build/tmp.Bnsh9A9PkW/shared/github.com/o/r/sub -> exit 0 ok: ghq get /build/tmp.Bnsh9A9PkW/shared-link/github.com/o/r/sub -> exit 0 ok: ghq get /build/tmp.Bnsh9A9PkW/outside -> exit 2 ok: ghq get github.com/a/b /build/tmp.Bnsh9A9PkW/outside -> exit 2 ok: ghq get . -> exit 2 ok: ghq get /build/tmp.Bnsh9A9PkW/shared/github.com -> exit 2 case: a submodule's working tree names its superproject ok: ghq get . -> exit 0 case: ghq-sync names the repository for a directory under ghq root ok: ghq-sync -n -u . in sub -> would run: ghq get --shallow --partial blobless --no-recursive -P -u github.com/o/r ok: ghq-sync -n -u . in mod/dir -> would run: ghq get --shallow --partial blobless --no-recursive -P -u github.com/o/r case: ghq-sync --tags applies to fetch mode only ok: ghq-sync --tags --deepen 1 -> exit 2 ok: ghq-sync --tags --full -> exit 2 case: GHQ_ROOT overrides git configuration ok: ghq get github.com/a/b -> exit 0 case: writer unreachable fails, no fallback ok: ghq get github.com/a/b -> exit 69