Skip to content

Commit

Permalink
Merge branch 'fg/submodule-clone-depth'
Browse files Browse the repository at this point in the history
Allow shallow-cloning of submodules with "git submodule update".

* fg/submodule-clone-depth:
  Add --depth to submodule update/add
  • Loading branch information
Junio C Hamano committed Jul 15, 2013
2 parents 3bb6149 + 275cd18 commit 2bb7afa
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 12 deletions.
10 changes: 8 additions & 2 deletions Documentation/git-submodule.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ SYNOPSIS
--------
[verse]
'git submodule' [--quiet] add [-b <branch>] [-f|--force] [--name <name>]
[--reference <repository>] [--] <repository> [<path>]
[--reference <repository>] [--depth <depth>] [--] <repository> [<path>]
'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...]
'git submodule' [--quiet] init [--] [<path>...]
'git submodule' [--quiet] deinit [-f|--force] [--] <path>...
'git submodule' [--quiet] update [--init] [--remote] [-N|--no-fetch]
[-f|--force] [--rebase] [--reference <repository>]
[-f|--force] [--rebase] [--reference <repository>] [--depth <depth>]
[--merge] [--recursive] [--] [<path>...]
'git submodule' [--quiet] summary [--cached|--files] [(-n|--summary-limit) <n>]
[commit] [--] [<path>...]
Expand Down Expand Up @@ -330,6 +330,12 @@ for linkgit:git-clone[1]'s `--reference` and `--shared` options carefully.
only in the submodules of the current repo, but also
in any nested submodules inside those submodules (and so on).

--depth::
This option is valid for add and update commands. Create a 'shallow'
clone with a history truncated to the specified number of revisions.
See linkgit:git-clone[1]


<path>...::
Paths to submodule(s). When specified this will restrict the command
to only operate on the submodules found at the specified paths.
Expand Down
24 changes: 21 additions & 3 deletions git-submodule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ nofetch=
update=
prefix=
custom_name=
depth=

# The function takes at most 2 arguments. The first argument is the
# URL that navigates to the submodule origin repo. When relative, this URL
Expand Down Expand Up @@ -251,6 +252,7 @@ module_clone()
name=$2
url=$3
reference="$4"
depth="$5"
quiet=
if test -n "$GIT_QUIET"
then
Expand All @@ -273,7 +275,7 @@ module_clone()
mkdir -p "$gitdir_base"
(
clear_local_git_env
git clone $quiet -n ${reference:+"$reference"} \
git clone $quiet ${depth:+"$depth"} -n ${reference:+"$reference"} \
--separate-git-dir "$gitdir" "$url" "$sm_path"
) ||
die "$(eval_gettext "Clone of '\$url' into submodule path '\$sm_path' failed")"
Expand Down Expand Up @@ -350,6 +352,14 @@ cmd_add()
custom_name=$2
shift
;;
--depth)
case "$2" in '') usage ;; esac
depth="--depth=$2"
shift
;;
--depth=*)
depth=$1
;;
--)
shift
break
Expand Down Expand Up @@ -459,7 +469,7 @@ Use -f if you really want to add it." >&2
echo "$(eval_gettext "Reactivating local git directory for submodule '\$sm_name'.")"
fi
fi
module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" || exit
module_clone "$sm_path" "$sm_name" "$realrepo" "$reference" "$depth" || exit
(
clear_local_git_env
cd "$sm_path" &&
Expand Down Expand Up @@ -736,6 +746,14 @@ cmd_update()
--checkout)
update="checkout"
;;
--depth)
case "$2" in '') usage ;; esac
depth="--depth=$2"
shift
;;
--depth=*)
depth=$1
;;
--)
shift
break
Expand Down Expand Up @@ -797,7 +815,7 @@ Maybe you want to use 'update --init'?")"

if ! test -d "$sm_path"/.git -o -f "$sm_path"/.git
then
module_clone "$sm_path" "$name" "$url" "$reference" || exit
module_clone "$sm_path" "$name" "$url" "$reference" "$depth" || exit
cloned_modules="$cloned_modules;$name"
subsha1=
else
Expand Down
16 changes: 16 additions & 0 deletions t/t7400-submodule-basic.sh
Original file line number Diff line number Diff line change
Expand Up @@ -963,4 +963,20 @@ test_expect_success 'submodule with UTF-8 name' '
git submodule >&2 &&
test -n "$(git submodule | grep "$svname")"
'

test_expect_success 'submodule add clone shallow submodule' '
mkdir super &&
pwd=$(pwd)
(
cd super &&
git init &&
git submodule add --depth=1 file://"$pwd"/example2 submodule &&
(
cd submodule &&
test 1 = $(git log --oneline | wc -l)
)
)
'


test_done
24 changes: 17 additions & 7 deletions t/t7406-submodule-update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -729,14 +729,24 @@ test_expect_success 'submodule update properly revives a moved submodule' '
test_expect_success SYMLINKS 'submodule update can handle symbolic links in pwd' '
mkdir -p linked/dir &&
ln -s linked/dir linkto &&
(
cd linkto &&
git clone "$TRASH_DIRECTORY"/super_update_r2 super &&
(
cd super &&
git submodule update --init --recursive
)
(cd linkto &&
git clone "$TRASH_DIRECTORY"/super_update_r2 super &&
(cd super &&
git submodule update --init --recursive
)
)
'

test_expect_success 'submodule update clone shallow submodule' '
git clone cloned super3 &&
pwd=$(pwd)
(cd super3 &&
sed -e "s#url = ../#url = file://$pwd/#" <.gitmodules >.gitmodules.tmp &&
mv -f .gitmodules.tmp .gitmodules &&
git submodule update --init --depth=3
(cd submodule &&
test 1 = $(git log --oneline | wc -l)
)
)
'
test_done

0 comments on commit 2bb7afa

Please sign in to comment.