mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	tools: ynl-gen: don't touch the output file if content is the same
I often regenerate all YNL files in the tree to make sure they
are in sync with the codegen and specs. Generator rewrites
the files unconditionally, so since make looks at file modification
time to decide what to rebuild - my next build takes longer.
We already generate the code to a tempfile most of the time,
only overwrite the target when we have to.
Before:
  $ stat include/uapi/linux/netdev.h
    File: include/uapi/linux/netdev.h
    Size: 2307      	Blocks: 8          IO Block: 4096   regular file
  Access: 2023-10-27 15:19:56.347071940 -0700
  Modify: 2023-10-27 15:19:45.089000900 -0700
  Change: 2023-10-27 15:19:45.089000900 -0700
   Birth: 2023-10-27 15:19:45.088000894 -0700
  $ ./tools/net/ynl/ynl-regen.sh -f
  [...]
  $ stat include/uapi/linux/netdev.h
    File: include/uapi/linux/netdev.h
    Size: 2307      	Blocks: 8          IO Block: 4096   regular file
  Access: 2023-10-27 15:19:56.347071940 -0700
  Modify: 2023-10-27 15:22:18.417968446 -0700
  Change: 2023-10-27 15:22:18.417968446 -0700
   Birth: 2023-10-27 15:19:45.088000894 -0700
After:
  $ stat include/uapi/linux/netdev.h
    File: include/uapi/linux/netdev.h
    Size: 2307      	Blocks: 8          IO Block: 4096   regular file
  Access: 2023-10-27 15:22:41.520114221 -0700
  Modify: 2023-10-27 15:22:18.417968446 -0700
  Change: 2023-10-27 15:22:18.417968446 -0700
   Birth: 2023-10-27 15:19:45.088000894 -0700
  $ ./tools/net/ynl/ynl-regen.sh -f
  [...]
  $ stat include/uapi/linux/netdev.h
    File: include/uapi/linux/netdev.h
    Size: 2307      	Blocks: 8          IO Block: 4096   regular file
  Access: 2023-10-27 15:22:41.520114221 -0700
  Modify: 2023-10-27 15:22:18.417968446 -0700
  Change: 2023-10-27 15:22:18.417968446 -0700
   Birth: 2023-10-27 15:19:45.088000894 -0700
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Link: https://lore.kernel.org/r/20231027223408.1865704-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									05f0431bb9
								
							
						
					
					
						commit
						2b7ac0c87d
					
				
					 1 changed files with 6 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
 | 
			
		||||
import argparse
 | 
			
		||||
import collections
 | 
			
		||||
import filecmp
 | 
			
		||||
import os
 | 
			
		||||
import re
 | 
			
		||||
import shutil
 | 
			
		||||
| 
						 | 
				
			
			@ -1168,7 +1169,7 @@ class CodeWriter:
 | 
			
		|||
        if out_file is None:
 | 
			
		||||
            self._out = os.sys.stdout
 | 
			
		||||
        else:
 | 
			
		||||
            self._out = tempfile.TemporaryFile('w+')
 | 
			
		||||
            self._out = tempfile.NamedTemporaryFile('w+')
 | 
			
		||||
            self._out_file = out_file
 | 
			
		||||
 | 
			
		||||
    def __del__(self):
 | 
			
		||||
| 
						 | 
				
			
			@ -1177,6 +1178,10 @@ class CodeWriter:
 | 
			
		|||
    def close_out_file(self):
 | 
			
		||||
        if self._out == os.sys.stdout:
 | 
			
		||||
            return
 | 
			
		||||
        # Avoid modifying the file if contents didn't change
 | 
			
		||||
        self._out.flush()
 | 
			
		||||
        if os.path.isfile(self._out_file) and filecmp.cmp(self._out.name, self._out_file, shallow=False):
 | 
			
		||||
            return
 | 
			
		||||
        with open(self._out_file, 'w+') as out_file:
 | 
			
		||||
            self._out.seek(0)
 | 
			
		||||
            shutil.copyfileobj(self._out, out_file)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue