
    S                        S r SSKrSSKrSSKJr  SSKrSSKrSSKrSSKJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SS	KJrJr  SS
KJr  SSKJr  S rS r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r" " S S\5      r# " S S\5      r$ " S  S!\5      r% " S" S#\5      r& " S$ S%\5      r' " S& S'\5      r( " S( S)\5      r) " S* S+\5      r* " S, S-\5      r+ " S. S/\5      r, " S0 S1\5      r- " S2 S3\5      r. " S4 S5\5      r/ " S6 S7\5      r0 " S8 S9\5      r1 " S: S;\5      r2 " S< S=\5      r3 " S> S?\5      r4 " S@ SA\5      r5 " SB SC\5      r6 " SD SE\5      r7 " SF SG\5      r8 " SH SI\5      r9 " SJ SK\5      r: " SL SM\5      r; " SN SO\5      r< " SP SQ\5      r= " SR SS\5      r> " ST SU\5      r? " SV SW\?5      r@ " SX SY\5      rA " SZ S[\5      rB " S\ S]\5      rC " S^ S_\5      rD " S` Sa\5      rE " Sb Sc\?5      rF " Sd Se\5      rG " Sf Sg\5      rH " Sh Si\5      rI0 Sj\_Sk\_Sl\A_Sm\B_Sn\(_So\)_Sp\*_Sq\H_Sr\3_Ss\$_St\._Su\%_Sv\&_Sw\ _Sx\!_Sy\"_Sz\I_0 S{\'_S|\#_S}\G_S~\9_S\:_S\;_S\<_S\=_S\6_S\@_S\1_S\2_S\/_S\_S\-_S\F_S\8_E\,\0\+\7\4\5S.ErJSS jrK\LS:X  a  S\R                  ;   a,  \N" \SS5      (       a  \R                  " \R                  \5        \R                  " \R                  \5        \R                  " \K" \R                  SS 5      5        gg)zSimple command-line interface to Dulwich>

This is a very simple command-line wrapper for Dulwich. It is by
no means intended to be a full-blown Git command-line interface but just
a way to test Dulwich.
    N)getopt)DictType	porcelain)get_transport_and_path)ApplyDeltaError)Index)Pack
