Merge branch 'nm/maint-conflicted-submodule-entries' into maint
* nm/maint-conflicted-submodule-entries: submodule: process conflicting submodules only once
This commit is contained in:
commit
0c41f33c19
@ -101,9 +101,10 @@ status::
|
|||||||
currently checked out commit for each submodule, along with the
|
currently checked out commit for each submodule, along with the
|
||||||
submodule path and the output of 'git describe' for the
|
submodule path and the output of 'git describe' for the
|
||||||
SHA-1. Each SHA-1 will be prefixed with `-` if the submodule is not
|
SHA-1. Each SHA-1 will be prefixed with `-` if the submodule is not
|
||||||
initialized and `+` if the currently checked out submodule commit
|
initialized, `+` if the currently checked out submodule commit
|
||||||
does not match the SHA-1 found in the index of the containing
|
does not match the SHA-1 found in the index of the containing
|
||||||
repository. This command is the default command for 'git submodule'.
|
repository and `U` if the submodule has merge conflicts.
|
||||||
|
This command is the default command for 'git submodule'.
|
||||||
+
|
+
|
||||||
If '--recursive' is specified, this command will recurse into nested
|
If '--recursive' is specified, this command will recurse into nested
|
||||||
submodules, and show their status as well.
|
submodules, and show their status as well.
|
||||||
|
@ -72,7 +72,24 @@ resolve_relative_url ()
|
|||||||
#
|
#
|
||||||
module_list()
|
module_list()
|
||||||
{
|
{
|
||||||
git ls-files --error-unmatch --stage -- "$@" | sane_grep '^160000 '
|
git ls-files --error-unmatch --stage -- "$@" |
|
||||||
|
perl -e '
|
||||||
|
my %unmerged = ();
|
||||||
|
my ($null_sha1) = ("0" x 40);
|
||||||
|
while (<STDIN>) {
|
||||||
|
chomp;
|
||||||
|
my ($mode, $sha1, $stage, $path) =
|
||||||
|
/^([0-7]+) ([0-9a-f]{40}) ([0-3])\t(.*)$/;
|
||||||
|
next unless $mode eq "160000";
|
||||||
|
if ($stage ne "0") {
|
||||||
|
if (!$unmerged{$path}++) {
|
||||||
|
print "$mode $null_sha1 U\t$path\n";
|
||||||
|
}
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
print "$_\n";
|
||||||
|
}
|
||||||
|
'
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -427,6 +444,11 @@ cmd_update()
|
|||||||
module_list "$@" |
|
module_list "$@" |
|
||||||
while read mode sha1 stage path
|
while read mode sha1 stage path
|
||||||
do
|
do
|
||||||
|
if test "$stage" = U
|
||||||
|
then
|
||||||
|
echo >&2 "Skipping unmerged submodule $path"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
name=$(module_name "$path") || exit
|
name=$(module_name "$path") || exit
|
||||||
url=$(git config submodule."$name".url)
|
url=$(git config submodule."$name".url)
|
||||||
update_module=$(git config submodule."$name".update)
|
update_module=$(git config submodule."$name".update)
|
||||||
@ -770,6 +792,11 @@ cmd_status()
|
|||||||
name=$(module_name "$path") || exit
|
name=$(module_name "$path") || exit
|
||||||
url=$(git config submodule."$name".url)
|
url=$(git config submodule."$name".url)
|
||||||
displaypath="$prefix$path"
|
displaypath="$prefix$path"
|
||||||
|
if test "$stage" = U
|
||||||
|
then
|
||||||
|
say "U$sha1 $displaypath"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
if test -z "$url" || ! test -d "$path"/.git -o -f "$path"/.git
|
if test -z "$url" || ! test -d "$path"/.git -o -f "$path"/.git
|
||||||
then
|
then
|
||||||
say "-$sha1 $displaypath"
|
say "-$sha1 $displaypath"
|
||||||
|
@ -58,9 +58,9 @@ test_expect_success setup '
|
|||||||
#
|
#
|
||||||
# b
|
# b
|
||||||
# / \
|
# / \
|
||||||
# a d
|
# init -- a d
|
||||||
# \ /
|
# \ \ /
|
||||||
# c
|
# g c
|
||||||
#
|
#
|
||||||
# a in the main repository records to sub-a in the submodule and
|
# a in the main repository records to sub-a in the submodule and
|
||||||
# analogous b and c. d should be automatically found by merging c into
|
# analogous b and c. d should be automatically found by merging c into
|
||||||
@ -76,6 +76,8 @@ test_expect_success 'setup for merge search' '
|
|||||||
git add file-a &&
|
git add file-a &&
|
||||||
git commit -m "sub-a" &&
|
git commit -m "sub-a" &&
|
||||||
git branch sub-a) &&
|
git branch sub-a) &&
|
||||||
|
git commit --allow-empty -m init &&
|
||||||
|
git branch init &&
|
||||||
git add sub &&
|
git add sub &&
|
||||||
git commit -m "a" &&
|
git commit -m "a" &&
|
||||||
git branch a &&
|
git branch a &&
|
||||||
@ -101,7 +103,13 @@ test_expect_success 'setup for merge search' '
|
|||||||
git checkout -b sub-d sub-b &&
|
git checkout -b sub-d sub-b &&
|
||||||
git merge sub-c) &&
|
git merge sub-c) &&
|
||||||
git commit -a -m "d" &&
|
git commit -a -m "d" &&
|
||||||
git branch test b)
|
git branch test b &&
|
||||||
|
|
||||||
|
git checkout -b g init &&
|
||||||
|
(cd sub &&
|
||||||
|
git checkout -b sub-g sub-c) &&
|
||||||
|
git add sub &&
|
||||||
|
git commit -a -m "g")
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'merge with one side as a fast-forward of the other' '
|
test_expect_success 'merge with one side as a fast-forward of the other' '
|
||||||
@ -176,6 +184,44 @@ test_expect_success 'merging should fail for changes that are backwards' '
|
|||||||
test_must_fail git merge f)
|
test_must_fail git merge f)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
||||||
|
# Check that the conflicting submodule is detected when it is
|
||||||
|
# in the common ancestor. status should be 'U00...00"
|
||||||
|
test_expect_success 'git submodule status should display the merge conflict properly with merge base' '
|
||||||
|
(cd merge-search &&
|
||||||
|
cat >.gitmodules <<EOF &&
|
||||||
|
[submodule "sub"]
|
||||||
|
path = sub
|
||||||
|
url = $TRASH_DIRECTORY/sub
|
||||||
|
EOF
|
||||||
|
cat >expect <<EOF &&
|
||||||
|
U0000000000000000000000000000000000000000 sub
|
||||||
|
EOF
|
||||||
|
git submodule status > actual &&
|
||||||
|
test_cmp expect actual &&
|
||||||
|
git reset --hard)
|
||||||
|
'
|
||||||
|
|
||||||
|
# Check that the conflicting submodule is detected when it is
|
||||||
|
# not in the common ancestor. status should be 'U00...00"
|
||||||
|
test_expect_success 'git submodule status should display the merge conflict properly without merge-base' '
|
||||||
|
(cd merge-search &&
|
||||||
|
git checkout -b test-no-merge-base g &&
|
||||||
|
test_must_fail git merge b &&
|
||||||
|
cat >.gitmodules <<EOF &&
|
||||||
|
[submodule "sub"]
|
||||||
|
path = sub
|
||||||
|
url = $TRASH_DIRECTORY/sub
|
||||||
|
EOF
|
||||||
|
cat >expect <<EOF &&
|
||||||
|
U0000000000000000000000000000000000000000 sub
|
||||||
|
EOF
|
||||||
|
git submodule status > actual &&
|
||||||
|
test_cmp expect actual &&
|
||||||
|
git reset --hard)
|
||||||
|
'
|
||||||
|
|
||||||
|
|
||||||
test_expect_success 'merging with a modify/modify conflict between merge bases' '
|
test_expect_success 'merging with a modify/modify conflict between merge bases' '
|
||||||
git reset --hard HEAD &&
|
git reset --hard HEAD &&
|
||||||
git checkout -b test2 c &&
|
git checkout -b test2 c &&
|
||||||
|
Loading…
Reference in New Issue
Block a user