
    S                        d Z ddlZddlZddlmZ ddlZddlZddlZddlmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ d Zd Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z# G d de      Z$ G d  d!e      Z% G d" d#e      Z& G d$ d%e      Z' G d& d'e      Z( G d( d)e      Z) G d* d+e      Z* G d, d-e      Z+ G d. d/e      Z, G d0 d1e      Z- G d2 d3e      Z. G d4 d5e      Z/ G d6 d7e      Z0 G d8 d9e      Z1 G d: d;e      Z2 G d< d=e      Z3 G d> d?e      Z4 G d@ dAe      Z5 G dB dCe      Z6 G dD dEe      Z7 G dF dGe      Z8 G dH dIe      Z9 G dJ dKe      Z: G dL dMe      Z; G dN dOe      Z< G dP dQe      Z= G dR dSe      Z> G dT dUe      Z? G dV dWe?      Z@ G dX dYe      ZA G dZ d[e      ZB G d\ d]e      ZC G d^ d_e      ZD G d` dae      ZE G db dce?      ZF G dd dee      ZG G df dge      ZH G dh die      ZIi djedkedleAdmeBdne(doe)dpe*dqeHdre3dse$dte.due%dve&dwe dxe!dye"dzeIi d{e'd|e#d}eGd~e9de:de;de<de=de6de@de1de2de/dede-deFde8e,e0e+e7e4e5dZJddZKeLdk(  rxdej                  v r' eNedd      r ej                  ej                  e        ej                  ej                  e        ej                   eKej                  dd              yy)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                 .    t        j                  d       y )N   )sysexit)signalframes     lib/third_party/dulwich/cli.py
signal_intr   0   s    HHQK    c                 ,    dd l }|j                          y )Nr   )pdb	set_trace)r   r   r   s      r   signal_quitr   4   s    MMOr   c                       e Zd ZdZd Zy)CommandzA Dulwich subcommand.c                 ,    t        | j                        )zRun the command.)NotImplementedErrorrunselfargss     r   r    zCommand.run=   s    !$((++r   N)__name__
__module____qualname____doc__r     r   r   r   r   :   s
    ,r   r   c                       e Zd Zd Zy)cmd_archivec                 (   t        j                         }|j                  dt        d       |j                  dt        d       |j	                  |      }|j
                  rht        |j
                        \  }}|j                  ||j                  t        j                  j                  t        j                  j                         y t        j                  d|j                  t        j                  j                  t        j                  	       y )
Nz--remotez+Retrieve archive from specified remote repo)typehelp
committish?r,   nargs)write_error.)	outstream	errstream)argparseArgumentParseradd_argumentstr
parse_argsremoter   archiver.   r   stdoutwritestderrr   buffer)r"   r#   parserclientpaths        r   r    zcmd_archive.runC   s    ((*> 	 	

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

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

