Merge pull request #21 from elohmeier/git-shallow

add shallow option to git source type
This commit is contained in:
tv 2020-07-02 19:44:56 +02:00 committed by GitHub
commit 5ea125514e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 3 deletions

View File

@ -242,6 +242,10 @@ Supported attributes:
* `clean.exclude` - * `clean.exclude` -
List of patterns that should be excluded from Git cleaning. 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` ### `pass`

View File

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

View File

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