mirror of
https://github.com/git/git
synced 2024-08-28 12:09:19 +00:00
![Fredrik Gustafsson](/assets/img/avatar_default.png)
Move git-dir for submodules into $GIT_DIR/modules/[name_of_submodule] of the superproject. This is a step towards being able to delete submodule directories without loosing the information from their .git directory as that is now stored outside the submodules work tree. This is done relying on the already existent .git-file functionality. When adding or updating a submodule whose git directory is found under $GIT_DIR/modules/[name_of_submodule], don't clone it again but simply point the .git-file to it and remove the now stale index file from it. The index will be recreated by the following checkout. This patch will not affect already cloned submodules at all. Tests that rely on .git being a directory have been fixed. Signed-off-by: Fredrik Gustafsson <iveqy@iveqy.com> Mentored-by: Jens Lehmann <Jens.Lehmann@web.de> Mentored-by: Heiko Voigt <hvoigt@hvoigt.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
82 lines
1.8 KiB
Bash
Executable file
82 lines
1.8 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2009, Red Hat Inc, Author: Michael S. Tsirkin (mst@redhat.com)
|
|
#
|
|
|
|
test_description='test clone --reference'
|
|
. ./test-lib.sh
|
|
|
|
base_dir=`pwd`
|
|
|
|
U=$base_dir/UPLOAD_LOG
|
|
|
|
test_expect_success 'preparing first repository' \
|
|
'test_create_repo A && cd A &&
|
|
echo first > file1 &&
|
|
git add file1 &&
|
|
git commit -m A-initial'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'preparing second repository' \
|
|
'git clone A B && cd B &&
|
|
echo second > file2 &&
|
|
git add file2 &&
|
|
git commit -m B-addition &&
|
|
git repack -a -d &&
|
|
git prune'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'preparing supermodule' \
|
|
'test_create_repo super && cd super &&
|
|
echo file > file &&
|
|
git add file &&
|
|
git commit -m B-super-initial'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'submodule add --reference' \
|
|
'cd super && git submodule add --reference ../B "file://$base_dir/A" sub &&
|
|
git commit -m B-super-added'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'after add: existence of info/alternates' \
|
|
'test `wc -l <super/.git/modules/sub/objects/info/alternates` = 1'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'that reference gets used with add' \
|
|
'cd super/sub &&
|
|
echo "0 objects, 0 kilobytes" > expected &&
|
|
git count-objects > current &&
|
|
diff expected current'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'cloning supermodule' \
|
|
'git clone super super-clone'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'update with reference' \
|
|
'cd super-clone && git submodule update --init --reference ../B'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'after update: existence of info/alternates' \
|
|
'test `wc -l <super-clone/.git/modules/sub/objects/info/alternates` = 1'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_expect_success 'that reference gets used with update' \
|
|
'cd super-clone/sub &&
|
|
echo "0 objects, 0 kilobytes" > expected &&
|
|
git count-objects > current &&
|
|
diff expected current'
|
|
|
|
cd "$base_dir"
|
|
|
|
test_done
|