summary refs log tree commit diff
diff options
context:
space:
mode:
authorDan Peebles <pumpkin@me.com>2017-08-29 20:27:04 -0400
committerDan Peebles <pumpkin@me.com>2017-08-29 20:27:04 -0400
commite2589b3ca22c93029051efcde62aa773fe3085b4 (patch)
tree4a386d62a275513fbcc2806b96fc0789231f8d6c
parentac388e9f87adfc6c6c7b2624c8d3048e0bc3bfd3 (diff)
downloadnixpkgs-e2589b3ca22c93029051efcde62aa773fe3085b4.tar
nixpkgs-e2589b3ca22c93029051efcde62aa773fe3085b4.tar.gz
nixpkgs-e2589b3ca22c93029051efcde62aa773fe3085b4.tar.bz2
nixpkgs-e2589b3ca22c93029051efcde62aa773fe3085b4.tar.lz
nixpkgs-e2589b3ca22c93029051efcde62aa773fe3085b4.tar.xz
nixpkgs-e2589b3ca22c93029051efcde62aa773fe3085b4.tar.zst
nixpkgs-e2589b3ca22c93029051efcde62aa773fe3085b4.zip
Deduplicate some filterSource invocations
This version should have more conventional regexes that work across many
platforms and regex engines. This is an issue because up until Nix 1.11,
Nix called out to the libc regex matcher, which behaved differently on
Darwin and Linux. And in Nix 1.12, we're moving to std::regex which will
also behave differently here.

And yes, I do actually evaluate make-disk-image.nix on Darwin ;)
-rw-r--r--lib/sources.nix2
-rw-r--r--nixos/lib/make-disk-image.nix14
-rw-r--r--nixos/modules/installer/cd-dvd/channel.nix11
3 files changed, 4 insertions, 23 deletions
diff --git a/lib/sources.nix b/lib/sources.nix
index 8f312a9db5c..0ec4c020e54 100644
--- a/lib/sources.nix
+++ b/lib/sources.nix
@@ -17,6 +17,8 @@ rec {
     (type == "directory" && (baseName == ".git" || baseName == ".svn" || baseName == "CVS" || baseName == ".hg")) ||
     # Filter out backup files.
     lib.hasSuffix "~" baseName ||
+    builtins.match "^.*\.sw[a-z]$" baseName != null ||
+
     # Filter out generates files.
     lib.hasSuffix ".o" baseName ||
     lib.hasSuffix ".so" baseName ||
diff --git a/nixos/lib/make-disk-image.nix b/nixos/lib/make-disk-image.nix
index 9c91bf39225..d4b2e338c3e 100644
--- a/nixos/lib/make-disk-image.nix
+++ b/nixos/lib/make-disk-image.nix
@@ -45,19 +45,7 @@ let
     raw   = "img";
   };
 
-  # Copied from https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/installer/cd-dvd/channel.nix
-  # TODO: factor out more cleanly
-
-  # Do not include these things:
-  #   - The '.git' directory
-  #   - Result symlinks from nix-build ('result', 'result-2', 'result-bin', ...)
-  #   - VIM/Emacs swap/backup files ('.swp', '.swo', '.foo.swp', 'foo~', ...)
-  filterFn = path: type: let basename = baseNameOf (toString path); in
-    if type == "directory" then basename != ".git"
-    else if type == "symlink" then builtins.match "^result(|-.*)$" basename == null
-    else builtins.match "^((|\..*)\.sw[a-z]|.*~)$" basename == null;
-
-  nixpkgs = builtins.filterSource filterFn pkgs.path;
+  nixpkgs = lib.cleanSource pkgs.path;
 
   channelSources = pkgs.runCommand "nixos-${config.system.nixosVersion}" {} ''
     mkdir -p $out
diff --git a/nixos/modules/installer/cd-dvd/channel.nix b/nixos/modules/installer/cd-dvd/channel.nix
index 663ff24c81f..ddb00f174d1 100644
--- a/nixos/modules/installer/cd-dvd/channel.nix
+++ b/nixos/modules/installer/cd-dvd/channel.nix
@@ -6,16 +6,7 @@
 with lib;
 
 let
-  # Do not include these things:
-  #   - The '.git' directory
-  #   - Result symlinks from nix-build ('result', 'result-2', 'result-bin', ...)
-  #   - VIM/Emacs swap/backup files ('.swp', '.swo', '.foo.swp', 'foo~', ...)
-  filterFn = path: type: let basename = baseNameOf (toString path); in
-    if type == "directory" then basename != ".git"
-    else if type == "symlink" then builtins.match "^result(|-.*)$" basename == null
-    else builtins.match "^((|\..*)\.sw[a-z]|.*~)$" basename == null;
-
-  nixpkgs = builtins.filterSource filterFn pkgs.path;
+  nixpkgs = lib.cleanSource pkgs.path;
 
   # We need a copy of the Nix expressions for Nixpkgs and NixOS on the
   # CD.  These are installed into the "nixos" channel of the root