sha_to_hex)write_tree_diff)Repoc                 0    [         R                  " S5        g )N   )sysexit)signalframes     lib/third_party/dulwich/cli.py
signal_intr   0   s    HHQK    c                 ,    SS K nUR                  5         g )Nr   )pdb	set_trace)r   r   r   s      r   signal_quitr   4   s    MMOr   c                       \ rS rSrSrS rSrg)Command:   zA Dulwich subcommand.c                 ,    [        U R                  5      e)zRun the command.)NotImplementedErrorrunselfargss     r   r!   Command.run=   s    !$((++r    N)__name__
__module____qualname____firstlineno____doc__r!   __static_attributes__r&   r   r   r   r   :   s
    ,r   r   c                       \ rS rSrS rSrg)cmd_archiveB   c                    [         R                  " 5       nUR                  S[        SS9  UR                  S[        SS9  UR	                  U5      nUR
                  (       ad  [        UR
                  5      u  p4UR                  UUR                  [        R                  R                  [        R                  R                  S9  g [        R                  " SUR                  [        R                  R                  [        R                  S	9  g )
Nz--remotez+Retrieve archive from specified remote repo)typehelp
committish?r1   nargs)write_error.)	outstream	errstream)argparseArgumentParseradd_argumentstr
parse_argsremoter   archiver3   r   stdoutwritestderrr   buffer)r#   r$   parserclientpaths        r   r!   cmd_archive.runC   s    ((*> 	 	

 	Ls#>  &;;1$++>LFNN

  JJ,,	   T__

0A0A**r   r&   Nr'   r(   r)   r*   r!   r,   r&   r   r   r.   r.   B   s    r   r.   c                       \ rS rSrS rSrg)cmd_add[   c                 z    [         R                  " 5       nUR                  U5      n[        R                  " SUS9  g Nr8   )paths)r;   r<   r?   r   addr#   argvrF   r$   s       r   r!   cmd_add.run\   s.    ((*  &c&r   r&   NrJ   r&   r   r   rL   rL   [   s    'r   rL   c                       \ rS rSrS rSrg)cmd_rmc   c                 z    [         R                  " 5       nUR                  U5      n[        R                  " SUS9  g rO   )r;   r<   r?   r   rmrR   s       r   r!   
cmd_rm.rund   s.    ((*  &S%r   r&   NrJ   r&   r   r   rV   rV   c   s    &r   rV   c                       \ rS rSrS rSrg)cmd_fetch_packk   c                 f  ^^ [         R                  " 5       nUR                  SSS9  UR                  SS[        S9  UR	                  U5      m[        TR                  5      u  p4[        S5      mTR                  (       a  TR                  R                  nOUU4S jnUR                  UTU5        g )	N--all
store_true)actionlocationr4   )r6   r1   r8   c                 V   > T Vs/ s H  oTR                   ;  d  M  UPM     sn$ s  snf N)object_store)xyr$   rs     r   determine_wants+cmd_fetch_pack.run.<locals>.determine_wantsw   s$    #'C4aANN+B4CCCs   &&)r;   r<   r=   r>   r?   r   rb   r   allre   determine_wants_allfetch)r#   rS   rF   rG   rH   ri   r$   rh   s         @@r   r!   cmd_fetch_pack.runl   s    ((*GL9Jc<  &-dmm<I88nn@@OD 	T1o.r   r&   NrJ   r&   r   r   r\   r\   k   s    /r   r\   c                       \ rS rSrS rSrg)	cmd_fetch}   c                 6   [        US/ 5      u  p![        U5      n[        UR                  S5      5      u  p4[	        S5      nUR                  XE[        R                  R                  S9n[        S5        UR                  5        H  n[        SU-  5        M     g )N r   r8   )progresszRemote refs:z%s -> %s)r   dictr   popr   rm   r   rB   rC   printitems)r#   r$   optsrG   rH   rh   refsitems           r   r!   cmd_fetch.run~   sy    D"b)
Dz-dhhqk:I||Dcjj.>.>|?nJJLD*t#$ !r   r&   NrJ   r&   r   r   rp   rp   }   s    %r   rp   c                       \ rS rSrS rSrg)cmd_fsck   c                     [        US/ 5      u  p![        U5      n[        R                  " S5       H  u  p4[	        U< SU< 35        M     g )Nrs   r8   : )r   ru   r   fsckrw   )r#   r$   ry   objmsgs        r   r!   cmd_fsck.run   s=    D"b)
Dz#..-JSc3'( .r   r&   NrJ   r&   r   r   r~   r~      s    )r   r~   c                       \ rS rSrS rSrg)cmd_log   c                    [         R                  " 5       nUR                  SSSSS9  UR                  SSSSS9  UR                  U5      u  p1[        R
                  " S	UUR                  UR                  [        R                  S
