sapling/mercurial
Martin Geisler 5b013e2061 encoding: add fast-path for ASCII uppercase.
This copies the performance hack from encoding.lower (e7a5733d533f).

The case-folding logic that kicks in on case-insensitive filesystems
hits encoding.upper hard: with a repository with 75k files, the
timings went from

  hg perfstatus
  ! wall 3.156000 comb 3.156250 user 1.625000 sys 1.531250 (best of 3)

to

  hg perfstatus
  ! wall 2.390000 comb 2.390625 user 1.078125 sys 1.312500 (best of 5)

This is a 24% decrease. For comparison, Mercurial 2.0 gives:

  hg perfstatus
  ! wall 2.172000 comb 2.171875 user 0.984375 sys 1.187500 (best of 5)

so we're only 10% slower than before we added the extra case-folding
logic.

The same decrease is seen when executing 'hg status' as normal, where
we go from:

  hg status --time
  time: real 4.322 secs (user 2.219+0.000 sys 2.094+0.000)

to

  hg status --time
  time: real 3.307 secs (user 1.750+0.000 sys 1.547+0.000)
2012-07-23 15:55:26 -06:00
..
help hgweb: side-by-side comparison functionality 2012-07-08 17:17:02 +02:00
hgweb hgweb: side-by-side comparison functionality 2012-07-08 17:17:02 +02:00
httpclient httpclient: omit tests for the client since we don't run them anyway 2012-05-19 09:34:25 -05:00
pure cleanup: "not x in y" -> "x not in y" 2012-05-12 16:00:57 +02:00
templates hgweb: side-by-side comparison functionality 2012-07-08 17:17:02 +02:00
__init__.py Add back links from file revisions to changeset revisions 2005-05-03 13:16:10 -08:00
ancestor.py check-code: flag 0/1 used as constant Boolean expression 2011-06-01 12:38:46 +02:00
archival.py subrepo: propagate matcher to subrepos when archiving 2012-06-16 22:34:06 -04:00
base85.c base85: cast Py_ssize_t values to int (issue3481) 2012-06-04 16:59:34 +02:00
bdiff.c bdiff: check and cast first parameter value on putbe32() calls 2012-05-15 22:36:47 +02:00
bookmarks.py localrepo: add branchtip() method for faster single-branch lookups 2012-05-13 14:04:04 +02:00
bundlerepo.py peer: introduce canpush and improve error message 2012-07-13 21:52:28 +02:00
byterange.py Remove FSF mailing address from GPL headers 2012-01-06 16:27:13 +01:00
changegroup.py changegroup: decompress GZ algorithm in larger chunks for better performance 2012-04-29 20:58:50 +02:00
changelog.py hidden: move hiddenrevs set on the repository 2012-07-16 17:44:46 +02:00
cmdutil.py hidden: move hiddenrevs set on the repository 2012-07-16 17:44:46 +02:00
commands.py update: put rules for uncommitted changes into verbose help section 2012-07-14 18:29:46 +02:00
commandserver.py cleanup: "raise SomeException()" -> "raise SomeException" 2012-05-12 16:00:58 +02:00
config.py config: use util.compilere to compile regexps 2012-06-01 15:26:46 -07:00
context.py hidden: move hiddenrevs set on the repository 2012-07-16 17:44:46 +02:00
copies.py copies: re-include root directory in directory rename detection (issue3511) 2012-06-27 13:41:04 -05:00
dagparser.py cleanup: eradicate long lines 2012-05-12 15:54:54 +02:00
dagutil.py cleanup: "raise SomeException()" -> "raise SomeException" 2012-05-12 16:00:58 +02:00
demandimport.py demandimport: determine at load time if __import__ has level argument 2011-08-22 22:50:52 +02:00
diffhelpers.c diffhelpers: use Py_ssize_t in testhunk() 2012-05-12 14:00:51 +02:00
dirstate.py dirstate: drop assert 2012-07-16 16:19:53 -05:00
discovery.py checkheads: take future obsoleted heads into account 2012-07-17 17:59:29 +02:00
dispatch.py dispatch: fix traceback when extension was tested with newer versions only 2012-07-19 21:20:56 +02:00
encoding.py encoding: add fast-path for ASCII uppercase. 2012-07-23 15:55:26 -06:00
error.py wireproto: add out-of-band error class to allow remote repo to report errors 2011-08-02 15:21:10 -04:00
exewrapper.c exewrapper: use generic term script 2012-06-29 08:10:43 +02:00
extensions.py hooks: print out more information when loading a python hook fails 2012-07-06 18:41:25 +02:00
fancyopts.py globally: use safehasattr(x, '__call__') instead of hasattr(x, '__call__') 2011-07-25 16:24:37 -05:00
filelog.py filelog: add file function to open other filelogs 2011-05-10 17:38:58 +02:00
filemerge.py merge with stable 2012-03-13 16:29:13 -05:00
fileset.py fileset: add "subrepo" fileset symbol 2012-03-22 21:12:15 +01:00
formatter.py formatter: add basic formatters 2012-02-20 16:42:47 -06:00
graphmod.py graphlog: extract ascii drawing code into graphmod 2012-07-11 17:13:39 +02:00
hbisect.py util: subclass deque for Python 2.4 backwards compatibility 2012-06-01 17:05:31 -07:00
help.py templatekw/help: document the {parents} keyword 2012-07-10 09:11:53 -07:00
hg.py outgoing: accept revset argument for --rev 2012-07-15 12:43:10 -04:00
hook.py hooks: print out more information when loading a python hook fails 2012-07-06 18:41:25 +02:00
httpconnection.py Use explicit integer division 2012-01-08 18:15:54 +01:00
httppeer.py httprepo: ensure Content-Type header exists when pushing data 2012-07-13 13:21:20 +02:00
i18n.py i18n: use getattr instead of hasattr 2011-07-25 20:46:30 -05:00
ignore.py misc: adding missing file close() calls 2011-11-03 11:24:55 -05:00
keepalive.py check-code: ignore naked excepts with a "re-raise" comment 2012-05-13 13:18:06 +02:00
localrepo.py _updatebranchcache: prevent deleting dict key during iteration 2012-07-17 16:16:17 +02:00
lock.py lock: change name of release chain 2011-11-30 16:53:44 -06:00
lsprof.py lsprof: report units correctly 2012-05-30 13:57:41 -07:00
lsprofcalltree.py drop unused imports 2009-05-14 15:35:46 +02:00
mail.py mail: use quoted-printable for mime encoding to avoid too long lines (issue3075) 2011-11-23 02:44:11 +01:00
manifest.py cleanup: eradicate long lines 2012-05-12 15:54:54 +02:00
match.py matcher: use re2 bindings if available 2012-06-01 15:26:20 -07:00
mdiff.py mdiff: fix diff header generation for files with spaces (issue3357) 2012-04-05 15:39:07 +02:00
merge.py merge: warn about file deleted in one branch and renamed in other (issue3074) 2012-05-23 20:50:16 +02:00
minirst.py minirst: generate tables as a list of joined lines 2012-06-01 11:58:23 +02:00
mpatch.c mpatch: use Py_ssize_t for string length 2012-05-20 01:28:31 +02:00
node.py Update license to GPLv2+ 2010-01-19 22:20:08 -06:00
obsolete.py obsolete: add an any successors function 2012-07-17 17:31:29 +02:00
osutil.c osutil: handle deletion race with readdir/stat (issue3463) 2012-05-18 14:34:33 -05:00
parser.py parsers: fix localization markup of parser errors 2011-06-21 00:17:52 +02:00
parsers.c parsers.c: remove warning: 'size' may be used uninitialized in this function 2012-07-06 00:48:45 +02:00
patch.py patch: keep patching after missing copy source (issue3480) 2012-06-01 17:37:56 +02:00
peer.py peer: remove cancopy from peer api; use directly on repo instead 2012-07-13 21:52:37 +02:00
phases.py repo: move visibleheads and visiblebranchmap logic in discovery 2012-07-17 01:22:31 +02:00
posix.py util, posix: eliminate encodinglower and encodingupper 2012-07-18 14:41:58 +02:00
pushkey.py obsolete: exchange obsolete marker over pushkey 2012-06-07 19:21:59 +02:00
pvec.py pvec: introduce pvecs 2012-03-12 13:37:39 -05:00
py3kcompat.py py3kcompat: added fake ord implementation for py3k 2010-08-07 16:38:38 -03:00
repair.py revlog: descendants(*revs) becomes descendants(revs) (API) 2012-06-01 12:45:16 -07:00
revlog.py backout 94ae81a4e338 2012-07-12 14:20:34 -05:00
revset.py revset: add destination() predicate 2012-07-07 00:47:55 -04:00
scmutil.py scmutil: 25% speedup in casecollisionauditor 2012-07-06 13:56:40 -07:00
setdiscovery.py localpeer: return only visible heads and branchmap 2012-07-17 01:04:45 +02:00
similar.py cleanup: eradicate long lines 2012-05-12 15:54:54 +02:00
simplemerge.py cleanup: "raise SomeException()" -> "raise SomeException" 2012-05-12 16:00:58 +02:00
sshpeer.py peer: introduce real peer classes 2012-07-13 21:47:06 +02:00
sshserver.py addchangegroup: remove the lock argument on the addchangegroup methods 2011-11-28 01:32:13 +01:00
sslutil.py ui: optionally quiesce ssl verification warnings on python 2.5 2012-04-09 14:36:16 -07:00
statichttprepo.py peer: introduce canpush and improve error message 2012-07-13 21:52:28 +02:00
store.py store: abstract out how we retrieve a file's size 2012-06-25 15:14:06 -07:00
strutil.py Update license to GPLv2+ 2010-01-19 22:20:08 -06:00
subrepo.py subrepo: add missing newline in Git warning message 2012-07-12 09:58:40 +02:00
tags.py tags: short-circuit if no tags have ever been committed 2012-05-13 12:01:52 +02:00
templatefilters.py cleanup: "not x in y" -> "x not in y" 2012-05-12 16:00:57 +02:00
templatekw.py templatekw/help: document the {parents} keyword 2012-07-10 09:11:53 -07:00
templater.py cleanup: "not x in y" -> "x not in y" 2012-05-12 16:00:57 +02:00
transaction.py cleanup: replace naked excepts with except Exception: ... 2012-05-12 16:02:46 +02:00
treediscovery.py util: subclass deque for Python 2.4 backwards compatibility 2012-06-01 17:05:31 -07:00
ui.py ui: add a variable to control whether hooks should be called 2012-06-23 19:57:07 +03:00
url.py cleanup: eradicate long lines 2012-05-12 15:54:54 +02:00
util.h parser: use PyInt_FromSsize_t in index_stats 2012-05-09 09:58:50 +02:00
util.py util, posix: eliminate encodinglower and encodingupper 2012-07-18 14:41:58 +02:00
verify.py cleanup: replace naked excepts with except Exception: ... 2012-05-12 16:02:46 +02:00
win32.py win32: remove uneeded usage of _STARTF_USESHOWWINDOW 2012-06-25 19:26:29 +02:00
windows.py merge with stable 2012-07-19 00:54:33 +02:00
wireproto.py repo: move visibleheads and visiblebranchmap logic in discovery 2012-07-17 01:22:31 +02:00