Wednesday, January 22, 2014

Mercurial help

After Mercurial installation one may need to browse some help.
But, above all, it's paramount to read:

The CLI consists on a long list of hg subcommands: 

# hg -v help
Mercurial Distributed SCM

list of commands:

add:
   add the specified files on the next commit
addremove:
   add all new files, delete all missing files
annotate, blame:
   show changeset information by line for each file
archive:
   create an unversioned archive of a repository revision
backout:
   reverse effect of earlier changeset
bisect:
   subdivision search of changesets
bookmarks:
   track a line of development with movable markers
branch:
   set or show the current branch name
branches:
   list repository named branches
bundle:
   create a changegroup file
cat:
   output the current or given revision of files
clone:
   make a copy of an existing repository
commit, ci:
   commit the specified files or all outstanding changes
copy, cp:
   mark files as copied for the next commit
diff:
   diff repository (or selected files)
export:
   dump the header and diffs for one or more changesets
forget:
   forget the specified files on the next commit
graft:
   copy changes from other branches onto the current branch
grep:
   search for a pattern in specified files and revisions
heads:
   show current repository heads or show branch heads
help:
   show help for a given topic or a help overview
identify, id:
   identify the working copy or specified revision
import, patch:
   import an ordered set of patches
incoming, in:
   show new changesets found in source
init:
   create a new repository in the given directory
locate:
   locate files matching specific patterns
log, history:
   show revision history of entire repository or files
manifest:
   output the current or given revision of the project manifest
merge:
   merge working directory with another revision
outgoing, out:
   show changesets not found in the destination
parents:
   show the parents of the working directory or revision
paths:
   show aliases for remote repositories
phase:
   set or show the current phase name
pull:
   pull changes from the specified source
push:
   push changes to the specified destination
recover:
   roll back an interrupted transaction
remove, rm:
   remove the specified files on the next commit
rename, move, mv:
   rename files; equivalent of copy + remove
resolve:
   redo merges or set/view the merge status of files
revert:
   restore files to their checkout state
rollback:
   roll back the last transaction (dangerous)
root:
   print the root (top) of the current working directory
serve:
   start stand-alone webserver
showconfig, debugconfig:
   show combined config settings from all hgrc files
status, st:
   show changed files in the working directory
summary, sum:
   summarize working directory state
tag:
   add one or more tags for the current or given revision
tags:
   list repository tags
tip:
   show the tip revision
unbundle:
   apply one or more changegroup files
update, up, checkout, co:
   update working directory (or switch revisions)
verify:
   verify the integrity of the repository
version:
   output version and copyright information

additional help topics:

 config        Configuration Files
 dates         Date Formats
 diffs         Diff Formats
 environment   Environment Variables
 extensions    Using Additional Features
 filesets      Specifying File Sets
 glossary      Glossary
 hgignore      Syntax for Mercurial Ignore Files
 hgweb         Configuring hgweb
 merge-tools   Merge Tools
 multirevs     Specifying Multiple Revisions
 patterns      File Name Patterns
 phases        Working with Phases
 revisions     Specifying Single Revisions
 revsets       Specifying Revision Sets
 subrepos      Subrepositories
 templating    Template Usage
 urls          URL Paths

global options:

 -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
    --config CONFIG [+] set/override config option 

                        (use 'section.name=value')
    --debug             enable debugging output
    --debugger          start debugger
    --encoding ENCODE   set the charset encoding 

                        (default: UTF-8)
    --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

[+] marked option can be specified multiple times


Of course man pages are available at HG(1).
For instance:

$ man hg

Mercurial Manual                                        HG(1)

NAME
  hg - Mercurial source code management system

SYNOPSIS
  hg command [option]... [argument]...

DESCRIPTION
  The hg command provides a command line 

  interface to the Mercurial system.

COMMAND ELEMENTS
  ...

OPTIONS

  ...
 
In addition there's a quick and cool HTTP option.
All that's required is to create an empty repository and start the server.

# cd /var/tmp
# hg init sample
# hg serve -d -p 8000 -R sample -A /tmp/access -E /tmp/error
  
Assume that the previous commands were given at the mercurial host.
Just point a web browser to http://mercurial:8000/help to get started.


The access log will immediately starting tracking activity.

# cat /tmp/access
192.168.0.100 ... "GET /help HTTP/1.1" 200 -
192.168.0.100 ... "GET /static/mercurial.js HTTP/1.1" 304 -
192.168.0.100 ... "GET /static/style-paper.css HTTP/1.1" 304 -
192.168.0.100 ... "GET /static/hgicon.png HTTP/1.1" 304 -
192.168.0.100 ... "GET /static/hglogo.png HTTP/1.1" 304 -


To stop the web server:
 
# pgrep -f 'hg serve -d -p 8000'
16737
 

# pkill -f 'hg serve -d -p 8000'