9  g )Nz	--reversereverser`   z*Reverse order in which entries are printeddestra   r2   z--name-statusname_statusz'Print name/status for each changed filer8   )rP   r   r   r9   )
optparseOptionParser
add_optionr?   r   logr   r   r   rB   r#   r$   rF   optionss       r   r!   cmd_log.run   s    &&(=	 	 	
 	:	 	 	
 ))$/OO++jj	
r   r&   NrJ   r&   r   r   r   r      s    
r   r   c                       \ rS rSrS rSrg)cmd_diff   c                 .   [        US/ 5      u  p!U/ :X  a!  [        S5        [        R                  " S5        [	        S5      nUS   nX4   nX5R
                  S      n[        [        R                  UR                  UR                  UR                  5        g )Nrs   zUsage: dulwich diff COMMITIDr   r8   r   )
r   rw   r   r   r   parentsr   rB   re   tree)r#   r$   ry   rh   	commit_idcommitparent_commits          r   r!   cmd_diff.run   sw    D"b)
2:01HHQKIG	..+,

ANNM4F4FTr   r&   NrJ   r&   r   r   r   r      s    Ur   r   c                       \ rS rSrS rSrg)cmd_dump_pack   c                    [        US/ 5      u  p!U/ :X  a!  [        S5        [        R                  " S5        [        R
                  R                  US   5      u  p4[        U5      n[        SUR                  5       -  5        [        S[        UR                  5       5      -  5        UR                  5       (       d  [        S5        [        S[        U5      -  5        U H  n [        S	XV   -  5        M     g ! [         a  n[        S
U< SU< 35         S nAM<  S nAf[         a  n[        S
U< SU< 35         S nAMb  S nAff = f)Nrs   z!Usage: dulwich dump-pack FILENAMEr   r   zObject names checksum: %szChecksum: %szCHECKSUM DOES NOT MATCHz
Length: %dz	%s	z: Unable to resolve base z: Unable to apply delta: )r   rw   r   r   osrH   splitextr   namer   get_stored_checksumchecklenKeyErrorr	   )	r#   r$   ry   basename_rf   r   kes	            r   r!   cmd_dump_pack.run   s   D"b)
2:56HHQKgg&&tAw/N)AFFH45nz!*?*?*ABBCwwyy+,lSV#$DEfqw&'   E4CDD" E4CDDEs$   $C99
EDE)EEr&   NrJ   r&   r   r   r   r      s    Er   r   c                       \ rS rSrS rSrg)cmd_dump_index   c                     [        US/ 5      u  p!U/ :X  a!  [        S5        [        R                  " S5        US   n[	        U5      nU H  n[        XTU   5        M     g )Nrs   z"Usage: dulwich dump-index FILENAMEr   r   )r   rw   r   r   r
   )r#   r$   ry   filenameidxos         r   r!   cmd_dump_index.run   sU    D"b)
2:67HHQK7HoA!V r   r&   NrJ   r&   r   r   r   r      s    r   r   c                       \ rS rSrS rSrg)cmd_init   c                     [        USS/5      u  p![        U5      nU/ :X  a  [        R                  " 5       nOUS   n[        R
                  " USU;   S9  g )Nrs   barer   --bare)r   )r   ru   r   getcwdr   init)r#   r$   ry   rH   s       r   r!   cmd_init.run   sK    D"vh/
Dz2:99;D7Dt8t#35r   r&   NrJ   r&   r   r   r   r      s    	6r   r   c                       \ rS rSrS rSrg)	cmd_clone   c                    [         R                  " 5       nUR                  SSSSS9  UR                  SS[        SS	9  UR	                  U5      u  p1U/ :X  a!  [        S
5        [        R                  " S5        UR                  S5      n[        U5      S:  a  UR                  S5      nOS n[        R                  " XEUR                  UR                  S9  g )Nr   r   z$Whether to create a bare repository.r`   )r   r2   ra   z--depthdepthzDepth at which to fetch)r   r1   r2   z%usage: dulwich clone host:path [PATH]r   r   )r   r   )r   r   r   intr?   rw   r   r   rv   r   r   cloner   r   )r#   r$   rF   r   sourcetargets         r   r!   cmd_clone.run   s    &&(7	 	 	
 	G#4M 	 	
 ))$/2:9:HHQK!t9q=XXa[FFW\\Or   r&   NrJ   r&   r   r   r   r      s    Pr   r   c                       \ rS rSrS rSrg)
