From 60788745c9dce2544e90a0d5638843f5259e9f9b Mon Sep 17 00:00:00 2001 From: Tuomas Tynkkynen Date: Sat, 11 Mar 2017 17:58:55 +0200 Subject: channel.nix: Use filterSource to exclude unnecessary files from nixpkgs Currently, if you try to build a NixOS config including channel.nix, e.g.: nix-build -I nixpkgs=. -I nixos-config=nixos/modules/installer/cd-dvd/installation-cd-minimal.nix nixos -A config.system.build.isoImage twice in a row, you end up with two different build results. This is caused by the 'result' symlink of the first build affecting the channel contents of the second build. If we use filterSource with a predicate that ignores the 'result' symlinks, the problem is gone. Do the same thing for VIM/Emacs swap/backup files to avoid even more 'spurious' rebuilds. Additionally, filter out the '.git' directory at the same time, as we 'rm -rf' it from the result anyway. This avoids a considerable amount of unnecessary file I/O copying and deleting the .git directory. --- nixos/modules/installer/cd-dvd/channel.nix | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'nixos/modules') diff --git a/nixos/modules/installer/cd-dvd/channel.nix b/nixos/modules/installer/cd-dvd/channel.nix index cd6e72755de..663ff24c81f 100644 --- a/nixos/modules/installer/cd-dvd/channel.nix +++ b/nixos/modules/installer/cd-dvd/channel.nix @@ -6,6 +6,16 @@ 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; # 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 @@ -15,12 +25,11 @@ let { } '' mkdir -p $out - cp -prd ${pkgs.path} $out/nixos + cp -prd ${nixpkgs} $out/nixos chmod -R u+w $out/nixos if [ ! -e $out/nixos/nixpkgs ]; then ln -s . $out/nixos/nixpkgs fi - rm -rf $out/nixos/.git echo -n ${config.system.nixosVersionSuffix} > $out/nixos/.version-suffix ''; -- cgit 1.4.1