# Bug: cherry-pick & submodule

2 messages from 2017-11-10 to 2017-11-11. Participants: Ефимов Василий, Stefan Beller.
Thread: https://gitlist.dev/t/47159

## Ефимов Василий, 2017-11-10 16:41

Subject: Bug: cherry-pick & submodule
Message-ID: <743acc29-85bb-3773-b6a0-68d4a0b8fd63@ispras.ru>
URL: https://gitlist.dev/e/743acc29-85bb-3773-b6a0-68d4a0b8fd63%40ispras.ru

```
I faced an unexpected behaviour during cherry-picking
a commit to a branch with a submodule.

Git graph:

A -- B [master]
  \
   `- C -- D [test]

Both branches have a file with name `a_file`.
It has been added by commit A.
Commits B and C add a folder with name `a_submodule` to the respective 
branches.
Commit C does it regularly by adding a file with name `a_submodule/content`.
Commit B adds a submodule with name `a_submodule`.
Commit D only modifies `a_file`.
Note that `a_file` and `a_submodule` are not related.

[repo]
   |- a_file
   `- a_submodule

When I trying to cherry pick commit D on commit B, I got
a conflict with `a_submodule`. Changes of `a_file` are
successfully cherry-picked.

I expected, that there would be no conflicts.

A bash script reproducing the bug is listed below.

Vasily.

====
rm -rf a_submodule a_repo

mkdir a_submodule
cd a_submodule
git init
touch a_file_in_a_submodule
git add a_file_in_a_submodule
git commit -m "add a file in a submodule"
cd ..

mkdir a_repo
cd a_repo
git init

touch a_file
git add a_file
git commit -m "add a file"

git branch test
git checkout test

mkdir a_submodule
touch a_submodule/content
git add a_submodule/content
git commit -m "add a regular folder with name a_submodule"

echo "123" > a_file
git add a_file
git commit -m "modify a file"

git checkout master

git submodule add ../a_submodule a_submodule
git submodule update a_submodule
git commit -m "add a submodule info folder with name a_submodule"

# Trying to cherry-pick modification of a file from test branch.
git cherry-pick test

# some debug
git status
====

```

## Stefan Beller, 2017-11-11 00:04

Subject: [PATCH] t/3512: demonstrate unrelated submodule/file conflict as cherry-pick failure
Message-ID: <20171111000443.16675-1-sbeller@google.com>
URL: https://gitlist.dev/e/20171111000443.16675-1-sbeller%40google.com
In-Reply-To: <743acc29-85bb-3773-b6a0-68d4a0b8fd63@ispras.ru>

```
Signed-off-by: Stefan Beller <sbeller@google.com>
---

I rewrote your script to integrate with our test suite, potentially acting as
a regression test once we solve the Directory/File conflict issue.

Thanks,
Stefan

 t/t3512-cherry-pick-submodule.sh | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/t/t3512-cherry-pick-submodule.sh b/t/t3512-cherry-pick-submodule.sh
index 6863b7bb6f..17a6773247 100755
--- a/t/t3512-cherry-pick-submodule.sh
+++ b/t/t3512-cherry-pick-submodule.sh
@@ -10,4 +10,40 @@ KNOWN_FAILURE_NOFF_MERGE_DOESNT_CREATE_EMPTY_SUBMODULE_DIR=1
 KNOWN_FAILURE_NOFF_MERGE_ATTEMPTS_TO_MERGE_REMOVED_SUBMODULE_FILES=1
 test_submodule_switch "git cherry-pick"
 
+test_expect_failure 'unrelated submodule/file conflict is ignored' '
+	test_create_repo sub &&
+
+	touch sub/file &&
+	git -C sub add file &&
+	git -C sub commit -m "add a file in a submodule" &&
+
+	test_create_repo a_repo &&
+	(
+		cd a_repo &&
+		touch a_file &&
+		git add a_file &&
+		git commit -m "add a file" &&
+
+		git branch test &&
+		git checkout test &&
+
+		mkdir sub &&
+		touch sub/content &&
+		git add sub/content &&
+		git commit -m "add a regular folder with name sub" &&
+
+		echo "123" >a_file &&
+		git add a_file &&
+		git commit -m "modify a file" &&
+
+		git checkout master &&
+
+		git submodule add ../sub sub &&
+		git submodule update sub &&
+		git commit -m "add a submodule info folder with name sub" &&
+
+		git cherry-pick test
+	)
+'
+
 test_done
-- 
2.15.0.128.gcadd42da22


```