0A0A**r   Nr$   r%   r&   r    r(   r   r   r*   r*   B   s    r   r*   c                       e Zd Zd Zy)cmd_addc                 |    t        j                         }|j                  |      }t        j                  d|       y Nr3   )paths)r6   r7   r:   r   addr"   argvrA   r#   s       r   r    zcmd_add.run\   s.    ((*  &c&r   NrD   r(   r   r   rF   rF   [   s    'r   rF   c                       e Zd Zd Zy)cmd_rmc                 |    t        j                         }|j                  |      }t        j                  d|       y rH   )r6   r7   r:   r   rmrK   s       r   r    z
cmd_rm.rund   s.    ((*  &S%r   NrD   r(   r   r   rN   rN   c   s    &r   rN   c                       e Zd Zd Zy)cmd_fetch_packc                 f   t        j                         }|j                  dd       |j                  ddt               |j	                  |      t        j                        \  }}t        d      j                  rj                  j                  }nfd}|j                  ||       y )	N--all
store_true)actionlocationr/   )r1   r,   r3   c                 L    D cg c]  }|j                   vs| c}S c c}w N)object_store)xyr#   rs     r   determine_wantsz+cmd_fetch_pack.run.<locals>.determine_wantsw   s&    #'C4a1ANN+B4CCCs   !!)r6   r7   r8   r9   r:   r   rW   r   allrZ   determine_wants_allfetch)r"   rL   rA   rB   rC   r^   r#   r]   s         @@r   r    zcmd_fetch_pack.runl   s    ((*GL9Jc<  &-dmm<I88nn@@OD 	T1o.r   NrD   r(   r   r   rR   rR   k   s    /r   rR   c                       e Zd Zd Zy)	cmd_fetchc                 >   t        |dg       \  }}t        |      }t        |j                  d            \  }}t	        d      }|j                  ||t        j                  j                        }t        d       |j                         D ]  }t        d|z          y )N r   r3   )progresszRemote refs:z%s -> %s)r   dictr   popr   ra   r   r=   r>   printitems)r"   r#   optsrB   rC   r]   refsitems           r   r    zcmd_fetch.run~   s    D"b)
dDz-dhhqk:I||D!cjj.>.>|?nJJLD*t#$ !r   NrD   r(   r   r   rc   rc   }   s    %r   rc   c                       e Zd Zd Zy)cmd_fsckc                     t        |dg       \  }}t        |      }t        j                  d      D ]  \  }}t	        |d|        y )Nre   r3   : )r   rg   r   fsckri   )r"   r#   rk   objmsgs        r   r    zcmd_fsck.run   sA    D"b)
dDz#..-JS#c3'( .r   NrD   r(   r   r   ro   ro      s    )r   ro   c                       e Zd Zd Zy)cmd_logc                     t        j                         }|j                  dddd       |j                  dddd       |j                  |      \  }}t	        j
                  d	||j                  |j                  t        j                  
       y )Nz	--reversereverserU   z*Reverse order in which entries are printeddestrV   r-   z--name-statusname_statusz'Print name/status for each changed filer3   )rI   rx   r{   r4   )
optparseOptionParser
add_optionr:   r   logrx   r{   r   r=   r"   r#   rA   optionss       r   r    zcmd_log.run   s    &&(=	 	 	
 	:	 	 	
 ))$/OO++jj	
r   NrD   r(   r   r   rv   rv      s    
r   rv   c                       e Zd Zd Zy)cmd_diffc                 0   t        |dg       \  }}|g k(  r t        d       t        j                  d       t	        d      }|d   }||   }||j
                  d      }t        t        j                  |j                  |j                  |j                         y )Nre   zUsage: dulwich diff COMMITIDr   r3   r   )
r   ri   r   r   r   parentsr   r=   rZ   tree)r"   r#   rk   r]   	commit_idcommitparent_commits          r   r    zcmd_diff.run   s}    D"b)
d2:01HHQKIG	9&..+,

ANNM4F4FTr   NrD   r(   r   r   r   r      s    Ur   r   c                       e Zd Zd Zy)cmd_dump_packc                 x   t        |dg       \  }}|g k(  r t        d       t        j                  d       t        j
                  j                  |d         \  }}t        |      }t        d|j                         z         t        dt        |j                               z         |j                         st        d       t        dt        |      z         |D ]  }	 t        d	||   z          y # t        $ r}t        d
|d|       Y d }~7d }~wt        $ r}t        d
|d|       Y d }~Yd }~ww xY w)Nre   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   ri   r   r   osrC   splitextr   namer   get_stored_checksumchecklenKeyErrorr	   )	r"   r#   rk   basename_r[   r   kes	            r   r    zcmd_dump_pack.run   s   D"b)
d2:56HHQKgg&&tAw/!N)AFFH45nz!*?*?*ABBCwwy+,lSV#$DEfqw&'   E4CDD" E4CDDEs$   C33	D9<DD9D44D9NrD   r(   r   r   r   r      s    Er   r   c                       e Zd Zd Zy)cmd_dump_indexc                     t        |dg       \  }}|g k(  r t        d       t        j                  d       |d   }t	        |      }|D ]  }t        |||           y )Nre   z"Usage: dulwich dump-index FILENAMEr   r   )r   ri   r   r   r
   )r"   r#   rk   filenameidxos         r   r    zcmd_dump_index.run   sY    D"b)
