
    1yi                         d Z ddlZddlZddlmZ ddlmZmZmZ de	e
   de
fdZde	e
   de	e
   fdZ	 	 	 	 	 dd	ed
edede
de	e
   dz  defdZy)zDefines a git hook to allow pre-commit warnings and errors about import order.

usage:
    exit_code = git_hook(strict=True|False, modify=True|False)
    N)Path)Configapi
exceptionscommandreturnc                     t        j                  | t         j                  d      }|j                  j	                         S )zRun a command and return raw output

    :param str command: the command to run
    :returns: the stdout output of the command
    T)stdoutcheck)
subprocessrunPIPEr
   decode)r   results     M/var/www/html/content_weaver/venv/lib/python3.12/site-packages/isort/hooks.py
get_outputr      s-     ^^GJOO4HF==!!    c                 z    t        |       }|j                         D cg c]  }|j                          c}S c c}w )zRun a command and return lines of output

    :param str command: the command to run
    :returns: list of whitespace-stripped lines output by command
    )r   
splitlinesstrip)r   r
   lines      r   	get_linesr      s1      F%+%6%6%89TDJJL999s   8strictmodifylazysettings_filedirectoriesc           	          g d}|r|j                  d       |r|j                  |       t        |      }|syd}t        |t        j
                  j                  t        j
                  j                  |d                     }|D ]g  }	|	j                  d      sddd|	 g}
t        |
      }	 t        j                  |t        |	      |	      s|d
z  }|rt        j                  |	|       i | r|S dS # t        j                  $ r Y w xY w)a;  Git pre-commit hook to check staged files for isort errors

    :param bool strict - if True, return number of errors on exit,
        causing the hook to fail. If False, return zero so it will
        just act as a warning.
    :param bool modify - if True, fix the sources if they are not
        sorted properly. If False, only report result without
        modifying anything.
    :param bool lazy - if True, also check/fix unstaged files.
        This is useful if you frequently use ``git commit -a`` for example.
        If False, only check/fix the staged files for isort errors.
    :param str settings_file - A path to a file to be used as
                               the configuration file for this run.
        When settings_file is the empty string, the configuration file
        will be searched starting at the directory containing the first
        staged file, if any, and going upward in the directory structure.
    :param list[str] directories - A list of directories to restrict the hook to.

    :return number of errors if in strict mode, 0 otherwise.
    )gitz
diff-index--cachedz--name-onlyz--diff-filter=ACMRTUXBHEADr    r   )r   settings_pathz.pyr   show:)	file_pathconfig   )r&   )removeextendr   r   ospathdirnameabspathendswithr   r   check_code_stringr   	sort_filer   FileSkipped)r   r   r   r   r   diff_cmdfiles_modifiederrorsr&   filename
staged_cmdstaged_contentss               r   git_hookr8   "   s   8 bH
#$x(NF#ggoobggoonQ6G&HIF # U#1XJ8J(4O,,#tH~f aKFhv>  6"" )) s   0?C77DD)FFF N)__doc__r*   r   pathlibr   isortr   r   r   liststrr   r   boolintr8    r   r   <module>rB      s    
   ) )"S	 "c ":tCy :T#Y : $(;#;#;# ;# 	;#
 cT!;# 	;#r   