Commits

Searching for commits

Mercurial supports a functional language for selecting a set of
revisions.

The language supports a number of predicates which are joined by
infix operators. Parenthesis can be used for grouping.

Identifiers such as branch names must be quoted with single
or double quotes if they contain characters outside of
[._a-zA-Z0-9\x80-\xff] or if they match one of the
predefined predicates.

Prefix operators

not x

Changesets not in x. Short form is ! x.

Infix operators

x::y

A DAG range, meaning all changesets that are descendants
of x and ancestors of y, including x and y themselves.
If the first endpoint is left out, this is equivalent to
ancestors(y), if the second is left out it
is equivalent to descendants(x).

An alternative syntax is x..y.

x:y

All changesets with revision numbers between x and y, both
inclusive. Either endpoint can be left out, they default to
0 and tip.

x and y

The intersection of changesets in x and y. Short form is
x & y.

x or y

The union of changesets in x and y. There are two alternative
short forms: x | y and x + y.

x - y

Changesets in x but not in y.

Predicates

all()

All changesets, the same as 0:tip.

ancestor(single, single)

Greatest common ancestor of the two changesets.

ancestors(set)

Changesets that are ancestors of a changeset in set.

author(string)

Alias for user(string).

bookmark([name])

The named bookmark or all bookmarks.

branch(set)

All changesets belonging to the branches of changesets in set.

children(set)

Child changesets of changesets in set.

closed()

Changeset is closed.

date(interval)

Changesets within the interval, see hg help dates.

descendants(set)

Changesets which are descendants of changesets in set.

file(pattern)

Changesets affecting files matched by pattern.

follow()

An alias for ::. (ancestors of the working copy's
first parent).

grep(regex)

Like keyword(string) but accepts a regex. Use
grep(r'...') to ensure special escape characters
are handled correctly.

Deprecate addConvenienceForSelector to enable work on issue #3objc.addConvenienceForSelector makes it harder to implement the optimization
mentioned in issue #3, I'm therefore deprecating this function.
Also started work on removing the current use of that functionality from
pyobjc-core, although much more work it needed.

Ensure that pyobjc-core is pip installable
Without this patch you cannot install pyobjc-core using pip because
pip assumes that 'egg_info' in setup.py refers to the setuptools command
module, before this patch 'egg_info' was a local class in setup.py.
Patch by Marc Abramowitz

Use runtime APIs for creating formal protocols
With this patch PyObjC uses the OSX 10.7 runtime API for
creating formal protocols. A compatibility API for doing this
on OSX 10.6 (32-bit) is also provided.

Always use an NSString as helper for OC_PythonUnicode
* When sizeof(Py_UNICODE) == sizeof(unichar) we could work without the NSString,
but for some reason that causes problems with some CFString APIs
* Provide a number of __realObject__ implementations to optimize the
creation of the NSString: don't copy actual string data unless
really necessary
* This checkin also adds caching for selector lookups, should slightly
improve performance
Thi…

Some string updates
* Ensure !FAST_PATH works for python 2.x (already did so for 3.x)
* Remove (already disabled) implementation for some private APIs
in the NSString class cluster
* Disable FAST_PATH support for now, I get unexplained test failures
when FAST_PATH is enabled (in particular: CFStringTrim fails when
running on OSX with the x86_64 architecture when the second
argument is an OC_PythonUnicode ob…

More work on python3 compatibility (with 2to3)
* Fixes a number of issues in NSDecimal support, including some interpreter crashes
* Almost all tests now pass on OSX 10.7 with python 2.7 and 3.2
(3.3 should also work, need to rerun the entire suite there), both x86_64 and i386

Ensure saner conversion from negative double to unsigned integers
(the conversion is undefined by C according to information found on google,
the current PyObjC implementation ensures that the conversion behaves simular
to the conversion from signed integers to unsigned integers)

Ensure code does what it promises
Don't return NULL when typeid is 0, but return
the wrapper for CFTypeRef, as promised by the
comment. Without this we'd return NULL (error state),
without raising a python exception.