diff options
author | Tuomas Tynkkynen <tuomas@tuxera.com> | 2017-03-11 17:58:55 +0200 |
---|---|---|
committer | Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi> | 2017-03-25 01:42:28 +0200 |
commit | 60788745c9dce2544e90a0d5638843f5259e9f9b (patch) | |
tree | 80bda8f31dccacb1624a02821e36b03c19af1a72 /nixos/modules | |
parent | 872a15a0baf232f22dc8b6e62746ada1833a66da (diff) | |
download | nixpkgs-60788745c9dce2544e90a0d5638843f5259e9f9b.tar nixpkgs-60788745c9dce2544e90a0d5638843f5259e9f9b.tar.gz nixpkgs-60788745c9dce2544e90a0d5638843f5259e9f9b.tar.bz2 nixpkgs-60788745c9dce2544e90a0d5638843f5259e9f9b.tar.lz nixpkgs-60788745c9dce2544e90a0d5638843f5259e9f9b.tar.xz nixpkgs-60788745c9dce2544e90a0d5638843f5259e9f9b.tar.zst nixpkgs-60788745c9dce2544e90a0d5638843f5259e9f9b.zip |
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.
Diffstat (limited to 'nixos/modules')
-rw-r--r-- | nixos/modules/installer/cd-dvd/channel.nix | 13 |
1 files changed, 11 insertions, 2 deletions
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 ''; |