d2:67HHQK7HoA!SV r   NrD   r(   r   r   r   r      s    r   r   c                       e Zd Zd Zy)cmd_initc                     t        |ddg      \  }}t        |      }|g k(  rt        j                         }n|d   }t	        j
                  |d|v        y )Nre   barer   --bare)r   )r   rg   r   getcwdr   init)r"   r#   rk   rC   s       r   r    zcmd_init.run   sM    D"vh/
dDz2:99;D7Dt8t#35r   NrD   r(   r   r   r   r      s    	6r   r   c                       e Zd Zd Zy)	cmd_clonec                    t        j                         }|j                  dddd       |j                  ddt        d	       |j	                  |      \  }}|g k(  r t        d
       t        j                  d       |j                  d      }t        |      dkD  r|j                  d      }nd }t        j                  |||j                  |j                         y )Nr   r   z$Whether to create a bare repository.rU   )rz   r-   rV   z--depthdepthzDepth at which to fetch)rz   r,   r-   z%usage: dulwich clone host:path [PATH]r   r   )r   r   )r|   r}   r~   intr:   ri   r   r   rh   r   r   cloner   r   )r"   r#   rA   r   sourcetargets         r   r    zcmd_clone.run   s    &&(7	 	 	
 	G#4M 	 	
 ))$/2:9:HHQK!t9q=XXa[FFW\\Or   NrD   r(   r   r   r   r      s    Pr   r   c                       e Zd Zd Zy)
cmd_commitc                 p    t        |ddg      \  }}t        |      }t        j                  d|d          y )Nre   messager3   	--message)r   )r   rg   r   r   r"   r#   rk   s      r   r    zcmd_commit.run
  s4    D"yk2
dDzd;&78r   NrD   r(   r   r   r   r   	  s    9r   r   c                       e Zd Zd Zy)cmd_commit_treec                     t        |ddg      \  }}|g k(  r t        d       t        j                  d       t	        |      }t        j                  d|d   |d          y )	Nre   r   zusage: dulwich commit-tree treer   r3   r   r   )r   r   )r   ri   r   r   rg   r   commit_treer   s      r   r    zcmd_commit_tree.run  sU    D"yk2
d2:34HHQKDzcQk9JKr   NrD   r(   r   r   r   r     s    Lr   r   c                       e Zd Zd Zy)cmd_update_server_infoc                 .    t        j                  d       y Nr3   )r   update_server_infor!   s     r   r    zcmd_update_server_info.run  s    $$S)r   NrD   r(   r   r   r   r     s    *r   r   c                       e Zd Zd Zy)cmd_symbolic_refc                     t        |dddg      \  }}|s t        d       t        j                  d       |j	                  d      }t        j                  d|d|v 	       y )
Nre   zref-nameforcez.Usage: dulwich symbolic-ref REF_NAME [--force]r   r   r3   z--force)ref_namer   )r   ri   r   r   rh   r   symbolic_ref)r"   r#   rk   r   s       r   r    zcmd_symbolic_ref.run   sT    D"z7&;<
dBCHHQK88A;sXY$=NOr   NrD   r(   r   r   r   r     s    Pr   r   c                       e Zd Zd Zy)cmd_showc                     t        j                         }|j                  dt        d       |j	                  |      }t        j                  d|j                  xs d        y )N	objectish*r0   r3   )r6   r7   r8   r9   r:   r   showr   rK   s       r   r    zcmd_show.run+  sL    ((*Kc=  &sDNN2d3r   NrD   r(   r   r   r   r   *  s    4r   r   c                       e Zd Zd Zy)cmd_diff_treec                     t        |dg       \  }}t        |      dk  r t        d       t        j                  d       t        j                  d|d   |d          y )Nre      z*Usage: dulwich diff-tree OLD-TREE NEW-TREEr   r3   r   )r   r   ri   r   r   r   	diff_treer   s      r   r    zcmd_diff_tree.run3  sM    D"b)
dt9q=>?HHQKCa$q'2r   NrD   r(   r   r   r   r   2  s    3r   r   c                       e Zd Zd Zy)cmd_rev_listc                     t        |dg       \  }}t        |      dk  r t        d       t        j                  d       t        j                  d|       y )Nre   r   z#Usage: dulwich rev-list COMMITID...r3   )r   r   ri   r   r   r   rev_listr   s      r   r    zcmd_rev_list.run<  sC    D"b)
dt9q=78HHQK3%r   NrD   r(   r   r   r   r   ;      &r   r   c                       e Zd Zd Zy)cmd_tagc                    t        j                         }|j                  dddd       |j                  dddd       |j                  |      \  }}t	        j
                  d	|d
   |j                  |j                         y )N-az--annotatedzCreate an annotated tag.rU   )r-   rV   z-sz--signzSign the annotated tag.r3   r   )	annotatedsign)r|   r}   r~   r:   r   
