Help: admin::chainsaw-update

hg admin::chainsaw-update [OPTION] --rev REV --source SOURCE --dest DEST

aliases: admin::chainsawupdate

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.

options:

--[no-]purge-unknown Remove unversioned files before update. Disabling this can in some cases interfere with the update.See also :hg:`purge`. (default: on)
--[no-]purge-ignored Remove ignored files before update. Disable this for instance to reuse previous compiler object files. See also :hg:`purge`. (default: on)
--rev VALUE revision to update to
--source VALUE repository to clone from
--dest VALUE repository to update to REV (possibly cloning)
--initial-clone-minimal 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.

global options ([+] can be repeated):

-R --repository REPO repository root directory or name of overlay bundle file
--cwd DIR change working directory
-y --noninteractive do not prompt, automatically pick the first choice for all prompts
-q --quiet suppress output
-v --verbose enable additional output
--color TYPE when to colorize (boolean, always, auto, never, or debug)
--config CONFIG [+] set/override config option (use 'section.name=value')
--debug enable debugging output
--debugger start debugger
--encoding ENCODE set the charset encoding (default: US-ASCII)
--encodingmode MODE set the charset encoding mode (default: strict)
--traceback always print a traceback on exception
--time time how long the command takes
--profile print command execution profile
--version output version information and exit
-h --help display help and exit
--hidden consider hidden changesets
--pager TYPE when to paginate (boolean, always, auto, or never) (default: auto)