
    q&fC                     "   d Z ddlZddlmZ ddlmZmZmZmZm	Z	 ddl
mZ i Z e	j                  e      Z eddd	d
 ed      fddd
 ed      fddd ed      fddd ed      fddd ed      fddd ed      fg ed      d
d
      d        Zy)a'  chainsaw is a collection of single-minded and dangerous tools. (EXPERIMENTAL)

  "Don't use a chainsaw to cut your food!"

The chainsaw is a collection of commands that are so much geared towards a
specific use case in a specific context or environment that they are totally
inappropriate and **really dangerous** in other contexts.

The help text of each command explicitly summarizes its context of application
and the wanted end result.

It is recommended to run these commands with the ``HGPLAIN`` environment
variable (see :hg:`help scripting`).
    N   )_)cmdutilcommandserror	localrepo	registrar)urlutils   admin::chainsaw-update    s   purge-unknownTsx   Remove unversioned files before update. Disabling this can in some cases interfere with the update.See also :hg:`purge`.s   purge-ignoreds|   Remove ignored files before update. Disable this for instance to reuse previous compiler object files. See also :hg:`purge`.s   revs   revision to update tos   sources   repository to clone froms   dests.   repository to update to REV (possibly cloning)s   initial-clone-minimalFs   Pull only the prescribed revision upon initial cloning. This has the side effect of ignoring clone-bundles, which if often slower on the client side and stressful to the server than applying available clone bundles.sH   hg admin::chainsaw-update [OPTION] --rev REV --source SOURCE --dest DEST)	helpbasicnorepoc                 0   |d   }|d   }|d   }|st        j                  t        d            |st        j                  t        d            |st        j                  t        d            t        j                  |      }	 t        j                  | |d      }d}| j                  t        d	|z               |j                  j                  d      r| j                  t        d             |j                  j                  d      r| j                  t        d             |j                         5  |j!                         5  | j                  t        d             |j#                          | j                  t        d      |z         |r|j%                  d      sg }n|g}ddi}|j&                  j)                  |d      5  t+        j,                  dt.        j0                        d   d   }	 |	|j&                  |||d      }
|
r|
cddd       cddd       cddd       S 	 ddd       t+        j,                  dt.        j0                        d   d   } || |d|j%                  d      |j%                  d      d      }
|
r|
cddd       cddd       S | j                  t        d       |z         t+        j,                  d!t.        j0                        d   d   } || ||d"      }
|
r|
cddd       cddd       S | j                  t        d#      ||j2                  fz         ddd       ddd       y# t         j                  $ r 	 t        j                  |       | j                  t        d
|z               n,# t        $ r  | j                  t        d|z               Y nw xY w| j                  t        d|z               t        j                  | |d      }d}Y 2w xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w)$a  pull and update to a given revision, no matter what, (EXPERIMENTAL)

    Context of application: *some* Continuous Integration (CI) systems,
    packaging or deployment tools.

    Wanted end result: local repository at the given REPO_PATH, having the
    latest changes to the given revision and with a clean working directory
    updated at the given revision.

    chainsaw-update pulls from one source, then updates the working directory
    to the given revision, overcoming anything that would stand in the way.

    By default, it will:

    - clone if the local repo does not exist yet, **removing any directory
      at the given path** that would not be a Mercurial repository.
      The initial clone is full by default, so that clonebundles can be
      applied. Use the --initial-clone-minimal flag to avoid this.
    - break locks if needed, leading to possible corruption if there
      is a concurrent write access.
    - perform recovery actions if needed
    - revert any local modification.
    - purge unknown and ignored files.
    - go as far as to reclone if everything else failed (not implemented yet).

    DO NOT use it for anything else than performing a series
    of unattended updates, with full exclusive repository access each time
    and without any other local work than running build scripts.
    In case the local repository is a share (see :hg:`help share`), exclusive
    write access to the share source is also mandatory.

    It is recommended to run these commands with the ``HGPLAIN`` environment
    variable (see :hg:`scripting`).

    Motivation: in Continuous Integration and Delivery systems (CI/CD), the
    occasional remnant or bogus lock are common sources of waste of time (both
    working time and calendar time). CI/CD scripts tend to grow with counter-
    measures, often done in urgency. Also, whilst it is neat to keep
    repositories from one job to the next (especially with large
    repositories), an exceptional recloning is better than missing a release
    deadline.
    revsourcedests$   specify a target revision with --revs!   specify a pull path with --sources   specify a repo path with --destF)creates   loaded repository at "%s"
s0   removed non-repository file or directory at "%s"s   no such directory: "%s"
s   creating repository at "%s"
Ts   locks   had to break store lock
s   wlocks   had to break working copy lock
s1   recovering after interrupted transaction, if any
s   pulling from %s
initial_clone_minimal)s   uis   quiets   chainsaw-updates   pull   r   )r   remote_hiddenNs   purgepurge_ignoredpurge_unknown)dirsallfilesconfirms   updating to revision '%s'
s   update)r   cleans=   chainsaw-update to revision '%s' for repository at '%s' done
)r   
InputErrorr   r
   urllocalpathr   instancestatus	RepoErrorshutilrmtreeFileNotFoundErrorsvfs	tryunlinkvfswlocklockrecovergetuiconfigoverrider   findcmdr   tableroot)r,   optsr   r   	repo_pathreporepo_created	pull_revs	overridespullretpurgeupdates                :/usr/lib/python3/dist-packages/mercurial/admin/chainsaw.pyr:   r:   (   s   L u+C(^FVIq!HIJJq!EFGGq!CDEE$$Y/I!!"i>
		!2Y>?@$ yy7#
		!012xx(#
		!789 
 .
tyy{ .

		!IJK
		!()F23)@ AII&-	WW##I/AB 
	??7HNN;A>qAD#C 
	 
	.
 .
 .
& 
	 (..9!<Q?)((?+
 A.
 .
 .
D 			!45;<HNN;A>qAR3d3M.
 .
 .
P 			3 DII		
Q.
 .
 .
/ ?? 
	MM)$ II!*+ ! 	CIIa4y@AB	C 			!4y@AB!!"i=B
	 
	.
 .
 .
 .
s   7M 7PBP 	AO3	P 	P+A!P 	PAP 5	P)P 1PO0N	+O0	&N2/O01N22:O0/O03O=8P  P		PP)__doc__r"   i18nr    r   r   r   r   r	   utilsr
   cmdtablecommandr:    r   r;   <module>rC      s      
)

H
% 	 )			
 )			
 &'		
 )*		
 ?@		
 $H	
	
O2f S s:v
w:v
r   