tag_creater   r   r   s       r   r    zcmd_tag.runE  s    &&(+	 	 	
 	(!:< 	 	
 ))$/aG$5$5GLL	
r   NrD   r(   r   r   r   r   D  s    
r   r   c                       e Zd Zd Zy)
cmd_repackc                 d    t        |dg       \  }}t        |      }t        j                  d       y )Nre   r3   )r   rg   r   repackr   s      r   r    zcmd_repack.runW  s+    D"b)
dDzr   NrD   r(   r   r   r   r   V  s    r   r   c                       e Zd Zd Zy)	cmd_resetc                     t        |dg d      \  }}t        |      }d}d|v rd}nd|v rd}nd|v rd}t        j                  d	g|d
|i y )Nre   )hardsoftmixedz--hardr   z--softr   z--mixedr   r3   mode)r   rg   r   reset)r"   r#   rk   r   s       r   r    zcmd_reset.run^  s`    D"&?@
dDztDD$D..$.r   NrD   r(   r   r   r   r   ]  s    
/r   r   c                       e Zd Zd Zy)
cmd_daemonc                 x   ddl m} ddlm} t	        j
                         }|j                  ddddd	       |j                  d
ddt        |d       |j                  |      \  }}|j                          t        |      dk\  r|d   }nd}ddl m}  |j                  ||j                  |j                         y )Nr   	log_utils)TCP_GIT_PORT-l--listen_addresslisten_address	localhostBinding IP address.rz   defaultr-   -p--portportBinding TCP port.rz   r,   r   r-   r   r3   r   addressr   )dulwichr   dulwich.protocolr   r|   r}   r~   r   r:   default_logging_configr   r   daemonr   r   )r"   r#   r   r   rA   r   gitdirr   s           r   r    zcmd_daemon.runl  s    %1&&(!& 	 	
 	 $ 	 	
 ))$/((*t9>!WFF%	)?)?gllSr   NrD   r(   r   r   r   r   k  s    Tr   r   c                       e Zd Zd Zy)cmd_web_daemonc                 l   ddl m} t        j                         }|j	                  ddddd       |j	                  d	d
dt
        dd       |j                  |      \  }}|j                          t        |      dk\  r|d   }nd}ddl m	}  |j                  ||j                  |j                         y )Nr   r   r   r   r   re   r   r   r   r   r   i@  r   r   r   r3   r   r   )r   r   r|   r}   r~   r   r:   r   r   r   
