Make <nix/fetchurl.nix> run in constant memory
E.g.
  nix-build --store ~/my-nix/ -E 'import <nix/fetchurl.nix> { url = https://cache.nixos.org/nar/0nwi996rgq4b914qyx0mv2wq4k80hjac7xilikavagw7kxmn2iiv.nar.xz; sha256 = "0nwi996rgq4b914qyx0mv2wq4k80hjac7xilikavagw7kxmn2iiv"; }'
now runs in 17 MiB (was 70 MiB), while
  nix-build --store ~/my-nix/ -E 'import <nix/fetchurl.nix> { url = https://cache.nixos.org/nar/0nwi996rgq4b914qyx0mv2wq4k80hjac7xilikavagw7kxmn2iiv.nar.xz; sha256 = "0d2fxljdih3nc5dqx41hjzic3141ajil94m8kdbpryq569dpsbvb"; unpack = true; }'
runs in 17 MiB (was 346 MiB).
			
			
This commit is contained in:
		
							parent
							
								
									5a654fd7dd
								
							
						
					
					
						commit
						7d21863bb3
					
				
					 3 changed files with 60 additions and 33 deletions
				
			
		|  | @ -328,6 +328,23 @@ void writeFile(const Path & path, const string & s, mode_t mode) | |||
| } | ||||
| 
 | ||||
| 
 | ||||
| void writeFile(const Path & path, Source & source, mode_t mode) | ||||
| { | ||||
|     AutoCloseFD fd = open(path.c_str(), O_WRONLY | O_TRUNC | O_CREAT | O_CLOEXEC, mode); | ||||
|     if (!fd) | ||||
|         throw SysError(format("opening file '%1%'") % path); | ||||
| 
 | ||||
|     std::vector<unsigned char> buf(64 * 1024); | ||||
| 
 | ||||
|     while (true) { | ||||
|         try { | ||||
|             auto n = source.read(buf.data(), buf.size()); | ||||
|             writeFull(fd.get(), (unsigned char *) buf.data(), n); | ||||
|         } catch (EndOfFile &) { break; } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| string readLine(int fd) | ||||
| { | ||||
|     string s; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue