From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: max@max630.net, "Junio C Hamano" <gitster@pobox.com>,
git@drmicha.warpmail.net, Jens.Lehmann@web.de,
larsxschneider@gmail.com, sbeller@google.com,
mhagger@alum.mit.edu, "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v4 4/4] t2029: some really basic tests for submodules in multi worktree
Date: Wed, 20 Jul 2016 19:24:19 +0200 [thread overview]
Message-ID: <20160720172419.25473-5-pclouds@gmail.com> (raw)
In-Reply-To: <20160720172419.25473-1-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
t/t2029-worktree-submodule.sh (new +x) | 166 +++++++++++++++++++++++++++++++++
1 file changed, 166 insertions(+)
create mode 100755 t/t2029-worktree-submodule.sh
diff --git a/t/t2029-worktree-submodule.sh b/t/t2029-worktree-submodule.sh
new file mode 100755
index 0000000..f96fa50
--- /dev/null
+++ b/t/t2029-worktree-submodule.sh
@@ -0,0 +1,166 @@
+#!/bin/sh
+
+test_description='submodule with multiple worktrees'
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+ git config extensions.worktreeConfig true &&
+ >t &&
+ git add t &&
+ git commit -m initial &&
+ git branch initial
+'
+
+test_expect_success 'setup - repository in init subdirectory' '
+ mkdir init &&
+ (
+ cd init &&
+ git init &&
+ git config extensions.worktreeConfig true &&
+ echo a >a &&
+ git add a &&
+ git commit -m "submodule commit 1" &&
+ git tag -a -m "rev-1" rev-1
+ )
+'
+
+test_expect_success 'setup - commit with gitlink' '
+ echo a >a &&
+ echo z >z &&
+ git add a init z &&
+ git commit -m "super commit 1"
+'
+
+test_expect_success 'setup - hide init subdirectory' '
+ mv init .subrepo
+'
+
+test_expect_success 'setup - repository to add submodules to' '
+ git init addtest &&
+ git -C addtest config extensions.worktreeConfig true &&
+ git init addtest-ignore &&
+ git -C addtest-ignore config extensions.worktreeConfig true
+'
+
+# The 'submodule add' tests need some repository to add as a submodule.
+# The trash directory is a good one as any. We need to canonicalize
+# the name, though, as some tests compare it to the absolute path git
+# generates, which will expand symbolic links.
+submodurl=$(pwd -P)
+
+listbranches() {
+ git for-each-ref --format='%(refname)' 'refs/heads/*'
+}
+
+inspect() {
+ dir=$1 &&
+ dotdot="${2:-..}" &&
+
+ (
+ cd "$dir" &&
+ listbranches >"$dotdot/heads" &&
+ { git symbolic-ref HEAD || :; } >"$dotdot/head" &&
+ git rev-parse HEAD >"$dotdot/head-sha1" &&
+ git update-index --refresh &&
+ git diff-files --exit-code &&
+ git clean -n -d -x >"$dotdot/untracked"
+ )
+}
+
+test_expect_success 'submodule add' '
+ echo "refs/heads/master" >expect &&
+ >empty &&
+
+ (
+ cd addtest &&
+ git submodule add -q "$submodurl" submod >actual &&
+ test_must_be_empty actual &&
+ echo "gitdir: ../.git/modules/submod" >expect &&
+ test_cmp expect submod/.git &&
+ (
+ cd submod &&
+ git config core.worktree >actual &&
+ echo "../../../submod" >expect &&
+ test_cmp expect actual &&
+ rm -f actual expect
+ ) &&
+ git submodule init
+ ) &&
+
+ rm -f heads head untracked &&
+ inspect addtest/submod ../.. &&
+ test_cmp expect heads &&
+ test_cmp expect head &&
+ test_cmp empty untracked
+'
+
+test_expect_success 'submodule.* in supermodule is per-worktree' '
+ (
+ cd addtest &&
+ git config -f .git/config.worktree submodule.submod.url >actual &&
+ echo "$submodurl" >expect &&
+ test_cmp expect actual
+ )
+'
+
+test_expect_success 'turn submodule to multiworktree' '
+ (
+ cd addtest/.git/modules/submod &&
+ CORE_WT="$(git config core.worktree)" &&
+ git config -f config.worktree core.worktree "$CORE_WT" &&
+ git config --unset core.worktree &&
+ git config extensions.worktreeConfig true &&
+ git config core.worktree >actual &&
+ echo "$CORE_WT" >expect &&
+ test_cmp expect actual
+ )
+'
+
+test_expect_success 'new worktree in submodule' '
+ (
+ cd addtest/submod &&
+ git worktree add submod-elsewhere &&
+ cd submod-elsewhere &&
+ test_must_fail git config core.worktree
+ )
+'
+
+test_expect_success 'new worktree in supermodule' '
+ (
+ cd addtest &&
+ git commit -m initial &&
+ git worktree add super-elsewhere &&
+ cd super-elsewhere &&
+ test_must_fail git config submodule.submode
+ )
+'
+
+test_expect_success 'submodule add in the second worktree' '
+ (
+ cd addtest/super-elsewhere &&
+ git submodule add -q "$submodurl" submod2 >actual &&
+ test_must_be_empty actual &&
+ echo "gitdir: ../../.git/worktrees/super-elsewhere/modules/submod2" >expect &&
+ test_cmp expect submod2/.git &&
+ (
+ cd submod2 &&
+ git config core.worktree >actual &&
+ echo "../../../../../super-elsewhere/submod2" >expect &&
+ test_cmp expect actual &&
+ rm -f actual expect
+ ) &&
+ git submodule init
+ )
+'
+
+test_expect_success 'submodule.* in supermodule is per-worktree' '
+ (
+ cd addtest/super-elsewhere &&
+ git config -f ../.git/worktrees/super-elsewhere/config.worktree submodule.submod2.url >actual &&
+ echo "$submodurl" >expect &&
+ test_cmp expect actual
+ )
+'
+
+test_done
--
2.9.1.566.gbd532d4
prev parent reply other threads:[~2016-07-20 17:25 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-19 20:59 Current state of Git worktree used with submodules? Lars Schneider
2016-07-20 4:14 ` Duy Nguyen
2016-07-20 17:24 ` [PATCH v4 0/4] Split .git/config in multiple worktree setup Nguyễn Thái Ngọc Duy
2016-07-20 17:24 ` [PATCH v4 1/4] worktree: add per-worktree config files Nguyễn Thái Ngọc Duy
2016-07-26 0:59 ` Stefan Beller
2016-07-26 15:04 ` Duy Nguyen
2016-07-20 17:24 ` [PATCH v4 2/4] submodule: update core.worktree using git-config Nguyễn Thái Ngọc Duy
2016-07-20 22:04 ` Stefan Beller
2016-07-22 17:15 ` Duy Nguyen
2016-07-20 17:24 ` [PATCH v4 3/4] submodule: support running in multiple worktree setup Nguyễn Thái Ngọc Duy
2016-07-20 23:22 ` Stefan Beller
2016-07-22 0:37 ` Stefan Beller
2016-07-22 7:32 ` Jens Lehmann
2016-07-22 16:07 ` Stefan Beller
2016-07-22 16:55 ` Junio C Hamano
2016-07-22 17:40 ` Stefan Beller
2016-07-25 15:46 ` Junio C Hamano
2016-07-22 17:09 ` Duy Nguyen
2016-07-22 17:25 ` Stefan Beller
2016-07-22 17:42 ` Duy Nguyen
2016-07-25 23:25 ` Stefan Beller
2016-07-26 17:20 ` Duy Nguyen
2016-07-26 18:15 ` Stefan Beller
2016-07-27 14:37 ` Jakub Narębski
2016-07-27 16:53 ` Stefan Beller
2016-07-27 15:40 ` Duy Nguyen
2016-08-03 21:47 ` Stefan Beller
2016-07-27 4:10 ` Max Kirillov
2016-07-27 14:40 ` Jakub Narębski
2016-07-27 14:49 ` Duy Nguyen
2016-07-20 17:24 ` Nguyễn Thái Ngọc Duy [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160720172419.25473-5-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=Jens.Lehmann@web.de \
--cc=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=larsxschneider@gmail.com \
--cc=max@max630.net \
--cc=mhagger@alum.mit.edu \
--cc=sbeller@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.