mercurial/parsers.c: fix compiler warning

When try to compile on x64 OS X, I get this warning:

mercurial/parsers.c:931:27: warning: implicit conversion loses integer precision
: 'long' to 'int' [-Wshorten-64-to-32]
                        ? 4 : self->raw_length / 2;

The patch verifies if value of self->raw_length falls bellow INT_MAX; if not,
it raises the ValueError exception.

If value of self->raw_length is greater than 4, it's casted to int type, to
eliminate the warning.

--HG--
extra : rebase_source : b25a8f8e70f5ff13e7e3d1cc983ba195d63263d7
parse_index2: fix crash on bad argument type (issue4110)

Passing a non-string to parsers.parse_index2() causes Mercurial to crash
instead of raising a TypeError (found on Mac OS X 10.8.5, Python 2.7.6):

    import mercurial.parsers as parsers
    parsers.parse_index2(0, 0)

    Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
    0 parsers.so  0x000000010e071c59 _index_clearcaches + 73 (parsers.c:644)
    1 parsers.so  0x000000010e06f2d5 index_dealloc + 21 (parsers.c:1767)
    2 parsers.so  0x000000010e074e3b parse_index2 + 347 (parsers.c:1891)
    3 org.python.python 0x000000010dda8b17 PyEval_EvalFrameEx + 9911

This happens because when arguments of the wrong type are passed to
parsers.parse_index2(), indexType's initialization function index_init() in
parsers.c leaves the indexObject instance in a state that indexType's
destructor function index_dealloc() cannot handle.

This patch moves enough of the indexObject initialization code inside
index_init() from after the argument validation code to before it.
This way, when bad arguments are passed to index_init(), the destructor
doesn't crash and the existing code to raise a TypeError works.  This
patch also adds a test to check that a TypeError is raised.

--HG--
branch : stable
extra : rebase_source : 9e66f4583add66fdc258fed670c6abdb75f39155
Merge
tests: add missing glob
keyword: wlock while setting branch in kwdemo
tests: fix `hghave root` on windows

This lets tests\test-hghave.t pass on windows where geteuid does not exist.
tests: use strip extension instead of mq where it makes sense

When a test only uses 'hg strip', it no longer needs to load MQ.
hg: remove outdated comment

The graphlog functionality has been in core since Mercurial 2.3.
tests: don't load unnecessary graphlog extension

Since graphlog is in core, we can use 'hg log -G' instead.
graphlog: mark as deprecated
mq: prefer a loop to a double-for list comprehension

The [x for y in l for x in y] syntax is nigh-incomprehensible, and this
is a particularly easy case to expand into a loop since there's no 'if'
condition in the list comprehension.
Makefile: fix po file updating by using same file name everywhere

The update is done on a temporary file since ce5d711475a3. The name of this
file was first XX.po~ and has been changed to XX.po.tmp in all except of one
place. Do this now.
Makefile: temporary copy of hg.pot is hg.pot.tmp instead of hg.pot~

The file ending of temporary files for generating XX.po has been changed to
.tmp (from ~). Use the same ending when generating hg.pot.
dispatch: turn off custom debugger for HGPLAIN mode

Some debuggers, such as ipdb, load escape codes and color codes even when later
turned off. This will affect scripts that do simple parsing and can't handle
escape codes. Therefore, we only load a custom debugger if ui.plain() is false.
bash_completion: untabify
bash_completion: expand aliased commands
bash_completion: determine root executable in case of alias

This solves an issue for users that have "alias hg='hg --some_opts'" where they
would see wrong entries in the completion output (such as color codes).
bash_completion: fix issue with subdirectories not being completed

Previously, if there was a directory between the file and first-level directory (e.g. 'bar' in
foo/bar/file), then bash_completion would only list 'foo/file' instead of 'foo/bar/file'.

This behavior was introduced in 80f3ae36f908 to fix spaces in file names. In
this patch, we keep that behavior while also fixing subdirectory completion by
reverting 80f3ae36f908 and instead add backslashes to whitespace manually. This
approach means adding the completion option 'nospace' since we do this manually
now.
bash_completion: remove restriction on bookmark completion

Previously, we only completed a bookmark when deleting or renaming a
bookmark. Since we can now move a bookmark forward, we drop this restriction.
bash_completion: use correct command for listing shelves

Previously, _hg_shelves used the unshelve command to list current shelves. This
is actually the wrong command. The correct usage is 'hg shelve -l' so we use
that instead.