cmd_commiti	  c                 j    [        USS/5      u  p![        U5      n[        R                  " SUS   S9  g )Nrs   messager8   	--message)r   )r   ru   r   r   r#   r$   ry   s      r   r!   cmd_commit.run
  s2    D"yk2
Dzd;&78r   r&   NrJ   r&   r   r   r   r   	  s    9r   r   c                       \ rS rSrS rSrg)cmd_commit_treei  c                     [        USS/5      u  p!U/ :X  a!  [        S5        [        R                  " S5        [	        U5      n[
        R                  " SUS   US   S9  g )	Nrs   r   zusage: dulwich commit-tree treer   r8   r   r   )r   r   )r   rw   r   r   ru   r   commit_treer   s      r   r!   cmd_commit_tree.run  sS    D"yk2
2:34HHQKDzcQk9JKr   r&   NrJ   r&   r   r   r   r     s    Lr   r   c                       \ rS rSrS rSrg)cmd_update_server_infoi  c                 0    [         R                  " S5        g Nr8   )r   update_server_infor"   s     r   r!   cmd_update_server_info.run  s    $$S)r   r&   NrJ   r&   r   r   r   r     s    *r   r   c                       \ rS rSrS rSrg)cmd_symbolic_refi  c                     [        USSS/5      u  p!U(       d!  [        S5        [        R                  " S5        UR	                  S5      n[
        R                  " SUSU;   S	9  g )
Nrs   zref-nameforcez.Usage: dulwich symbolic-ref REF_NAME [--force]r   r   r8   z--force)ref_namer   )r   rw   r   r   rv   r   symbolic_ref)r#   r$   ry   r   s       r   r!   cmd_symbolic_ref.run   sR    D"z7&;<
BCHHQK88A;sXY$=NOr   r&   NrJ   r&   r   r   r   r     s    Pr   r   c                       \ rS rSrS rSrg)cmd_showi*  c                     [         R                  " 5       nUR                  S[        SS9  UR	                  U5      n[
        R                  " SUR                  =(       d    S 5        g )N	objectish*r5   r8   )r;   r<   r=   r>   r?   r   showr   rR   s       r   r!   cmd_show.run+  sL    ((*Kc=  &sDNN2d3r   r&   NrJ   r&   r   r   r   r   *  s    4r   r   c                       \ rS rSrS rSrg)cmd_diff_treei2  c                     [        US/ 5      u  p![        U5      S:  a!  [        S5        [        R                  " S5        [
        R                  " SUS   US   5        g )Nrs      z*Usage: dulwich diff-tree OLD-TREE NEW-TREEr   r8   r   )r   r   rw   r   r   r   	diff_treer   s      r   r!   cmd_diff_tree.run3  sK    D"b)
t9q=>?HHQKCa$q'2r   r&   NrJ   r&   r   r   r   r   2  s    3r   r   c                       \ rS rSrS rSrg)cmd_rev_listi;  c                     [        US/ 5      u  p![        U5      S:  a!  [        S5        [        R                  " S5        [
        R                  " SU5        g )Nrs   r   z#Usage: dulwich rev-list COMMITID...r8   )r   r   rw   r   r   r   rev_listr   s      r   r!   cmd_rev_list.run<  sA    D"b)
t9q=78HHQK3%r   r&   NrJ   r&   r   r   r   r   ;      &r   r   c                       \ rS rSrS rSrg)cmd_tagiD  c                     [         R                  " 5       nUR                  SSSSS9  UR                  SSSSS9  UR                  U5      u  p1[        R
                  " S	US
   UR                  UR                  S9  g )N-az--annotatedzCreate an annotated tag.r`   )r2   ra   z-sz--signzSign the annotated tag.r8   r   )	annotatedsign)r   r   r   r?   r   
tag_creater   r   r   s       r   r!   cmd_tag.runE  s    &&(+	 	 	
 	(!:< 	 	
 ))$/aG$5$5GLL	
r   r&   NrJ   r&   r   r   r   r   D  s    
r   r   c                       \ rS rSrS rSrg)
cmd_repackiV  c                 d    [        US/ 5      u  p![        U5      n[        R                  " S5        g )Nrs   r8   )r   ru   r   repackr   s      r   r!   cmd_repack.runW  s)    D"b)
Dzr   r&   NrJ   r&   r   r   r   r   V  s    r   r   c                       \ rS rSrS rSrg)	cmd_reseti]  c                     [        US/ SQ5      u  p![        U5      nSnSU;   a  SnOSU;   a  SnOSU;   a  Sn[        R                  " S	/UQ7S
U06  g )Nrs   )hardsoftmixedz--hardr  z--softr  z--mixedr	  r8   mode)r   ru   r   reset)r#   r$   ry   r
  s       r   r!   cmd_reset.run^  s^    D"&?@
DztDD$D..$.r   r&   NrJ   r&   r   r   r  r  ]  s    
/r   r  c                       \ rS rSrS rSrg)
cmd_daemonik  c           	      f   SSK Jn  SSKJn  [        R
                  " 5       nUR                  SSSSSS	9  UR                  S
SS[        USS9  UR                  U5      u  pQUR                  5         [        U5      S:  a  US   nOSnSSK Jn  UR                  " XeR                  UR                  S9  g )Nr   	log_utils)TCP_GIT_PORT-l--listen_addresslisten_address	localhostBinding IP address.r   defaultr2   -p--portportBinding TCP port.r   r1   r  r2   r   r8   r   addressr  )dulwichr  dulwich.protocolr  r   r   r   r   r?   default_logging_configr   r   daemonr  r  )r#   r$   r  r  rF   r   gitdirr   s           r   r!   cmd_daemon.runl  s    %1&&(!& 	 	
 	 $ 	 	
 ))$/((*t9>!WFF%)?)?gllSr   r&   NrJ   r&   r   r   r  r  k  s    Tr   r  c                       \ rS rSrS rSrg)cmd_web_daemoni  c           	      Z   SSK Jn  [        R                  " 5       nUR	                  SSSSSS9  UR	                  S	S
S[
        SSS9  UR                  U5      u  pAUR                  5         [        U5      S:  a  US   nOSnSSK J	n  UR                  " XTR                  UR                  S9  g )Nr   r  r  r  r  rs   r  r  r  r  r  i@  r  r  r   r8   r   r  )r!  r  r   r   r   r   r?   r#  r   r   
web_daemonr  r  )r#   r$   r  rF   r   r%  r   s          r   r!   cmd_web_daemon.run  s    %&&(!& 	 	
 	$ 	 	
 ))$/((*t9>!WFF%V-C-C',,Wr   r&   NrJ   r&   r   r   r(  r(    s    Xr   r(  c                       \ rS rSrS rSrg)cmd_write_treei  c                     [         R                  " 5       nUR                  U5      u  p1[        R                  R                  S[        R                  " S5      -  5        g )Nz%s
r8   )r   r   r?   r   rB   rC   r   
write_treer   s       r   r!   cmd_write_tree.run  sD    &&())$/

)"6"6s";;<r   r&   NrJ   r&   r   r   r-  r-    s    =r   r-  c                       \ rS rSrS rSrg)cmd_receive_packi  c                     [         R                  " 5       nUR                  U5      u  p1[        U5      S:  a  US   nOSn[        R
                  " U5        g Nr   r   r8   )r   r   r?   r   r   receive_packr#   r$   rF   r   r%  s        r   r!   cmd_receive_pack.run  sI    &&())$/t9>!WFFv&r   r&   NrJ   r&   r   r   r2  r2    s    'r   r2  c                       \ rS rSrS rSrg)cmd_upload_packi  c                     [         R                  " 5       nUR                  U5      u  p1[        U5      S:  a  US   nOSn[        R
                  " U5        g r4  )r   r   r?   r   r   upload_packr6  s        r   r!   cmd_upload_pack.run  sI    &&())$/t9>!WFFf%r   r&   NrJ   r&   r   r   r9  r9    s    &r   r9  c                       \ rS rSrS rSrg)
cmd_statusi  c                    [         R                  " 5       nUR                  U5      u  p1[        U5      S:  a  US   nOSn[        R
                  " U5      n[        S UR                  R                  5        5       5      (       a  [        R                  R                  S5        UR                  R                  5        HX  u  pgU HM  n[        R                  R                  SU< SUR                  [        R                  " 5       5      < S35        MO     MZ     [        R                  R                  S5        UR                  (       a  [        R                  R                  S	5        UR                   HG  n[        R                  R                  S
UR                  [        R                  " 5       5      -  5        MI     [        R                  R                  S5        UR                  (       at  [        R                  R                  S5        UR                   H%  n[        R                  R                  S
U-  5        M'     [        R                  R                  S5        g g )Nr   r   r8   c              3   *   #    U  H	  u  pUv   M     g 7frd   r&   ).0kindnamess      r   	<genexpr>!cmd_status.run.<locals>.<genexpr>  s     @*?$u*?s   zChanges to be committed:

r   r   
z Changes not staged for commit:

z	%s
zUntracked files:

)r   r   r?   r   r   statusanystagedrx   r   rB   rC   decodegetfilesystemencodingunstaged	untracked)	r#   r$   rF   r   r%  rG  rB  rC  r   s	            r   r!   cmd_status.run  s   &&())$/t9>!WFF!!&)@&--*=*=*?@@@JJ;<%}}224!DJJ$$(,dkk#:S:S:U.VW "  5
 JJT"??JJAB

  DKK8Q8Q8S,T!TU (JJT"JJ34((

  D1 )JJT"	 r   r&   NrJ   r&   r   r   r>  r>    s    #r   r>  c                       \ rS rSrS rSrg)cmd_ls_remotei  c                 *   [        US/ 5      u  p![        U5      S:  a!  [        S5        [        R                  " S5        [
        R                  " US   5      n[        U5       H,  n[        R                  R                  U< SX4   < S35        M.     g )Nrs   r   zUsage: dulwich ls-remote URLr   r   rF  )
r   r   rw   r   r   r   	ls_remotesortedrB   rC   )r#   r$   ry   rz   refs        r   r!   cmd_ls_remote.run  sl    D"b)
t9q=01HHQK""47+$<CJJ3	:;  r   r&   NrJ   r&   r   r   rP  rP    s    <r   rP  c                       \ rS rSrS rSrg)cmd_ls_treei  c                 V   [         R                  " 5       nUR                  SSSSS9  UR                  SSSS9  UR                  U5      u  p1 UR	                  S5      n[        R                  " S	U[        R                  UR                  UR                  S
9  g ! [
         a    S n NIf = f)Nz-rz--recursiver`   zRecusively list tree contents.)ra   r2   z--name-onlyzOnly display name.r   r8   )r9   	recursive	name_only)r   r   r   r?   rv   
