tg.sh: handle help -h
[topgit/pro.git] / t / t1040-remote-options.sh
blob638a5e76aeb5d37be24ad4ddd91c4732ac97063c
1 #!/bin/sh
3 test_description='tg -r and -u do the right thing
5 These are a bit tricky to test, but the `tg info` command will show a
6 "Remote Mate:" line if a matching remote is present so we check for that.
8 We do also check use of topgit.remote directly here as well and whether
9 it is set properly by `tg remote`.
12 TEST_NO_CREATE_REPO=1
14 . ./test-lib.sh
16 test_plan 8
18 test_expect_success 'test setup' '
19 test_create_repo mt-remote &&
20 test_create_repo remote &&
21 test_create_repo noremote &&
22 (cd remote && test_commit initial && >.topmsg && >.topdeps && git add -A && test_commit second) &&
23 (cd noremote && test_commit initial && >.topmsg && >.topdeps && git add -A && test_commit second) &&
24 git -C remote update-ref refs/heads/t/branch master &&
25 git -C remote update-ref refs/heads/{top-bases}/t/branch initial &&
26 git -C remote update-ref refs/remotes/origin/t/branch master &&
27 git -C remote update-ref refs/remotes/origin/{top-bases}/t/branch initial &&
28 git -C noremote update-ref refs/heads/t/branch master &&
29 git -C noremote update-ref refs/heads/{top-bases}/t/branch initial &&
30 git -C remote rev-parse --verify t/branch >/dev/null &&
31 git -C remote rev-parse --verify {top-bases}/t/branch >/dev/null &&
32 git -C remote rev-parse --verify remotes/origin/t/branch >/dev/null &&
33 git -C remote rev-parse --verify remotes/origin/{top-bases}/t/branch >/dev/null &&
34 git -C noremote rev-parse --verify t/branch >/dev/null &&
35 git -C noremote rev-parse --verify {top-bases}/t/branch >/dev/null &&
36 git -C mt-remote config remote.upstream.url . &&
37 git -C mt-remote config remote.downstream.url . &&
38 test "$(cd mt-remote && git config remote.upstream.url)" = "." &&
39 test "$(cd mt-remote && git config remote.downstream.url)" = "."
42 # remote_info <dir> [<options>]
43 remote_info() {
44 ri="$(tg -C "$@" info t/branch | grep "^Remote Mate:")" || :
45 ri="${ri#Remote Mate: }"
46 ri="${ri%/t/branch}"
47 [ -z "$ri" ] || echo "$ri"
50 test_expect_success 'no remote if no remotes' '
51 test "$(remote_info noremote)" = "" &&
52 test "$(remote_info noremote -r origin)" = "" &&
53 test "$(remote_info noremote -r nosuch)" = "" &&
54 test "$(remote_info noremote -c topgit.remote=origin)" = "" &&
55 test "$(remote_info noremote -c topgit.remote=nosuch)" = ""
58 test_expect_success 'no remote without topgit.remote' '
59 test "$(remote_info remote)" = "" &&
60 test "$(remote_info remote -r origin -u)" = "" &&
61 test "$(remote_info remote -u -c topgit.remote=origin)" = ""
64 test_expect_success 'remote mate with topgit.remote' '
65 test "$(remote_info remote -r bad -r origin)" = "origin" &&
66 test "$(remote_info remote -c topgit.remote=nosuch -c topgit.remote=origin)" = "origin" &&
67 test "$(remote_info remote -r origin -c topgit.remote=nosuch -c topgit.remote=other)" = "origin"
70 test_expect_success 'using -u overrides configed topgit.remote' '
71 git -C remote config topgit.remote origin &&
72 test "$(cd remote && git config topgit.remote)" = "origin" &&
73 test "$(remote_info remote)" = "origin" &&
74 test "$(remote_info remote -u)" = ""
77 test_expect_success 'tg remote non-populating does not set topgit.remote' '
78 tg -C mt-remote remote upstream &&
79 test "$(git -C mt-remote config --get topgit.remote)" = "" &&
80 tg -C mt-remote remote downstream &&
81 test "$(git -C mt-remote config --get topgit.remote)" = ""
84 test_expect_success 'tg remote --populate sets and changes topgit.remote' '
85 tg -C mt-remote remote --populate upstream &&
86 test "$(git -C mt-remote config --get topgit.remote)" = "upstream" &&
87 tg -C mt-remote remote --populate downstream &&
88 test "$(git -C mt-remote config --get topgit.remote)" = "downstream"
91 test_expect_success 'tg remote --populate with bad remote leaves topgit.remote unchanged' '
92 test_must_fail tg -C mt-remote remote --populate nosuch >/dev/null 2>&1 &&
93 test "$(git -C mt-remote config --get topgit.remote)" = "downstream"
96 test_done