2008-07-03 23:09:48 +04:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='remote tracking stats'
|
|
|
|
|
2020-11-19 02:44:36 +03:00
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
tests: mark tests relying on the current default for `init.defaultBranch`
In addition to the manual adjustment to let the `linux-gcc` CI job run
the test suite with `master` and then with `main`, this patch makes sure
that GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME is set in all test scripts
that currently rely on the initial branch name being `master by default.
To determine which test scripts to mark up, the first step was to
force-set the default branch name to `master` in
- all test scripts that contain the keyword `master`,
- t4211, which expects `t/t4211/history.export` with a hard-coded ref to
initialize the default branch,
- t5560 because it sources `t/t556x_common` which uses `master`,
- t8002 and t8012 because both source `t/annotate-tests.sh` which also
uses `master`)
This trick was performed by this command:
$ sed -i '/^ *\. \.\/\(test-lib\|lib-\(bash\|cvs\|git-svn\)\|gitweb-lib\)\.sh$/i\
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master\
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME\
' $(git grep -l master t/t[0-9]*.sh) \
t/t4211*.sh t/t5560*.sh t/t8002*.sh t/t8012*.sh
After that, careful, manual inspection revealed that some of the test
scripts containing the needle `master` do not actually rely on a
specific default branch name: either they mention `master` only in a
comment, or they initialize that branch specificially, or they do not
actually refer to the current default branch. Therefore, the
aforementioned modification was undone in those test scripts thusly:
$ git checkout HEAD -- \
t/t0027-auto-crlf.sh t/t0060-path-utils.sh \
t/t1011-read-tree-sparse-checkout.sh \
t/t1305-config-include.sh t/t1309-early-config.sh \
t/t1402-check-ref-format.sh t/t1450-fsck.sh \
t/t2024-checkout-dwim.sh \
t/t2106-update-index-assume-unchanged.sh \
t/t3040-subprojects-basic.sh t/t3301-notes.sh \
t/t3308-notes-merge.sh t/t3423-rebase-reword.sh \
t/t3436-rebase-more-options.sh \
t/t4015-diff-whitespace.sh t/t4257-am-interactive.sh \
t/t5323-pack-redundant.sh t/t5401-update-hooks.sh \
t/t5511-refspec.sh t/t5526-fetch-submodules.sh \
t/t5529-push-errors.sh t/t5530-upload-pack-error.sh \
t/t5548-push-porcelain.sh \
t/t5552-skipping-fetch-negotiator.sh \
t/t5572-pull-submodule.sh t/t5608-clone-2gb.sh \
t/t5614-clone-submodules-shallow.sh \
t/t7508-status.sh t/t7606-merge-custom.sh \
t/t9302-fast-import-unpack-limit.sh
We excluded one set of test scripts in these commands, though: the range
of `git p4` tests. The reason? `git p4` stores the (foreign) remote
branch in the branch called `p4/master`, which is obviously not the
default branch. Manual analysis revealed that only five of these tests
actually require a specific default branch name to pass; They were
modified thusly:
$ sed -i '/^ *\. \.\/lib-git-p4\.sh$/i\
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master\
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME\
' t/t980[0167]*.sh t/t9811*.sh
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2020-11-19 02:44:19 +03:00
|
|
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
|
|
|
|
2008-07-03 23:09:48 +04:00
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
advance () {
|
|
|
|
echo "$1" >"$1" &&
|
|
|
|
git add "$1" &&
|
|
|
|
test_tick &&
|
|
|
|
git commit -m "$1"
|
|
|
|
}
|
|
|
|
|
|
|
|
test_expect_success setup '
|
2015-03-25 08:29:52 +03:00
|
|
|
advance a &&
|
|
|
|
advance b &&
|
|
|
|
advance c &&
|
2008-07-03 23:09:48 +04:00
|
|
|
git clone . test &&
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout -b b1 origin &&
|
|
|
|
git reset --hard HEAD^ &&
|
|
|
|
advance d &&
|
|
|
|
git checkout -b b2 origin &&
|
|
|
|
git reset --hard b1 &&
|
|
|
|
git checkout -b b3 origin &&
|
|
|
|
git reset --hard HEAD^ &&
|
|
|
|
git checkout -b b4 origin &&
|
|
|
|
advance e &&
|
branch: report invalid tracking branch as gone
Command "git branch -vv" will report tracking branches, but invalid
tracking branches are also reported. This is because the function
stat_tracking_info() can not distinguish invalid tracking branch
from other cases which it would not like to report, such as
there is no upstream settings at all, or nothing is changed between
one branch and its upstream.
Junio suggested missing upstream should be reported [1] like:
$ git branch -v -v
master e67ac84 initial
* topic 3fc0f2a [topicbase: gone] topic
$ git status
# On branch topic
# Your branch is based on 'topicbase', but the upstream is gone.
# (use "git branch --unset-upstream" to fixup)
...
$ git status -b -s
## topic...topicbase [gone]
...
In order to do like that, we need to distinguish these three cases
(i.e. no tracking, with configured but no longer valid tracking, and
with tracking) in function stat_tracking_info(). So the refactored
function stat_tracking_info() has three return values: -1 (with "gone"
base), 0 (no base), and 1 (with base).
If the caller does not like to report tracking info when nothing
changed between the branch and its upstream, simply checks if
num_theirs and num_ours are both 0.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/231830/focus=232288
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-26 11:02:48 +04:00
|
|
|
advance f &&
|
|
|
|
git checkout -b brokenbase origin &&
|
|
|
|
git checkout -b b5 --track brokenbase &&
|
|
|
|
advance g &&
|
2013-08-26 11:02:49 +04:00
|
|
|
git branch -d brokenbase &&
|
|
|
|
git checkout -b b6 origin
|
2009-03-26 23:53:24 +03:00
|
|
|
) &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git checkout -b follower --track main &&
|
branch: report invalid tracking branch as gone
Command "git branch -vv" will report tracking branches, but invalid
tracking branches are also reported. This is because the function
stat_tracking_info() can not distinguish invalid tracking branch
from other cases which it would not like to report, such as
there is no upstream settings at all, or nothing is changed between
one branch and its upstream.
Junio suggested missing upstream should be reported [1] like:
$ git branch -v -v
master e67ac84 initial
* topic 3fc0f2a [topicbase: gone] topic
$ git status
# On branch topic
# Your branch is based on 'topicbase', but the upstream is gone.
# (use "git branch --unset-upstream" to fixup)
...
$ git status -b -s
## topic...topicbase [gone]
...
In order to do like that, we need to distinguish these three cases
(i.e. no tracking, with configured but no longer valid tracking, and
with tracking) in function stat_tracking_info(). So the refactored
function stat_tracking_info() has three return values: -1 (with "gone"
base), 0 (no base), and 1 (with base).
If the caller does not like to report tracking info when nothing
changed between the branch and its upstream, simply checks if
num_theirs and num_ours are both 0.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/231830/focus=232288
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-26 11:02:48 +04:00
|
|
|
advance h
|
2008-07-03 23:09:48 +04:00
|
|
|
'
|
|
|
|
|
2019-06-21 13:18:08 +03:00
|
|
|
t6040_script='s/^..\(b.\) *[0-9a-f]* \(.*\)$/\1 \2/p'
|
2008-07-03 23:09:48 +04:00
|
|
|
cat >expect <<\EOF
|
2013-11-14 22:18:01 +04:00
|
|
|
b1 [ahead 1, behind 1] d
|
|
|
|
b2 [ahead 1, behind 1] d
|
|
|
|
b3 [behind 1] b
|
|
|
|
b4 [ahead 2] f
|
2017-01-10 11:49:52 +03:00
|
|
|
b5 [gone] g
|
2013-11-14 22:18:01 +04:00
|
|
|
b6 c
|
2008-07-03 23:09:48 +04:00
|
|
|
EOF
|
|
|
|
|
2011-04-13 03:33:39 +04:00
|
|
|
test_expect_success 'branch -v' '
|
2008-07-03 23:09:48 +04:00
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git branch -v
|
|
|
|
) |
|
2019-06-21 13:18:08 +03:00
|
|
|
sed -n -e "$t6040_script" >actual &&
|
2011-04-13 03:33:39 +04:00
|
|
|
test_i18ncmp expect actual
|
2008-07-03 23:09:48 +04:00
|
|
|
'
|
|
|
|
|
2011-08-26 18:05:11 +04:00
|
|
|
cat >expect <<\EOF
|
2020-11-19 02:44:36 +03:00
|
|
|
b1 [origin/main: ahead 1, behind 1] d
|
|
|
|
b2 [origin/main: ahead 1, behind 1] d
|
|
|
|
b3 [origin/main: behind 1] b
|
|
|
|
b4 [origin/main: ahead 2] f
|
2013-11-14 22:18:01 +04:00
|
|
|
b5 [brokenbase: gone] g
|
2020-11-19 02:44:36 +03:00
|
|
|
b6 [origin/main] c
|
2011-08-26 18:05:11 +04:00
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'branch -vv' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git branch -vv
|
|
|
|
) |
|
2019-06-21 13:18:08 +03:00
|
|
|
sed -n -e "$t6040_script" >actual &&
|
2011-08-26 18:05:11 +04:00
|
|
|
test_i18ncmp expect actual
|
|
|
|
'
|
|
|
|
|
branch: report invalid tracking branch as gone
Command "git branch -vv" will report tracking branches, but invalid
tracking branches are also reported. This is because the function
stat_tracking_info() can not distinguish invalid tracking branch
from other cases which it would not like to report, such as
there is no upstream settings at all, or nothing is changed between
one branch and its upstream.
Junio suggested missing upstream should be reported [1] like:
$ git branch -v -v
master e67ac84 initial
* topic 3fc0f2a [topicbase: gone] topic
$ git status
# On branch topic
# Your branch is based on 'topicbase', but the upstream is gone.
# (use "git branch --unset-upstream" to fixup)
...
$ git status -b -s
## topic...topicbase [gone]
...
In order to do like that, we need to distinguish these three cases
(i.e. no tracking, with configured but no longer valid tracking, and
with tracking) in function stat_tracking_info(). So the refactored
function stat_tracking_info() has three return values: -1 (with "gone"
base), 0 (no base), and 1 (with base).
If the caller does not like to report tracking info when nothing
changed between the branch and its upstream, simply checks if
num_theirs and num_ours are both 0.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/231830/focus=232288
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-26 11:02:48 +04:00
|
|
|
test_expect_success 'checkout (diverged from upstream)' '
|
2008-07-03 23:09:48 +04:00
|
|
|
(
|
|
|
|
cd test && git checkout b1
|
|
|
|
) >actual &&
|
2012-04-14 08:45:31 +04:00
|
|
|
test_i18ngrep "have 1 and 1 different" actual
|
2008-07-03 23:09:48 +04:00
|
|
|
'
|
|
|
|
|
2009-04-02 01:42:49 +04:00
|
|
|
test_expect_success 'checkout with local tracked branch' '
|
2020-11-19 02:44:36 +03:00
|
|
|
git checkout main &&
|
2010-10-31 04:46:54 +03:00
|
|
|
git checkout follower >actual &&
|
2012-04-14 08:45:31 +04:00
|
|
|
test_i18ngrep "is ahead of" actual
|
2009-03-26 23:53:24 +03:00
|
|
|
'
|
|
|
|
|
branch: report invalid tracking branch as gone
Command "git branch -vv" will report tracking branches, but invalid
tracking branches are also reported. This is because the function
stat_tracking_info() can not distinguish invalid tracking branch
from other cases which it would not like to report, such as
there is no upstream settings at all, or nothing is changed between
one branch and its upstream.
Junio suggested missing upstream should be reported [1] like:
$ git branch -v -v
master e67ac84 initial
* topic 3fc0f2a [topicbase: gone] topic
$ git status
# On branch topic
# Your branch is based on 'topicbase', but the upstream is gone.
# (use "git branch --unset-upstream" to fixup)
...
$ git status -b -s
## topic...topicbase [gone]
...
In order to do like that, we need to distinguish these three cases
(i.e. no tracking, with configured but no longer valid tracking, and
with tracking) in function stat_tracking_info(). So the refactored
function stat_tracking_info() has three return values: -1 (with "gone"
base), 0 (no base), and 1 (with base).
If the caller does not like to report tracking info when nothing
changed between the branch and its upstream, simply checks if
num_theirs and num_ours are both 0.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/231830/focus=232288
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-26 11:02:48 +04:00
|
|
|
test_expect_success 'checkout (upstream is gone)' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b5
|
|
|
|
) >actual &&
|
|
|
|
test_i18ngrep "is based on .*, but the upstream is gone." actual
|
|
|
|
'
|
|
|
|
|
2013-08-26 11:02:49 +04:00
|
|
|
test_expect_success 'checkout (up-to-date with upstream)' '
|
|
|
|
(
|
|
|
|
cd test && git checkout b6
|
|
|
|
) >actual &&
|
2020-11-19 02:44:36 +03:00
|
|
|
test_i18ngrep "Your branch is up to date with .origin/main" actual
|
2013-08-26 11:02:49 +04:00
|
|
|
'
|
|
|
|
|
branch: report invalid tracking branch as gone
Command "git branch -vv" will report tracking branches, but invalid
tracking branches are also reported. This is because the function
stat_tracking_info() can not distinguish invalid tracking branch
from other cases which it would not like to report, such as
there is no upstream settings at all, or nothing is changed between
one branch and its upstream.
Junio suggested missing upstream should be reported [1] like:
$ git branch -v -v
master e67ac84 initial
* topic 3fc0f2a [topicbase: gone] topic
$ git status
# On branch topic
# Your branch is based on 'topicbase', but the upstream is gone.
# (use "git branch --unset-upstream" to fixup)
...
$ git status -b -s
## topic...topicbase [gone]
...
In order to do like that, we need to distinguish these three cases
(i.e. no tracking, with configured but no longer valid tracking, and
with tracking) in function stat_tracking_info(). So the refactored
function stat_tracking_info() has three return values: -1 (with "gone"
base), 0 (no base), and 1 (with base).
If the caller does not like to report tracking info when nothing
changed between the branch and its upstream, simply checks if
num_theirs and num_ours are both 0.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/231830/focus=232288
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-26 11:02:48 +04:00
|
|
|
test_expect_success 'status (diverged from upstream)' '
|
2008-07-03 23:09:48 +04:00
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b1 >/dev/null &&
|
|
|
|
# reports nothing to commit
|
2009-08-15 13:27:39 +04:00
|
|
|
test_must_fail git commit --dry-run
|
2008-07-03 23:09:48 +04:00
|
|
|
) >actual &&
|
2012-04-14 08:45:31 +04:00
|
|
|
test_i18ngrep "have 1 and 1 different" actual
|
2008-07-03 23:09:48 +04:00
|
|
|
'
|
|
|
|
|
branch: report invalid tracking branch as gone
Command "git branch -vv" will report tracking branches, but invalid
tracking branches are also reported. This is because the function
stat_tracking_info() can not distinguish invalid tracking branch
from other cases which it would not like to report, such as
there is no upstream settings at all, or nothing is changed between
one branch and its upstream.
Junio suggested missing upstream should be reported [1] like:
$ git branch -v -v
master e67ac84 initial
* topic 3fc0f2a [topicbase: gone] topic
$ git status
# On branch topic
# Your branch is based on 'topicbase', but the upstream is gone.
# (use "git branch --unset-upstream" to fixup)
...
$ git status -b -s
## topic...topicbase [gone]
...
In order to do like that, we need to distinguish these three cases
(i.e. no tracking, with configured but no longer valid tracking, and
with tracking) in function stat_tracking_info(). So the refactored
function stat_tracking_info() has three return values: -1 (with "gone"
base), 0 (no base), and 1 (with base).
If the caller does not like to report tracking info when nothing
changed between the branch and its upstream, simply checks if
num_theirs and num_ours are both 0.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/231830/focus=232288
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-26 11:02:48 +04:00
|
|
|
test_expect_success 'status (upstream is gone)' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b5 >/dev/null &&
|
|
|
|
# reports nothing to commit
|
|
|
|
test_must_fail git commit --dry-run
|
|
|
|
) >actual &&
|
|
|
|
test_i18ngrep "is based on .*, but the upstream is gone." actual
|
|
|
|
'
|
|
|
|
|
2013-08-26 11:02:49 +04:00
|
|
|
test_expect_success 'status (up-to-date with upstream)' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b6 >/dev/null &&
|
|
|
|
# reports nothing to commit
|
|
|
|
test_must_fail git commit --dry-run
|
|
|
|
) >actual &&
|
2020-11-19 02:44:36 +03:00
|
|
|
test_i18ngrep "Your branch is up to date with .origin/main" actual
|
2013-08-26 11:02:49 +04:00
|
|
|
'
|
|
|
|
|
branch: report invalid tracking branch as gone
Command "git branch -vv" will report tracking branches, but invalid
tracking branches are also reported. This is because the function
stat_tracking_info() can not distinguish invalid tracking branch
from other cases which it would not like to report, such as
there is no upstream settings at all, or nothing is changed between
one branch and its upstream.
Junio suggested missing upstream should be reported [1] like:
$ git branch -v -v
master e67ac84 initial
* topic 3fc0f2a [topicbase: gone] topic
$ git status
# On branch topic
# Your branch is based on 'topicbase', but the upstream is gone.
# (use "git branch --unset-upstream" to fixup)
...
$ git status -b -s
## topic...topicbase [gone]
...
In order to do like that, we need to distinguish these three cases
(i.e. no tracking, with configured but no longer valid tracking, and
with tracking) in function stat_tracking_info(). So the refactored
function stat_tracking_info() has three return values: -1 (with "gone"
base), 0 (no base), and 1 (with base).
If the caller does not like to report tracking info when nothing
changed between the branch and its upstream, simply checks if
num_theirs and num_ours are both 0.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/231830/focus=232288
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-26 11:02:48 +04:00
|
|
|
cat >expect <<\EOF
|
2020-11-19 02:44:36 +03:00
|
|
|
## b1...origin/main [ahead 1, behind 1]
|
branch: report invalid tracking branch as gone
Command "git branch -vv" will report tracking branches, but invalid
tracking branches are also reported. This is because the function
stat_tracking_info() can not distinguish invalid tracking branch
from other cases which it would not like to report, such as
there is no upstream settings at all, or nothing is changed between
one branch and its upstream.
Junio suggested missing upstream should be reported [1] like:
$ git branch -v -v
master e67ac84 initial
* topic 3fc0f2a [topicbase: gone] topic
$ git status
# On branch topic
# Your branch is based on 'topicbase', but the upstream is gone.
# (use "git branch --unset-upstream" to fixup)
...
$ git status -b -s
## topic...topicbase [gone]
...
In order to do like that, we need to distinguish these three cases
(i.e. no tracking, with configured but no longer valid tracking, and
with tracking) in function stat_tracking_info(). So the refactored
function stat_tracking_info() has three return values: -1 (with "gone"
base), 0 (no base), and 1 (with base).
If the caller does not like to report tracking info when nothing
changed between the branch and its upstream, simply checks if
num_theirs and num_ours are both 0.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/231830/focus=232288
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-26 11:02:48 +04:00
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'status -s -b (diverged from upstream)' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b1 >/dev/null &&
|
|
|
|
git status -s -b | head -1
|
|
|
|
) >actual &&
|
|
|
|
test_i18ncmp expect actual
|
2018-01-09 21:50:17 +03:00
|
|
|
'
|
|
|
|
|
|
|
|
cat >expect <<\EOF
|
2020-11-19 02:44:36 +03:00
|
|
|
## b1...origin/main [different]
|
2018-01-09 21:50:17 +03:00
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'status -s -b --no-ahead-behind (diverged from upstream)' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b1 >/dev/null &&
|
|
|
|
git status -s -b --no-ahead-behind | head -1
|
|
|
|
) >actual &&
|
|
|
|
test_i18ncmp expect actual
|
2018-01-09 21:50:18 +03:00
|
|
|
'
|
|
|
|
|
2019-06-18 23:21:25 +03:00
|
|
|
cat >expect <<\EOF
|
2020-11-19 02:44:36 +03:00
|
|
|
## b1...origin/main [different]
|
2019-06-18 23:21:25 +03:00
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'status.aheadbehind=false status -s -b (diverged from upstream)' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b1 >/dev/null &&
|
|
|
|
git -c status.aheadbehind=false status -s -b | head -1
|
|
|
|
) >actual &&
|
|
|
|
test_i18ncmp expect actual
|
|
|
|
'
|
|
|
|
|
2018-01-09 21:50:18 +03:00
|
|
|
cat >expect <<\EOF
|
|
|
|
On branch b1
|
2020-11-19 02:44:36 +03:00
|
|
|
Your branch and 'origin/main' have diverged,
|
2018-01-09 21:50:18 +03:00
|
|
|
and have 1 and 1 different commits each, respectively.
|
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'status --long --branch' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b1 >/dev/null &&
|
|
|
|
git status --long -b | head -3
|
|
|
|
) >actual &&
|
|
|
|
test_i18ncmp expect actual
|
|
|
|
'
|
|
|
|
|
2019-06-18 23:21:25 +03:00
|
|
|
test_expect_success 'status --long --branch' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b1 >/dev/null &&
|
|
|
|
git -c status.aheadbehind=true status --long -b | head -3
|
|
|
|
) >actual &&
|
|
|
|
test_i18ncmp expect actual
|
|
|
|
'
|
|
|
|
|
2018-01-09 21:50:18 +03:00
|
|
|
cat >expect <<\EOF
|
|
|
|
On branch b1
|
2020-11-19 02:44:36 +03:00
|
|
|
Your branch and 'origin/main' refer to different commits.
|
2018-01-09 21:50:18 +03:00
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'status --long --branch --no-ahead-behind' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b1 >/dev/null &&
|
|
|
|
git status --long -b --no-ahead-behind | head -2
|
|
|
|
) >actual &&
|
|
|
|
test_i18ncmp expect actual
|
2019-06-18 23:21:25 +03:00
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'status.aheadbehind=false status --long --branch' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b1 >/dev/null &&
|
|
|
|
git -c status.aheadbehind=false status --long -b | head -2
|
|
|
|
) >actual &&
|
|
|
|
test_i18ncmp expect actual
|
branch: report invalid tracking branch as gone
Command "git branch -vv" will report tracking branches, but invalid
tracking branches are also reported. This is because the function
stat_tracking_info() can not distinguish invalid tracking branch
from other cases which it would not like to report, such as
there is no upstream settings at all, or nothing is changed between
one branch and its upstream.
Junio suggested missing upstream should be reported [1] like:
$ git branch -v -v
master e67ac84 initial
* topic 3fc0f2a [topicbase: gone] topic
$ git status
# On branch topic
# Your branch is based on 'topicbase', but the upstream is gone.
# (use "git branch --unset-upstream" to fixup)
...
$ git status -b -s
## topic...topicbase [gone]
...
In order to do like that, we need to distinguish these three cases
(i.e. no tracking, with configured but no longer valid tracking, and
with tracking) in function stat_tracking_info(). So the refactored
function stat_tracking_info() has three return values: -1 (with "gone"
base), 0 (no base), and 1 (with base).
If the caller does not like to report tracking info when nothing
changed between the branch and its upstream, simply checks if
num_theirs and num_ours are both 0.
[1]: http://thread.gmane.org/gmane.comp.version-control.git/231830/focus=232288
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2013-08-26 11:02:48 +04:00
|
|
|
'
|
|
|
|
|
|
|
|
cat >expect <<\EOF
|
|
|
|
## b5...brokenbase [gone]
|
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'status -s -b (upstream is gone)' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b5 >/dev/null &&
|
|
|
|
git status -s -b | head -1
|
|
|
|
) >actual &&
|
|
|
|
test_i18ncmp expect actual
|
|
|
|
'
|
|
|
|
|
2013-08-26 11:02:49 +04:00
|
|
|
cat >expect <<\EOF
|
2020-11-19 02:44:36 +03:00
|
|
|
## b6...origin/main
|
2013-08-26 11:02:49 +04:00
|
|
|
EOF
|
|
|
|
|
|
|
|
test_expect_success 'status -s -b (up-to-date with upstream)' '
|
|
|
|
(
|
|
|
|
cd test &&
|
|
|
|
git checkout b6 >/dev/null &&
|
|
|
|
git status -s -b | head -1
|
|
|
|
) >actual &&
|
|
|
|
test_i18ncmp expect actual
|
|
|
|
'
|
|
|
|
|
2011-02-17 02:12:20 +03:00
|
|
|
test_expect_success 'fail to track lightweight tags' '
|
2020-11-19 02:44:36 +03:00
|
|
|
git checkout main &&
|
2009-05-11 18:42:53 +04:00
|
|
|
git tag light &&
|
2011-02-17 02:12:20 +03:00
|
|
|
test_must_fail git branch --track lighttrack light >actual &&
|
2012-04-14 08:45:31 +04:00
|
|
|
test_i18ngrep ! "set up to track" actual &&
|
2011-02-17 02:12:20 +03:00
|
|
|
test_must_fail git checkout lighttrack
|
2009-05-11 18:42:53 +04:00
|
|
|
'
|
2008-07-03 23:09:48 +04:00
|
|
|
|
2011-02-17 02:12:20 +03:00
|
|
|
test_expect_success 'fail to track annotated tags' '
|
2020-11-19 02:44:36 +03:00
|
|
|
git checkout main &&
|
2009-05-11 18:42:53 +04:00
|
|
|
git tag -m heavy heavy &&
|
2011-02-17 02:12:20 +03:00
|
|
|
test_must_fail git branch --track heavytrack heavy >actual &&
|
2012-04-14 08:45:31 +04:00
|
|
|
test_i18ngrep ! "set up to track" actual &&
|
2011-02-17 02:12:20 +03:00
|
|
|
test_must_fail git checkout heavytrack
|
2009-05-11 18:42:53 +04:00
|
|
|
'
|
2010-01-18 23:44:11 +03:00
|
|
|
|
2017-08-17 05:54:24 +03:00
|
|
|
test_expect_success '--set-upstream-to does not change branch' '
|
2020-11-19 02:44:36 +03:00
|
|
|
git branch from-main main &&
|
|
|
|
git branch --set-upstream-to main from-main &&
|
|
|
|
git branch from-topic_2 main &&
|
2020-09-27 00:04:21 +03:00
|
|
|
test_must_fail git config branch.from-topic_2.merge > actual &&
|
|
|
|
git rev-list from-topic_2 &&
|
|
|
|
git update-ref refs/heads/from-topic_2 from-topic_2^ &&
|
|
|
|
git rev-parse from-topic_2 >expect2 &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git branch --set-upstream-to main from-topic_2 &&
|
|
|
|
git config branch.from-main.merge > actual &&
|
2020-09-27 00:04:21 +03:00
|
|
|
git rev-parse from-topic_2 >actual2 &&
|
2020-11-19 02:44:36 +03:00
|
|
|
grep -q "^refs/heads/main$" actual &&
|
2010-01-18 23:44:11 +03:00
|
|
|
cmp expect2 actual2
|
|
|
|
'
|
2011-08-19 15:45:43 +04:00
|
|
|
|
2017-08-17 05:54:24 +03:00
|
|
|
test_expect_success '--set-upstream-to @{-1}' '
|
|
|
|
git checkout follower &&
|
2020-09-27 00:04:21 +03:00
|
|
|
git checkout from-topic_2 &&
|
|
|
|
git config branch.from-topic_2.merge > expect2 &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git branch --set-upstream-to @{-1} from-main &&
|
|
|
|
git config branch.from-main.merge > actual &&
|
2020-09-27 00:04:21 +03:00
|
|
|
git config branch.from-topic_2.merge > actual2 &&
|
2020-11-19 02:44:36 +03:00
|
|
|
git branch --set-upstream-to follower from-main &&
|
|
|
|
git config branch.from-main.merge > expect &&
|
2011-08-19 15:45:43 +04:00
|
|
|
test_cmp expect2 actual2 &&
|
|
|
|
test_cmp expect actual
|
|
|
|
'
|
|
|
|
|
2008-07-03 23:09:48 +04:00
|
|
|
test_done
|