IndexErrorr   ls_treer   rB   rY  rZ  )r#   r$   rF   r   treeishs        r   r!   cmd_ls_tree.run  s    &&(1	 	 	
 	-CWX))$/	hhqkG 	jj''''	
  	G	s   B B('B(r&   NrJ   r&   r   r   rW  rW    s    
r   rW  c                       \ rS rSrS rSrg)cmd_pack_objectsi	  c                 <   [        USS/5      u  p![        U5      n[        U5      S:  a'  SU;  a!  [        S5        [        R
                  " S5        [        R                  R                  5        Vs/ s H  o3R                  5       PM     nnUS   nSU;   a.  [        [        R                  S[        R                  5      nS n/ nO![        US-   S	5      n[        US
-   S	5      nXg/n[        R                  " SXFU5        U H  n	U	R                  5         M     g s  snf )Nrs   rB   r   z--stdoutz$Usage: dulwich pack-objects basenamer   rE   z.packwz.idxr8   )r   ru   r   rw   r   r   stdin	readlinesstripgetattrrB   openr   pack_objectsclose)
r#   r$   ry   line
object_idsr   packfidxfri  fs
             r   r!   cmd_pack_objects.run
  s    D"xj1
Dzt9q=Zt389HHQK/2yy/B/B/DE/Dtjjl/D
E7CJJ#**=EDEG+S1E6)3/DMEsJt<AGGI  Fs   2Dr&   NrJ   r&   r   r   r`  r`  	  s    r   r`  c                       \ rS rSrS rSrg)cmd_pulli  c                     [         R                  " 5       nUR                  U5      u  p1 US   n[        R
                  " SU5        g ! [         a    S n N&f = f)Nr   r8   )r   r   r?   r[  r   pull)r#   r$   rF   r   from_locations        r   r!   cmd_pull.run   sV    &&())$/	! GM 	sM*  	! M	!s   A AAr&   NrJ   r&   r   r   rq  rq    s    +r   rq  c                       \ rS rSrS rSrg)cmd_pushi*  c                    [         R                  " 5       nUR                  S[        S9  UR                  S[        SS9  UR	                  U5      n[
        R                  " SUR                  UR                  =(       d    S 5        g )Nto_location)r1   refspecr   r5   r8   )	r;   r<   r=   r>   r?   r   pushry  rz  rR   s       r   r!   cmd_push.run,  sg    ((*M4ICs;  &sD,,dll.BdCr   r&   NrJ   r&   r   r   rw  rw  *  s    Dr   rw  c                       \ rS rSrS rSrg)cmd_remote_addi4  c                     [         R                  " 5       nUR                  U5      u  p1[        R                  " SUS   US   5        g )Nr8   r   r   )r   r   r?   r   
remote_addr   s       r   r!   cmd_remote_add.run5  s<    &&())$/S$q'473r   r&   NrJ   r&   r   r   r~  r~  4  s    4r   r~  c                       \ rS rSr0 rS rSrg)SuperCommandi;  c                    U(       d6  [        SSR                  U R                  R                  5       5      -  5        gUS   n U R                  U   nU" 5       R                  USS  5      $ ! [         a    [        SUS   -  5         gf = f)NzSupported subcommands: %sz, Fr   No such subcommand: %sr   )rw   joinsubcommandskeysr   r!   )r#   r$   cmdcmd_klss       r   r!   SuperCommand.run?  s    -		$:J:J:O:O:Q0RRS1g	&&s+G y}}T!"X&&  	*T!W45	s   A, ,B
	B
r&   N)r'   r(   r)   r*   r  r!   r,   r&   r   r   r  r  ;  s    K
'r   r  c                       \ rS rSrS\0rSrg)
cmd_remoteiL  rQ   r&   N)r'   r(   r)   r*   r~  r  r,   r&   r   r   r  r  L  s     	~Kr   r  c                       \ rS rSrS rSrg)cmd_check_ignoreiS  c                     [         R                  " 5       nUR                  U5      u  p1Sn[        R                  " SU5       H  n[        U5        SnM     U$ )Nr   r8   r   )r   r   r?   r   check_ignorerw   )r#   r$   rF   r   retrH   s         r   r!   cmd_check_ignore.runT  sQ    &&())$/**35D$KC 6 
r   r&   NrJ   r&   r   r   r  r  S  s    r   r  c                       \ rS rSrS rSrg)cmd_check_mailmapi^  c                     [         R                  " 5       nUR                  U5      u  p1U H%  n[        R                  " SU5      n[        U5        M'     g r   )r   r   r?   r   check_mailmaprw   )r#   r$   rF   r   argcanonical_identitys         r   r!   cmd_check_mailmap.run_  sH    &&())$/C!*!8!8c!B$% r   r&   NrJ   r&   r   r   r  r  ^  r   r   r  c                       \ rS rSrS rSrg)cmd_stash_listig  c                     [         R                  " 5       nUR                  U5      u  p1[        R                  " S5       H-  u  pE[        SXER                  R                  S5      4-  5        M/     g )Nr8   zstash@{%d}: %srF  )r   r   r?   r   
stash_listrw   r   rstrip)r#   r$   rF   r   ientrys         r   r!   cmd_stash_list.runh  sY    &&())$/!,,S1HA"a)=)=d)C%DDE 2r   r&   NrJ   r&   r   r   r  r  g  s    Fr   r  c                       \ rS rSrS rSrg)cmd_stash_pushio  c                     [         R                  " 5       nUR                  U5      u  p1[        R                  " S5        [        S5        g )Nr8   z'Saved working directory and index state)r   r   r?   r   
stash_pushrw   r   s       r   r!   cmd_stash_push.runp  s9    &&())$/S!78r   r&   NrJ   r&   r   r   r  r  o  s    9r   r  c                       \ rS rSrS rSrg)cmd_stash_popiw  c                     [         R                  " 5       nUR                  U5      u  p1[        R                  " S5        [        S5        g )Nr8   z+Restrored working directory and index state)r   r   r?   r   	stash_poprw   r   s       r   r!   cmd_stash_pop.runx  s9    &&())$/C ;<r   r&   NrJ   r&   r   r   r  r  w  s    =r   r  c                        \ rS rSr\\\S.rSrg)	cmd_stashi  )listrv   r{  r&   N)	r'   r(   r)   r*   r  r  r  r  r,   r&   r   r   r  r    s     Kr   r  c                       \ rS rSrS rSrg)cmd_ls_filesi  c                     [         R                  " 5       nUR                  U5      u  p1[        R                  " S5       H  n[        U5        M     g r   )r   r   r?   r   ls_filesrw   )r#   r$   rF   r   r   s        r   r!   cmd_ls_files.run  s>    &&())$/&&s+D$K ,r   r&   NrJ   r&   r   r   r  r    s    r   r  c                       \ rS rSrS rSrg)cmd_describei  c                     [         R                  " 5       nUR                  U5      u  p1[        [        R
                  " S5      5        g r   )r   r   r?   rw   r   describer   s       r   r!   cmd_describe.run  s5    &&())$/i  %&r   r&   NrJ   r&   r   r   r  r    s    'r   r  c                       \ rS rSrS rSrg)cmd_helpi  c                    [         R                  " 5       nUR                  SSSSSS9  UR                  U5      u  p1UR                  (       a0  [        S5        [        [        5       H  n[        SU-  5        M     g [        S	5        g )
Nr   r_   rk   r`   zList all commands.r   zAvailable commands:z  %szThe dulwich command line tool is currently a very basic frontend for the
Dulwich python module. For full functionality, please see the API reference.

For a list of supported commands, see 'dulwich help -a'.
)r   r   r   r?   rk   rw   rS  commands)r#   r$   rF   r   r  s        r   r!   cmd_help.run  s    &&(% 	 	
 ))$/;;'(h'fsl# ( r   r&   NrJ   r&   r   r   r  r    s    r   r  rQ   rA   zcheck-ignorezcheck-mailmapr   r   zcommit-treer  r$  diffz	diff-treez	dump-packz
dump-indexz
fetch-packrm   r   r2   r   r   zls-filesz	ls-remotezls-treezpack-objectsrs  r{  zreceive-packr@   r  r  zrev-listrY   r   stashrG  )zsymbolic-reftagzupdate-server-infozupload-packz
web-daemonz
write-treec                 2   U c  [         R                  n [        U 5      S:  a0  [        SSR	                  [
        R                  5       5      -  5        gU S   n [
        U   nU" 5       R                  U SS  5      $ ! [         a    [        SU-  5         gf = f)Nr   z Usage: dulwich <%s> [OPTIONS...]|r   r  )	r   rS   r   rw   r  r  r  r   r!   )rS   r  r  s      r   mainr    s    |xx
4y1}0CHHX]]_4MNO
q'C3-
 9==ab""	  &,-s   	A; ;BB__main__DULWICH_PDBSIGQUITr   rd   )Sr+   r   r   r   r;   r   r   typingr   r   r!  r   dulwich.clientr   dulwich.errorsr	   dulwich.indexr
   dulwich.packr   r   dulwich.patchr   dulwich.repor   r   r   objectr   r.   rL   rV   r\   rp   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r(  r-  r2  r9  r>  rP  rW  r`  rq  rw  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r'   environrf  r  SIGINTr   rS   r&   r   r   <module>r     s  0 
 
       1 *  ) ) ,f ,' 2'g '&W &/W /$	% 	%)w )
g 
4Uw UEG E0W 
6w 
6P P69 9Lg L*W *
Pw P4w 43G 3&7 &
g 
$ / /T TBXW X@=W ='w '&g &# #:<G <
' 
0w ,+w +Dw D4W 4'7 '" w & &FW F9W 9=G = 7 '7 'w 6)	7){) $) &	)
 Y) j) ?) ) j) H) ) ) .) .) Y)  H!)" H#)$ H%)& 
7')( ))* +), {-). $/)0 H1)2 H3)4 $5)6 j7)8 j9): Y;)< =)> 	&?)@ HA)B YC)D jE)F %0"  Q)X#$ z

"wvy$'G'Gfnnk2
MM&--,HHT#((12,  r   