##// END OF EJS Templates
Use revlog.delta and mdiff.patchtext to massively speed up processing...
Use revlog.delta and mdiff.patchtext to massively speed up processing of manifests. This lets us verify a 28k changeset kernel repo in under two minutes.
mpm@selenic.com -
r121:66fb61d9 default
Show More
Name Size Modified Last Commit Author
mercurial
tests
.hgignore Loading ...
.hgtags Loading ...
MANIFEST.in Loading ...
PKG-INFO Loading ...
README Loading ...
comparison.txt Loading ...
convert-repo Loading ...
hg Loading ...
hgweb.py Loading ...
notes.txt Loading ...
setup.py Loading ...
tkmerge Loading ...

Setting up Mercurial in your home directory:

Note: Debian fails to include bits of distutils, you'll need
python-dev to install. Alternately, shove everything somewhere in
your path.

$ tar xvzf mercurial-<ver>.tar.gz
$ cd mercurial-<ver>
$ python2.3 setup.py install --home ~
$ export PYTHONPATH=${HOME}/lib/python # add this to your .bashrc
$ export HGMERGE=tkmerge # customize this
$ hg # test installation, show help

If you get complaints about missing modules, you probably haven't set
PYTHONPATH correctly.

Setting up a Mercurial project:

$ cd linux/
$ hg init # creates .hg
$ hg status # show changes between repo and working dir
$ hg diff # generate a unidiff
$ hg export # export a changeset as a diff
$ hg addremove # add all unknown files and remove all missing files
$ hg commit # commit all changes, edit changelog entry

Mercurial will look for a file named .hgignore in the root of your
repository contains a set of regular expressions to ignore in file
paths.

Mercurial commands:

$ hg history # show changesets
$ hg log Makefile # show commits per file
$ hg checkout # check out the tip revision
$ hg checkout <hash> # check out a specified changeset
$ hg add foo # add a new file for the next commit
$ hg remove bar # mark a file as removed
$ hg verify # check repo integrity
$ hg tags # show current tags
$ hg annotate [files] # show changeset numbers for each file line
$ hg blame [files] # show commit users for each file line

Branching and merging:

$ cd ..
$ mkdir linux-work
$ cd linux-work
$ hg branch ../linux # create a new branch
$ hg checkout # populate the working directory
$ <make changes>
$ hg commit
$ cd ../linux
$ hg merge ../linux-work # pull changesets from linux-work

Importing patches:

Fast:
$ patch < ../p/foo.patch
$ hg addremove
$ hg commit

Faster:
$ patch < ../p/foo.patch
$ hg commit `lsdiff -p1 ../p/foo.patch`

Fastest:
$ cat ../p/patchlist | xargs hg import -p1 -b ../p

Network support:

The simple way:

# pull the self-hosting hg repo
foo$ hg init
foo$ hg merge http://selenic.com/hg/
foo$ hg checkout # hg co works too

# export your .hg directory as a directory on your webserver
foo$ ln -s .hg ~/public_html/hg-linux

# merge changes from a remote machine
bar$ hg merge http://foo/~user/hg-linux

The new, fast, experimental way:

# pull the self-hosting hg repo
foo$ hg init
foo$ hg merge hg://selenic.com/hg/
foo$ hg checkout # hg co works too

# Set up the CGI server on your webserver
foo$ ln -s .hg ~/public_html/hg-linux/.hg
foo$ cp hgweb.py ~/public_html/hg-linux/index.cgi

# merge changes from a remote machine
bar$ hg merge hg://foo/~user/hg-linux

Another approach which does perform well right now is to use rsync.
Simply rsync the remote repo to a read-only local copy and then do a
local pull.