Merge pull request #15 from nyantec/feature/filters

support for include filters
This commit is contained in:
tv 2020-02-18 14:36:30 +01:00 committed by GitHub
commit ed9fc66582
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 2 deletions

View File

@ -157,6 +157,17 @@ Supported attributes:
manual](https://download.samba.org/pub/rsync/rsync.html) for further
information.
* `filters` (optional)
List of filters that should be passed to rsync. Filters are specified as
attribute sets with the attributes `type` and `pattern`. Supported filter
types are `include` and `exclude`. This allows for more advanced
configurations.
* `deleteExcluded` (optional)
boolean that controls whether the excluded directories should be deleted
if they exist on the target. This is passed to the `--delete-excluded` option
of rsync. Defaults to `true`.
### `git`

View File

@ -54,6 +54,18 @@
};
});
filter = lib.types.submodule {
options = {
type = lib.mkOption {
type = lib.types.enum ["include" "exclude"];
default = "exclude";
};
pattern = lib.mkOption {
type = lib.types.str;
};
};
};
source-types = {
derivation = lib.types.submodule {
options = {
@ -76,6 +88,28 @@
default = [];
example = [".git"];
};
filters = lib.mkOption {
type = lib.types.listOf filter;
default = [];
example = [
{
type = "include";
pattern = "*.nix";
}
{
type = "include";
pattern = "*/";
}
{
type = "exclude";
pattern = "*";
}
];
};
deleteExcluded = lib.mkOption {
default = true;
type = lib.types.bool;
};
};
};
git = lib.types.submodule {

View File

@ -45,7 +45,7 @@ let
'';
pop.file = target: source: let
configAttrs = ["useChecksum" "exclude"];
configAttrs = ["useChecksum" "exclude" "filters" "deleteExcluded"];
config = filterAttrs (name: _: elem name configAttrs) source;
in
rsync' target config (quote source.path);
@ -161,9 +161,12 @@ let
${concatMapStringsSep " "
(pattern: /* sh */ "--exclude ${quote pattern}")
(config.exclude or [])} \
${concatMapStringsSep " "
(filter: /* sh */ "--${filter.type} ${quote filter.pattern}")
(config.filters or [])} \
-e ${quote (ssh' target)} \
-vFrlptD \
--delete-excluded \
${optionalString (config.deleteExcluded or true) /* sh */ "--delete-excluded"} \
"$source_path" \
${quote (
optionalString (!isLocalTarget target) (