
    Pi"/                    D   d Z ddlmZ ddlmZmZ dgZ eh d          Z eh d          Z	ddd	d	d
Z
 eh d          Z eh d          Zd.dZd/d0dZd1dZd2dZd2dZd2dZd2dZd2d Zd2d!Zd2d"Zd2d#Zd2d$Zd2d%Zd2d&Zd2d'Zd2d(Zd2d)Zd2d*Zd2d+Zd2d,Z d-S )3zV
Git command handler for Dippy.

Approves read-only git operations, blocks mutations.
    )annotations)ClassificationHandlerContextgit>&   ls-treecat-filename-revrev-listshow-ref	diff-tree	ls-remote	rev-parse
diff-files
diff-index
merge-base
range-diff
verify-tagshow-branchcheck-ignorefor-each-refformat-patchrequest-pullcount-objectsverify-commitlogvardifffsckgrepshowblamefetchcherryreflogstatusarchiveannotatedescribedifftoolshortlogwhatchangedls-files>   cherry-pickgcmvrmaddpullpushcleanmergepruneresetcommitrebaserevertswitchrestorecheckoutworktree	submodulefilter-repofilter-branchzgarbage collectzremove unreachable objectszrewrite history)r.   r6   rA   r@   >   	--git-dir--namespace--work-tree--config-env--super-prefix-C-c>
   -p--bare
--no-pager
--paginate--glob-pathspecs--icase-pathspecs--noglob-pathspecs--literal-pathspecs--no-optional-locks--no-replace-objectstokens	list[str]returntuple[int, str | None]c                B   d}|t          |           k     r| |         t          v r|dz  }*t          fdt          D                       r|dz  }Pt          v r|dz  }_dk    r|dz   t          |           k     r|dz  }                    d          s|fS 	 dS )z{Find the git action (subcommand) accounting for global flags.

    Returns (index, action) or (-1, None) if not found.
          c              3  H   K   | ]}                     | d           V  dS )=N
startswith).0flagtokens     ./root/projects/gits/Dippy/src/dippy/cli/git.py	<genexpr>z_find_action.<locals>.<genexpr>   s7      NNu4