web_daemonr   r   )r"   r#   r   rA   r   r   r   s          r   r    zcmd_web_daemon.run  s    %&&(!& 	 	
 	$ 	 	
 ))$/((*t9>!WFF%	VW-C-C',,Wr   NrD   r(   r   r   r   r     s    Xr   r   c                       e Zd Zd Zy)cmd_write_treec                     t        j                         }|j                  |      \  }}t        j                  j                  dt        j                  d      z         y )Nz%s
r3   )r|   r}   r:   r   r=   r>   r   
write_treer   s       r   r    zcmd_write_tree.run  sF    &&())$/

)"6"6s";;<r   NrD   r(   r   r   r  r    s    =r   r  c                       e Zd Zd Zy)cmd_receive_packc                     t        j                         }|j                  |      \  }}t        |      dk\  r|d   }nd}t	        j
                  |       y Nr   r   r3   )r|   r}   r:   r   r   receive_packr"   r#   rA   r   r   s        r   r    zcmd_receive_pack.run  sK    &&())$/t9>!WFFv&r   NrD   r(   r   r   r  r    s    'r   r  c                       e Zd Zd Zy)cmd_upload_packc                     t        j                         }|j                  |      \  }}t        |      dk\  r|d   }nd}t	        j
                  |       y r
  )r|   r}   r:   r   r   upload_packr  s        r   r    zcmd_upload_pack.run  sK    &&())$/t9>!WFFf%r   NrD   r(   r   r   r  r    s    &r   r  c                       e Zd Zd Zy)
cmd_statusc                    t        j                         }|j                  |      \  }}t        |      dk\  r|d   }nd}t	        j
                  |      }t        d |j                  j                         D              rt        j                  j                  d       |j                  j                         D ]S  \  }}|D ]I  }t        j                  j                  d|d|j                  t        j                               d       K U t        j                  j                  d       |j                  rt        j                  j                  d	       |j                  D ]E  }t        j                  j                  d
|j                  t        j                               z         G t        j                  j                  d       |j                  rrt        j                  j                  d       |j                  D ]$  }t        j                  j                  d
|z         & t        j                  j                  d       y y )Nr   r   r3   c              3   &   K   | ]	  \  }}|  y wrY   r(   ).0kindnamess      r   	<genexpr>z!cmd_status.run.<locals>.<genexpr>  s     @*?$u*?s   zChanges to be committed:

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

z	%s
zUntracked files:

)r|   r}   r:   r   r   statusanystagedrj   r   r=   r>   decodegetfilesystemencodingunstaged	untracked)	r"   r#   rA   r   r   r  r  r  r   s	            r   r    zcmd_status.run  s   &&())$/t9>!WFF!!&)@&--*=*=*?@@JJ;<%}}224e!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   NrD   r(   r   r   r  r    s    #r   r  c                       e Zd Zd Zy)cmd_ls_remotec                     t        |dg       \  }}t        |      dk  r t        d       t        j                  d       t        j                  |d         }t        |      D ]*  }t        j                  j                  |d||   d       , y )Nre   r   zUsage: dulwich ls-remote URLr   r   r  )
r   r   ri   r   r   r   	ls_remotesortedr=   r>   )r"   r#   rk   rl   refs        r   r    zcmd_ls_remote.run  sp    D"b)
dt9q=01HHQK""47+$<CJJ3S	:;  r   NrD   r(   r   r   r"  r"    s    <r   r"  c                       e Zd Zd Zy)cmd_ls_treec                 d   t        j                         }|j                  dddd       |j                  ddd       |j                  |      \  }}	 |j	                  d      }t        j                  d	|t        j                  |j                  |j                  
       y # t
        $ r d }Y Jw xY w)Nz-rz--recursiverU   zRecusively list tree contents.)rV   r-   z--name-onlyzOnly display name.r   r3   )r4   	recursive	name_only)r|   r}   r~   r:   rh   
