66from pathlib import Path
77import shutil
88import string
9+ import subprocess
910import sys
1011import unittest
1112import warnings
@@ -486,7 +487,7 @@ def _image_directories(func):
486487 try :
487488 import matplotlib_baseline_images
488489 except :
489- raise ImportError ( "Not able to import matplotlib_baseline_images" )
490+ generate_matplotlib_baseline_images_from_previous_commit ( )
490491 baseline_dir = (Path (matplotlib_baseline_images .__file__ ).parent /
491492 module_path .stem )
492493 elif func .__module__ .startswith ("mpl_toolkits." ):
@@ -504,3 +505,44 @@ def _image_directories(func):
504505 result_dir = Path ().resolve () / "result_images" / module_path .stem
505506 result_dir .mkdir (parents = True , exist_ok = True )
506507 return baseline_dir , result_dir
508+
509+
510+ def generate_matplotlib_baseline_images_from_previous_commit ():
511+ # Check if current repository is a git repository
512+ subprocess .call (['git' , '-C' , '.' , 'status' ],
513+ stderr = subprocess .STDOUT ,
514+ stdout = open (os .devnull ,
515+ 'w' )) == 0
516+ # Check that git is installed.
517+ subprocess .call (shutil .which ('git' ),
518+ stderr = subprocess .STDOUT ,
519+ stdout = open (os .devnull ,
520+ 'w' )) == 0
521+ # Create virtual env in tmpdir.
522+ subprocess .run (["virtualenv" , "tmpenv" ],
523+ stderr = subprocess .STDOUT ,
524+ stdout = subprocess .DEVNULL ))
525+ # Clone mpl repo to tmpvenv and run pytests from new mpl repo created
526+ subprocess .run (["git" , "clone" , "../../.." , "../../../tmpenv" ],
527+ stderr = subprocess .STDOUT ,
528+ stdout = subprocess .DEVNULL ))
529+ subprocess .run (["cd" , "../../../tmpenv" ],
530+ stderr = subprocess .STDOUT ,
531+ stdout = subprocess .DEVNULL ))
532+ subprocess .run (["." , ".tempenv/bin/activate" ],
533+ stderr = subprocess .STDOUT ,
534+ stdout = subprocess .DEVNULL ))
535+ subprocess .run (["git" , "checkout" , "HEAD~" ],
536+ stderr = subprocess .STDOUT ,
537+ stdout = subprocess .DEVNULL ))
538+ subprocess .run (["python" , "-mpip" , "install" , "-e" , "." ],
539+ stderr = subprocess .STDOUT ,
540+ stdout = subprocess .DEVNULL ))
541+ subprocess .run (["python" , "-mpytest" ],
542+ stderr = subprocess .STDOUT ,
543+ stdout = subprocess .DEVNULL ))
544+ # Copy result_images in the temporary directory and cache it
545+ subprocess .run (["cp, " - r", " ../ ../ ../ result_images ",
546+ "../../../tempenv/.pytest_cache" ],
547+ stderr = subprocess .STDOUT ,
548+ stdout = subprocess .DEVNULL ))
0 commit comments