aboutsummaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
Diffstat (limited to 't')
-rwxr-xr-xt/t6040-tracking-info.sh354
1 files changed, 354 insertions, 0 deletions
diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh
index 0b719bbae6..0242b5bf7a 100755
--- a/t/t6040-tracking-info.sh
+++ b/t/t6040-tracking-info.sh
@@ -292,4 +292,358 @@ test_expect_success '--set-upstream-to @{-1}' '
test_cmp expect actual
'
+test_expect_success 'status tracking origin/main shows only main' '
+ git -C test checkout b4 &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch b4
+ Your branch is ahead of ${SQ}origin/main${SQ} by 2 commits.
+ (use "git push" to publish your local commits)
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status --no-ahead-behind tracking origin/main shows only main' '
+ git -C test checkout b4 &&
+ git -C test status --no-ahead-behind >actual &&
+ cat >expect <<-EOF &&
+ On branch b4
+ Your branch and ${SQ}origin/main${SQ} refer to different commits.
+ (use "git status --ahead-behind" for details)
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches deduplicates when upstream and push are the same' '
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout main &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch main
+ Your branch is up to date with ${SQ}origin/main${SQ}.
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches with only upstream shows only upstream' '
+ test_config -C test status.compareBranches "@{upstream}" &&
+ git -C test checkout main &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch main
+ Your branch is up to date with ${SQ}origin/main${SQ}.
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches with only push shows only push' '
+ test_config -C test push.default current &&
+ test_config -C test status.compareBranches "@{push}" &&
+ git -C test checkout -b feature2 origin/main &&
+ git -C test push origin HEAD &&
+ (cd test && advance work) &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature2
+ Your branch is ahead of ${SQ}origin/feature2${SQ} by 1 commit.
+ (use "git push" to publish your local commits)
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches shows ahead of both upstream and push branch' '
+ test_config -C test push.default current &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout -b feature3 origin/main &&
+ git -C test push origin HEAD &&
+ (cd test && advance work) &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature3
+ Your branch is ahead of ${SQ}origin/main${SQ} by 1 commit.
+
+ Your branch is ahead of ${SQ}origin/feature3${SQ} by 1 commit.
+ (use "git push" to publish your local commits)
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'checkout with status.compareBranches shows both branches' '
+ test_config -C test push.default current &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout feature3 >actual &&
+ cat >expect <<-EOF &&
+ Your branch is ahead of ${SQ}origin/main${SQ} by 1 commit.
+
+ Your branch is ahead of ${SQ}origin/feature3${SQ} by 1 commit.
+ (use "git push" to publish your local commits)
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'setup for ahead of tracked but diverged from main' '
+ (
+ cd test &&
+ git checkout -b feature4 origin/main &&
+ advance work1 &&
+ git checkout origin/main &&
+ advance work2 &&
+ git push origin HEAD:main &&
+ git checkout feature4 &&
+ advance work3
+ )
+'
+
+test_expect_success 'status.compareBranches shows diverged and ahead' '
+ test_config -C test push.default current &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout feature4 &&
+ git -C test branch --set-upstream-to origin/main &&
+ git -C test push origin HEAD &&
+ (cd test && advance work) &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature4
+ Your branch and ${SQ}origin/main${SQ} have diverged,
+ and have 3 and 1 different commits each, respectively.
+ (use "git pull" if you want to integrate the remote branch with yours)
+
+ Your branch is ahead of ${SQ}origin/feature4${SQ} by 1 commit.
+ (use "git push" to publish your local commits)
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status --no-ahead-behind with status.compareBranches' '
+ test_config -C test push.default current &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout feature4 &&
+ git -C test status --no-ahead-behind >actual &&
+ cat >expect <<-EOF &&
+ On branch feature4
+ Your branch and ${SQ}origin/main${SQ} refer to different commits.
+
+ Your branch and ${SQ}origin/feature4${SQ} refer to different commits.
+ (use "git status --ahead-behind" for details)
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'setup upstream remote' '
+ (
+ cd test &&
+ git remote add upstream ../. &&
+ git fetch upstream
+ )
+'
+
+test_expect_success 'status.compareBranches with upstream and origin remotes' '
+ test_config -C test push.default current &&
+ test_config -C test remote.pushDefault origin &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout -b feature5 upstream/main &&
+ git -C test push origin &&
+ (cd test && advance work) &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature5
+ Your branch is ahead of ${SQ}upstream/main${SQ} by 1 commit.
+
+ Your branch is ahead of ${SQ}origin/feature5${SQ} by 1 commit.
+ (use "git push" to publish your local commits)
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches supports ordered upstream/push entries' '
+ test_config -C test push.default current &&
+ test_config -C test remote.pushDefault origin &&
+ test_config -C test status.compareBranches "@{push} @{upstream}" &&
+ git -C test checkout -b feature6 upstream/main &&
+ git -C test push origin &&
+ (cd test && advance work) &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature6
+ Your branch is ahead of ${SQ}origin/feature6${SQ} by 1 commit.
+ (use "git push" to publish your local commits)
+
+ Your branch is ahead of ${SQ}upstream/main${SQ} by 1 commit.
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches deduplicates repeated specifiers' '
+ test_config -C test push.default current &&
+ test_config -C test remote.pushDefault origin &&
+ test_config -C test status.compareBranches "@{push} @{upstream} @{push}" &&
+ git -C test checkout -b feature7 upstream/main &&
+ git -C test push origin &&
+ (cd test && advance work) &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature7
+ Your branch is ahead of ${SQ}origin/feature7${SQ} by 1 commit.
+ (use "git push" to publish your local commits)
+
+ Your branch is ahead of ${SQ}upstream/main${SQ} by 1 commit.
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches with diverged push branch' '
+ test_config -C test push.default current &&
+ test_config -C test remote.pushDefault origin &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout -b feature8 upstream/main &&
+ (cd test && advance work81) &&
+ git -C test push origin &&
+ git -C test reset --hard upstream/main &&
+ (cd test && advance work82) &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature8
+ Your branch is ahead of ${SQ}upstream/main${SQ} by 1 commit.
+
+ Your branch and ${SQ}origin/feature8${SQ} have diverged,
+ and have 1 and 1 different commits each, respectively.
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches shows up to date branches' '
+ test_config -C test push.default current &&
+ test_config -C test remote.pushDefault origin &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout -b feature9 upstream/main &&
+ git -C test push origin &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature9
+ Your branch is up to date with ${SQ}upstream/main${SQ}.
+
+ Your branch is up to date with ${SQ}origin/feature9${SQ}.
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status --no-ahead-behind with status.compareBranches up to date' '
+ test_config -C test push.default current &&
+ test_config -C test remote.pushDefault origin &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout feature9 >actual &&
+ git -C test push origin &&
+ git -C test status --no-ahead-behind >actual &&
+ cat >expect <<-EOF &&
+ On branch feature9
+ Your branch is up to date with ${SQ}upstream/main${SQ}.
+
+ Your branch is up to date with ${SQ}origin/feature9${SQ}.
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'checkout with status.compareBranches shows up to date' '
+ test_config -C test push.default current &&
+ test_config -C test remote.pushDefault origin &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout feature9 >actual &&
+ cat >expect <<-EOF &&
+ Your branch is up to date with ${SQ}upstream/main${SQ}.
+
+ Your branch is up to date with ${SQ}origin/feature9${SQ}.
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches with upstream behind and push up to date' '
+ test_config -C test push.default current &&
+ test_config -C test remote.pushDefault origin &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout -b ahead upstream/main &&
+ (cd test && advance work) &&
+ git -C test push upstream HEAD &&
+ git -C test checkout -b feature10 upstream/main &&
+ git -C test push origin &&
+ git -C test branch --set-upstream-to upstream/ahead &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature10
+ Your branch is behind ${SQ}upstream/ahead${SQ} by 1 commit, and can be fast-forwarded.
+ (use "git pull" to update your local branch)
+
+ Your branch is up to date with ${SQ}origin/feature10${SQ}.
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches with remapped push refspec' '
+ test_config -C test remote.origin.push refs/heads/feature11:refs/heads/remapped &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout -b feature11 origin/main &&
+ git -C test push &&
+ (cd test && advance work) &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature11
+ Your branch is ahead of ${SQ}origin/main${SQ} by 1 commit.
+
+ Your branch is ahead of ${SQ}origin/remapped${SQ} by 1 commit.
+ (use "git push" to publish your local commits)
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
+test_expect_success 'status.compareBranches with remapped push and upstream remote' '
+ test_config -C test remote.pushDefault origin &&
+ test_config -C test remote.origin.push refs/heads/feature12:refs/heads/remapped &&
+ test_config -C test status.compareBranches "@{upstream} @{push}" &&
+ git -C test checkout -b feature12 upstream/main &&
+ git -C test push origin &&
+ (cd test && advance work) &&
+ git -C test status >actual &&
+ cat >expect <<-EOF &&
+ On branch feature12
+ Your branch is ahead of ${SQ}upstream/main${SQ} by 1 commit.
+
+ Your branch is ahead of ${SQ}origin/remapped${SQ} by 1 commit.
+ (use "git push" to publish your local commits)
+
+ nothing to commit, working tree clean
+ EOF
+ test_cmp expect actual
+'
+
test_done