IndexErrorr   ls_treer   r=   r*  r+  )r"   r#   rA   r   treeishs        r   r    zcmd_ls_tree.run  s    &&(1	 	 	
 	-CWX))$/	hhqkG 	jj''''	
  	G	s   B! !B/.B/NrD   r(   r   r   r(  r(    s    
r   r(  c                       e Zd Zd Zy)cmd_pack_objectsc                 ,   t        |ddg      \  }}t        |      }t        |      dk  r$d|vr t        d       t	        j
                  d       t        j                  j                         D cg c]  }|j                          }}|d   }d|v r.t        t        j                  dt        j                        }d }g }n"t        |dz   d	      }t        |d
z   d	      }||g}t        j                  d|||       |D ]  }	|	j                           y c c}w )Nre   r=   r   z--stdoutz$Usage: dulwich pack-objects basenamer   r@   z.packwz.idxr3   )r   rg   r   ri   r   r   stdin	readlinesstripgetattrr=   openr   pack_objectsclose)
r"   r#   rk   line
object_idsr   packfidxfr9  fs
             r   r    zcmd_pack_objects.run
  s    D"xj1
dDzt9q=Zt389HHQK/2yy/B/B/DE/Dtdjjl/D
E7CJJ#**=EDEG+S1E6)3/DDMEsJt<AGGI  Fs   /DNrD   r(   r   r   r0  r0  	  s    r   r0  c                       e Zd Zd Zy)cmd_pullc                     t        j                         }|j                  |      \  }}	 |d   }t	        j
                  d|       y # t        $ r d }Y $w xY w)Nr   r3   )r|   r}   r:   r,  r   pull)r"   r#   rA   r   from_locations        r   r    zcmd_pull.run   sX    &&())$/	! GM 	sM*  	! M	!s   A AANrD   r(   r   r   r@  r@    s    +r   r@  c                       e Zd Zd Zy)cmd_pushc                 
   t        j                         }|j                  dt               |j                  dt        d       |j	                  |      }t        j                  d|j                  |j                  xs d        y )Nto_location)r,   refspecr   r0   r3   )	r6   r7   r8   r9   r:   r   pushrG  rH  rK   s       r   r    zcmd_push.run,  sg    ((*M4ICs;  &sD,,dll.BdCr   NrD   r(   r   r   rE  rE  *  s    Dr   rE  c                       e Zd Zd Zy)cmd_remote_addc                     t        j                         }|j                  |      \  }}t        j                  d|d   |d          y )Nr3   r   r   )r|   r}   r:   r   
remote_addr   s       r   r    zcmd_remote_add.run5  s>    &&())$/S$q'473r   NrD   r(   r   r   rK  rK  4  s    4r   rK  c                       e Zd Zi Zd Zy)SuperCommandc                    |s6t        ddj                  | j                  j                               z         y|d   }	 | j                  |   } |       j                  |dd        S # t        $ r t        d|d   z         Y yw xY w)NzSupported subcommands: %sz, Fr   No such subcommand: %sr   )ri   joinsubcommandskeysr   r    )r"   r#   cmdcmd_klss       r   r    zSuperCommand.run?  s    -		$:J:J:O:O:Q0RRS1g	&&s+G y}}T!"X&&  	*T!W45	s   A' 'BBN)r$   r%   r&   rS  r    r(   r   r   rO  rO  ;  s    K
'r   rO  c                       e Zd ZdeiZy)
cmd_remoterJ   N)r$   r%   r&   rK  rS  r(   r   r   rX  rX  L  s     	~Kr   rX  c                       e Zd Zd Zy)cmd_check_ignorec                     t        j                         }|j                  |      \  }}d}t        j                  d|      D ]  }t        |       d} |S )Nr   r3   r   )r|   r}   r:   r   check_ignoreri   )r"   r#   rA   r   retrC   s         r   r    zcmd_check_ignore.runT  sS    &&())$/**35D$KC 6 
r   NrD   r(   r   r   rZ  rZ  S  s    r   rZ  c                       e Zd Zd Zy)cmd_check_mailmapc                     t        j                         }|j                  |      \  }}|D ]#  }t        j                  d|      }t        |       % y r   )r|   r}   r:   r   check_mailmapri   )r"   r#   rA   r   argcanonical_identitys         r   r    zcmd_check_mailmap.run_  sJ    &&())$/C!*!8!8c!B$% r   NrD   r(   r   r   r_  r_  ^  r   r   r_  c                       e Zd Zd Zy)cmd_stash_listc                     t        j                         }|j                  |      \  }}t        j                  d      D ].  \  }}t        d||j                  j                  d      fz         0 y )Nr3   zstash@{%d}: %sr  )r|   r}   r:   r   
stash_listri   r   rstrip)r"   r#   rA   r   ientrys         r   r    zcmd_stash_list.runh  s_    &&())$/!,,S1HAu"a)=)=d)C%DDE 2r   NrD   r(   r   r   re  re  g  s    Fr   re  c                       e Zd Zd Zy)cmd_stash_pushc                     t        j                         }|j                  |      \  }}t        j                  d       t        d       y )Nr3   z'Saved working directory and index state)r|   r}   r:   r   
stash_pushri   r   s       r   r    zcmd_stash_push.runp  s;    &&())$/S!78r   NrD   r(   r   r   rl  rl  o  s    9r   rl  c                       e Zd Zd Zy)cmd_stash_popc                     t        j                         }|j                  |      \  }}t        j                  d       t        d       y )Nr3   z+Restrored working directory and index state)r|   r}   r:   r   	stash_popri   r   s       r   r    zcmd_stash_pop.runx  s;    &&())$/C ;<r   NrD   r(   r   r   rp  rp  w  s    =r   rp  c                       e Zd ZeeedZy)	cmd_stash)listrh   rI  N)r$   r%   r&   re  rp  rl  rS  r(   r   r   rt  rt    s     Kr   rt  c                       e Zd Zd Zy)cmd_ls_filesc                     t        j                         }|j                  |      \  }}t        j                  d      D ]  }t        |        y r   )r|   r}   r:   r   ls_filesri   )r"   r#   rA   r   r   s        r   r    zcmd_ls_files.run  s@    &&())$/&&s+D$K ,r   NrD   r(   r   r   rw  rw    s    r   rw  c                       e Zd Zd Zy)cmd_describec                     t        j                         }|j                  |      \  }}t        t	        j
                  d             y r   )r|   r}   r:   ri   r   describer   s       r   r    zcmd_describe.run  s7    &&())$/i  %&r   NrD   r(   r   r   r{  r{    s    'r   r{  c                       e Zd Zd Zy)cmd_helpc                 
   t        j                         }|j                  ddddd       |j                  |      \  }}|j                  r.t        d       t        t              D ]  }t        d|z          y t        d	       y )
Nr   rT   r_   rU   zList all commands.ry   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:   r_   ri   r%  commands)r"   r#   rA   r   rU  s        r   r    zcmd_help.run  s    &&(% 	 	
 ))$/;;'(h'fsl# ( r   NrD   r(   r   r   r  r    s    r   r  rJ   r<   zcheck-ignorezcheck-mailmapr   r   zcommit-treer}  r   diffz	diff-treez	dump-packz
dump-indexz
fetch-packra   rr   r-   r   r   zls-filesz	ls-remotezls-treezpack-objectsrB  rI  zreceive-packr;   r   r   zrev-listrP   r   stashr  )zsymbolic-reftagzupdate-server-infozupload-packz
web-daemonz
write-treec                 ,   | t         j                  } t        |       dk  r0t        ddj	                  t
        j                               z         y| d   }	 t
        |   } |       j                  | dd        S # t        $ r t        d|z         Y yw xY w)Nr   z Usage: dulwich <%s> [OPTIONS...]|r   rQ  )	r   rL   r   ri   rR  r  rT  r   r    )rL   rU  rV  s      r   mainr    s    |xx
4y1}0CHHX]]_4MNO
q'C3-
 9==ab""	  &,-s   	A9 9BB__main__DULWICH_PDBSIGQUITr   rY   )Sr'   r   r   r   r6   r|   r   typingr   r   r   r   dulwich.clientr   dulwich.errorsr	   dulwich.indexr
   dulwich.packr   r   dulwich.patchr   dulwich.repor   r   r   objectr   r*   rF   rN   rR   rc   ro   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r(  r0  r@  rE  rK  rO  rX  rZ  r_  re  rl  rp  rt  rw  r{  r  r  r  r$   environr6  r  SIGINTr   rL   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fnnk2FMM&--,CHHT#((12,  r   