add `shallow` option to git source type

This commit is contained in:
Enno Lohmeier 2020-07-02 09:27:55 +02:00
parent 3e731035ed
commit 54eb1c89cf
3 changed files with 23 additions and 3 deletions

View File

@ -242,6 +242,10 @@ Supported attributes:
* `clean.exclude` -
List of patterns that should be excluded from Git cleaning.
* `shallow` (optional)
boolean that controls whether only the requested commit ref. should be fetched
instead of the whole history, to save disk space and bandwith. Defaults to `false`.
### `pass`

View File

@ -140,6 +140,10 @@
url = lib.mkOption {
type = lib.types.str; # TODO lib.types.git.url
};
shallow = lib.mkOption {
default = false;
type = lib.types.bool;
};
};
};
pass = lib.types.submodule {

View File

@ -53,7 +53,11 @@ let
pop.git = target: source: runShell target /* sh */ ''
set -efu
if ! test -e ${quote target.path}; then
git clone --recurse-submodules ${quote source.url} ${quote target.path}
${if source.shallow then /* sh */ ''
git init ${quote target.path}
'' else /* sh */ ''
git clone --recurse-submodules ${quote source.url} ${quote target.path}
''}
fi
cd ${quote target.path}
if ! url=$(git config remote.origin.url); then
@ -67,10 +71,18 @@ let
if ! test "$(git log --format=%H -1)" = "$hash"; then
${if source.fetchAlways then /* sh */ ''
git fetch origin
${if source.shallow then /* sh */ ''
git fetch --depth=1 origin "$hash"
'' else /* sh */ ''
git fetch origin
''}
'' else /* sh */ ''
if ! git log -1 "$hash" >/dev/null 2>&1; then
git fetch origin
${if source.shallow then /* sh */ ''
git fetch --depth=1 origin "$hash"
'' else /* sh */ ''
git fetch origin
''}
fi
''}
git reset --hard "$hash" >&2