66from pathlib import Path
77import shutil
88import string
9+ import subprocess
910import sys
1011import unittest
1112import warnings
@@ -486,15 +487,14 @@ 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." ):
493494 try :
494495 import mpl_toolkits_baseline_images
495496 except :
496- raise ImportError ("Not able to import "
497- "mpl_toolkits_baseline_images" )
497+ generate_matplotlib_baseline_images_from_previous_commit ()
498498 baseline_dir = (Path (mpl_toolkits_baseline_images .__file__ ).parent /
499499 module_path .stem )
500500 else :
@@ -504,3 +504,43 @@ def _image_directories(func):
504504 result_dir = Path ().resolve () / "result_images" / module_path .stem
505505 result_dir .mkdir (parents = True , exist_ok = True )
506506 return baseline_dir , result_dir
507+
508+
509+ def generate_matplotlib_baseline_images_from_previous_commit ():
510+ mplRepoPath = Path (mpl .__file__ ).parent
511+ # Check that git is installed.
512+ run_text_mode (shutil .which ('git' )) == None
513+ # Check if current repository is a git repository
514+ run_text_mode (['git' , 'status' ],
515+ cwd = mplRepoPath ) == None
516+ # Create virtual env in tmpdir.
517+ if not (mplRepoPath / 'testenv' ).exists ():
518+ modify_existing_baseline_images ()
519+ else
520+ run_text_mode ([sys .executable , "-mvenv" , "venv" ],
521+ cwd = mplRepoPath )
522+ # # Clone mpl repo to tmpvenv and run pytests from new mpl repo created
523+ # run_text_mode(["git", "worktree", "add", testenv"],
524+ # cwd = mplRepoPath)
525+ run_text_mode (["source" , "venv/bin/activate" ],
526+ cwd = mplRepoPath )
527+ run_text_mode (["git" , "checkout" , "HEAD~" ],
528+ cwd = mplRepoPat )
529+ run_text_mode (["venv" , "-mpip" , "install" , "-e" , mplRepoPath ],
530+ cwd = mplRepoPath )
531+ run_text_mode (["venv" , "-mpytest" ],
532+ cwd = mplRepoPath )
533+ # Copy result_images in the temporary directory and cache it
534+ run_text_mode (shutil .copytree ("result_images" ,
535+ "tempenv/.pytest_cache" ),
536+ cwd = mplRepoPath )
537+
538+ def modify_existing_baseline_images ():
539+ # TODO
540+ return
541+
542+ def run_text_mode (* args , ** kwargs ):
543+ return subprocess .run (* args , ** kwargs ,
544+ stderr = subprocess .STDOUT ,
545+ stdout = open (os .devnull , 'w' ),
546+ universal_newlines = True )
0 commit comments