++NNNNNN    rH   -)N)lenGLOBAL_FLAGS_WITH_ARGanyGLOBAL_FLAGS_NO_ARGr]   )rS   ir`   s     @ra   _find_actionrk      s    
 	
A
c&kk//q	 )))FA NNNN8MNNNNN 	FA '''FA D==QUS[[00FA $$ 	e8O 	8rc   Finclude_contextboolstrc                v    t          |           \  }}|r$|r|t          v rd| dt          |          dS d| S dS )z;Compute description for git command, skipping global flags.zgit z ()r   )rk   UNCLEAR_ACTION_CONTEXT)rS   rl   _actions       ra   get_descriptionrt      s_    V$$IAv  	Fv)???E&EE$:6$BEEEEf5rc   ctxr   r   c                N   | j         }t          |          dk     rt          dd          S t          |          \  }}|t          dd          S |dz   t          |          k     r||dz   d         ng }|dk    rt	          |          }ns|dk    rt          |          }n\|d	k    rt          |          }nE|d
k    rt          |          }n.|dk    rt          |          }n|dk    rt          |          }n |dk    rt          |          }n|dk    rt          |          }n|dk    rt          |          }n|dk    rt          |          }n|dk    rt          |          }n|dk    rt          |          }n||dk    rt!          |          }nf|dk    rt#          |          }nP|dk    rt%          |          }n:|dk    rt'          |          }n$|dk    rt)          |          }n|t*          v rd}nd}t-          ||           }t          |rdnd|          S )zClassify git command.rY   askr   )descriptionNrX   branchtagremotestashconfignotesbisectr>   r?   applyzsparse-checkoutbundlelfszhash-objectzsymbolic-refreplacererereTF)rl   allow)rS   rf   r   rk   _check_branch
_check_tag_check_remote_check_stash_check_config_check_notes_check_bisect_check_worktree_check_submodule_check_apply_check_sparse_checkout_check_bundle
_check_lfs_check_hash_object_check_symbolic_ref_check_replace_check_rerereSAFE_ACTIONSrt   )ru   rS   
action_idxrs   restsafedescs          ra   classifyr      s   ZF
6{{Qe7777 &f--J~e7777'1A~F'C'C6*q.""##D T""	5$	8		T""	7		D!!	8		T""	7		D!!	8		T""	:		t$$	;		%%	7		D!!	$	$	$%d++	8		T""	5$	=	 	 !$''	>	!	!"4((	9		d##	8		T""	<		6t8<<<DT4''u$GGGGrc   r   c                    h d}h d| D ]'}||v r dS |                     d          s|dk    r dS (t          fd| D                       }|rdS | D ]}|                     d          s dS dS )	zCheck git branch subcommand.>	   -D-M-m--copy--moverG   rH   -d--delete   --merged
--contains--no-merged--points-at--no-contains-l--listFz--set-upstream-toz-uc              3  J   K   | ]}|v p|                     d           V  dS r   Nr\   )r^   tlisting_flags_with_args     ra   rb   z _check_branch.<locals>.<genexpr>  sK        BC##=q||H'='=     rc   Trd   )r]   rh   )r   unsafe_flagsr`   has_listing_flagr   s       @ra   r   r      s    WWWL     L  55/00 	ETMM55 5B     GK      t  $$ 	55	 4rc   c                    ddh}h d| D ]	}||v r dS 
t          fd| D                       }|rdS | D ]}|                    d          s dS dS )zCheck git tag subcommand.r   r   r   Fc              3  J   K   | ]}|v p|                     d           V  dS r   r\   )r^   r   listing_flagss     ra   rb   z_check_tag.<locals>.<genexpr>%  s9      VVA1-Gh1G1GVVVVVVrc   Trd   )rh   r]   )r   r   r`   r   r   s       @ra   r   r     s    *%L  M   L  55 ! VVVVQUVVVVV t  $$ 	55	 4rc   c                F    | sdS | d         }h d}||v rdS h d}||v rdS dS )zCheck git remote subcommand.Tr   >   -vget-url	--verboser    >   set-urlset-headset-branchesr0   r1   r6   removerenameF r   
subcommandr   unsafes       ra   r   r   0  s[     taJ111DTt	 	 	F Vu4rc   c                t    | sdS | d         }ddh}||v rdS h d}||v rdS |                     d          rdS dS )zCheck git stash subcommand.Fr   listr    T>   popdropr3   r   clearstorery   createrd   r\   r   s       ra   r   r   J  sm     uaJFDTtSSSFVuS!! u5rc   c                    ddh}h d}| D ]}||v s||v r dS h d}| D ]	}||v r dS 
h dfd| D             }fd	|D             }t          |          d
k    S )zCheck git config subcommand.z-ez--edit>   --add--unset--unset-all--replace-all--remove-section--rename-sectionF>   --get	--get-all--get-regexp--get-urlmatchr   r   T>   --local--global--system
--worktreec                F    g | ]}|                     d           r|v |S rd   r\   r^   r   scope_flagss     ra   
<listcomp>z!_check_config.<locals>.<listcomp>{  s4    OOOc):):Oa;>N>N!>N>N>Nrc   c                    g | ]}|v|	S r   r   r   s     ra   r   z!_check_config.<locals>.<listcomp>|  s#    GGGq!;2F2F2F2F2Frc   rX   rf   )r   
edit_flagsr   r`   
safe_flags
positionalactual_positionalr   s          @ra   r   r   ^  s    !J  L   J%<"7"755 #8  J   J44  DCCKOOOOTOOOJGGGGJGGG !!Q&&rc   c                >    | sdS | d         }ddh}||v rdS h d}||vS )zCheck git notes subcommand.Tr   r   r    >   r1   copyeditr5   r6   appendr   r   r   s       ra   r   r     sH     taJFDTtJJJFV##rc   c                *    | sdS | d         }h d}||v S )zCheck git bisect subcommand.Fr   >   r   view	visualizer   r   r   r   s      ra   r   r     s.     uaJ'''Drc   c                "    | sdS | d         dk    S )zCheck git worktree subcommand.Fr   r   r   r   s    ra   r   r          u7frc   c                *    | sdS | d         }h d}||v S )zCheck git submodule subcommand.Fr   >   r%   foreachsummaryr   r   s      ra   r   r     s.     uaJ+++Drc   c                
    d| v S )zCheck git apply subcommand.z--checkr   r   s    ra   r   r     s    rc   c                "    | sdS | d         dk    S )z%Check git sparse-checkout subcommand.Fr   r   r   r   s    ra   r   r     r   rc   c                *    | sdS | d         }ddh}||v S )zCheck git bundle subcommand.Fr   verifyz
list-headsr   r   s      ra   r   r     s-     uaJl#Drc   c                *    | sdS | d         }h d}||v S )zCheck git lfs subcommand.Fr   >   envr"   r%   versionr,   r   r   s      ra   r   r     s.     uaJ<<<Drc   c                    d| vod| vS )z!Check git hash-object subcommand.z-wz--writer   r   s    ra   r   r     s    t5	 55rc   c                @    d | D             }t          |          dk    S )z"Check git symbolic-ref subcommand.c                <    g | ]}|                     d           |S r   r\   )r^   r   s     ra   r   z'_check_symbolic_ref.<locals>.<listcomp>  s)    ;;;c):):;!;;;rc   rX   r   )r   r   s     ra   r   r     s&    ;;T;;;Jz??arc   c                    d| v pd| v p|  S )zCheck git replace subcommand.r   r   r   r   s    ra   r   r     s    4<78t+74x7rc   c                *    | sdS | d         }ddh}||v S )zCheck git rerere subcommand.Tr   r%   r   r   r   s      ra   r   r     s-     taJfDrc   N)rS   rT   rU   rV   )F)rS   rT   rl   rm   rU   rn   )ru   r   rU   r   )r   rT   rU   rm   )!__doc__
__future__r   	dippy.clir   r   COMMANDS	frozensetr   UNSAFE_ACTIONSrq   rg   ri   rk   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rc   ra   <module>r     s    # " " " " " 4 4 4 4 4 4 4 47 y/ / /1 1j    D )&$	   "	  
 
   i     $ $ $ $N    6H 6H 6H 6Hr   @   8   4   ( '  '  '  'F$ $ $ $            
         6 6 6 6
       8 8 8 8
     rc   