Commit Graph

37 Commits

Author SHA1 Message Date
Jim Hague
b1341e30d4 fix calloc(0, ...) issue 2007-10-23 10:39:24 +00:00
Matt Mackall
0c1648fb37 bdiff: tweaks for large files
- adjust the common line threshold to .1%
  this speeds up a delta of 7M lines of source from 10m to 40s
- adjust the scaling of the hash array down a bit as it was raising the peak
  memory usage significantly
2007-10-11 00:46:56 -05:00
Matt Mackall
2a7d5cc815 bdiff: switch to lyhash
lyhash is a very simple and fast hash function that had the fewest
hash collisions on a 3.9M line text corpus and 190k line binary corpus
and should have significantly fewer collisions than the current hash
function.
2007-09-27 23:59:18 -05:00
Matt Mackall
4c16d712e6 bdiff: use INT_MAX to avoid some inner loop comparisons 2007-09-27 23:59:02 -05:00
Christoph Spiel
49d1dc563c bdiff: simple splitlines optimization 2007-09-27 23:58:54 -05:00
Christoph Spiel
52ef4eacce I have spotted the biggest bottleneck in "bdiff.c". Actually it was
pretty easy to find after I recompiled the python interpreter and
mercurial for profiling.

In "bdiff.c" function "equatelines" allocates the minimum hash table
size, which can lead to tons of collisions. I introduced an
"overcommit" factor of 16, this is, I allocate 16 times more memory
than the minimum value. Overcommiting 128 times does not improve the
performance over the 16-times case.
2007-09-27 23:57:57 -05:00
Alexis S. L. Carvalho
93eb041452 Merge with crew-stable 2007-03-04 09:03:21 -03:00
Erling Ellingsen
3c83c5579e don't return uninitialized memory from bdiff.blocks()
bdiff.blocks() returns a dummy match at the end of both files; the
length of that chunk is never set, so it will sometimes contain random
heap garbage. There are apparently workarounds for this elsewhere:

  # bdiff sometimes gives huge matches past eof, this check eats them,
2007-02-20 22:20:16 +01:00
Andrew Bachmann
3b2c3dac24 BeOS compatibility support 2007-01-02 21:40:20 -08:00
Benoit Boissinot
40a55ea6a3 add AIX to the list of compilers that don't have inline keyword 2006-10-27 10:24:19 +02:00
Alexis S. L. Carvalho
216a9bb3ee python2.5 PyArg_ParseTuple fix
Python 2.5 doesn't like it when we mix str objects and the "t#" format
in PyArg_ParseTuple. Change it to use "s#". Tested with python 2.3, 2.4
and 2.5.
2006-10-12 14:04:11 -03:00
Brendan Cully
65be154af0 Teach bdiff to support buffer objects
manifest.add gives revlog.addrevision a buffer object, which may
be cached and used for a second call in the same session (as mq does
when pushing multiple patches). The other option would be to cast the
buffer to str when caching it.
2006-10-11 12:06:14 -07:00
Vadim Gelfer
dc377b58c1 update copyrights. 2006-08-12 12:30:02 -07:00
Vadim Gelfer
e0b0ae3431 clean up trailing white space. 2006-07-12 08:28:00 -07:00
Vadim Gelfer
8c133566b8 bdiff: improve worst case behavior by 100x.
on 5.8MB (244.000 lines) text file with similar lines, hash before
this change made diff against empty file take 75 seconds.  this change
improves performance to 0.6 seconds.  result is that clone of smallish
repo (137MB) with some files like this takes 1 minute instead of 10
minutes.

common case of diff is 10% slower now, probably because of worse cache
locality. but diff does not affect overall performance in common case
(less than 1% of runtime is in diff when it is working ok), so this
tradeoff looks good.
2006-07-07 15:02:55 -07:00
Thomas Arendsen Hein
5088fdd568 Include inttypes.h instead of stdint.h (fixes issue299)
Many projects use inttypes.h, too. stdint.h isn't available everywhere, e.g.
on some versions of Solaris, while inttypes.h is available everywhere where
stdint.h is.
2006-06-30 21:41:46 +02:00
Shun-ichi GOTO
13b2a0288b Fixed conditional include of stdint.h for windows/msvc6/python2.3 environment. 2006-06-22 13:19:52 +09:00
Vadim Gelfer
e18ca75a83 mac os x: fixes for 10.2 from chris monson <monpublic@gmail.com> 2006-06-20 17:51:39 -07:00
TK Soh
9681381233 do proper typecasting on malloc() and calloc() calls
to support build on Solaris 2.6 using Sun Pro SC4.0 (C++ 4.1) compiler.
2006-03-20 08:46:29 +01:00
Fabian Otto
bfceaf2339 Sunpro compiler patch
The compiling runs through without warning, but runnig the newly builded
hg emmits a message:

| ImportError: ld.so.1: python: fatal: relocation error:
| file /opt/local/lib/python2.3/site-packages/mercurial/bdiff.so:
| symbol cmp: referenced symbol not found

Removing the inline infront of cmp corrects this error message.
2006-02-20 15:58:04 -06:00
twaldmann@thinkmo.de
bcc2a91159 made C src formatting more consistent 2005-11-14 04:58:28 +02:00
Matt Mackall
383ad8c32f bdiff: change spurious __inline to inline 2005-10-18 12:11:23 -07:00
mpm@selenic.com
56f9aeaf2d Fix possible unitialized variable warnings 2005-08-20 01:29:04 -07:00
tksoh@users.sourceforge.net
57e34bb4fd Allow Mercurial to build on HP-UX 11
Temporary fix to allow Mercurial to build on HP-UX 11, as the C
compiler on HP-UX 11 doesn't support 'inline' qualifier. The
'__inline' qualifier seemed to be supported, but not without
first resolving other associated issues.
2005-08-13 12:41:00 -08:00
Wallace, Eric S
ac33b6df10 Fix array overflow bug in bdiff
I ran into a bug while importing a large repository into mercurial.
The diff algorithm does not allocate a big enough array of hunks
for some test cases. This results in memory corruption, and possibly,
as in my case, a seg fault.

You should be able to reproduce this problem with any case of more
than a few lines that follows this pattern:

a  b
=  =
1  1
   2
2  3
   4
3  5
   .
4  .
   .
5
.
.
.

I.e., "a" has blank lines on every other line that have been removed in
"b". In this case, the number of matching hunks is equal to the number
of lines in "b". This is more than ((an + bn)/4 + 2). I'm not sure what
motivates this formula, but when I changed it to the smaller of an or
bn (+ 1), it works.

[comment added by mpm]
2005-08-04 13:25:59 -08:00
mpm@selenic.com
eee2ab41c0 [PATCH] use <arpa/inet.h> instead of <netinet/in.h> for ntohl/htonl
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

[PATCH] use <arpa/inet.h> instead of <netinet/in.h> for ntohl/htonl

From: Jed Davis <jdev@panix.com>

This fixes the Mac OS X build problem; hopefully it won't break any
other OSes, especially since SUSv3 says arpa/inet is the right header.
( http://www.opengroup.org/onlinepubs/009695399/functions/ntohl.html )

manifest hash: 2f06ff0cffefdb35e794131afcd1f34f9fdfa5cf
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCyEoFywK+sNU5EO8RAk6WAJ9v/pnr07zUXKM9EBQQGaKSZAlhxACdHrwS
XTLSL6pPGAwaRfExGF2A3DQ=
=Rtv9
-----END PGP SIGNATURE-----
2005-07-03 12:26:45 -08:00
mpm@selenic.com
68e36bb922 [PATCH] bdiff/mpatch under MSVC
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

[PATCH] bdiff/mpatch under MSVC

From: K Thananchayan <thananck@yahoo.com>

MSVC (6.0) environment does not have 'stdint.h' and does not provide
`inline' qualifier. The following patch is needed to make mecurial
installable under MSVC.

manifest hash: a5b64235acced16cb451faa698922559fec4e573
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCxPapywK+sNU5EO8RAmRnAKCt9cOASaIsYB6kNUDSIStR1DmY4gCgnXlL
Jf0nMmGEkoyXtB0eV+fLzJU=
=fKD5
-----END PGP SIGNATURE-----
2005-06-30 23:54:17 -08:00
mpm@selenic.com
a053dfbfab More fiddling with uint32_t includes for extensions
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

More fiddling with uint32_t includes for extensions

manifest hash: 1ad16a0262e9bd2769e32c13c7fd0c7b0cd7dde7
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCwS+/ywK+sNU5EO8RAhK1AKCtF/57nKCc1AU+l0sR74kHhY1NCwCfSvQK
QQc5i8abuGkFpU5VUBJt5XQ=
=H+CX
-----END PGP SIGNATURE-----
2005-06-28 03:08:47 -08:00
mpm@selenic.com
fad4970cee Remove stdint.h from mpatch and bdiff
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Remove stdint.h from mpatch and bdiff

It's only there for ntohl and htonl and should be pulled in by in.h.

manifest hash: 65954290279241ac92c9ce04c21cf1a3c9dd54e0
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCwD8KywK+sNU5EO8RAhv2AJ40R/T72XK63IbeEFqMLSRJbRJWdACcDa9r
dOL9XpyYxR09REbAHw0JrlE=
=8wkZ
-----END PGP SIGNATURE-----
2005-06-27 10:01:46 -08:00
mpm@selenic.com
302feb06a6 Minor speed improvements for bdiff
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Minor speed improvements for bdiff

Consolidate the jpos/jlen arrays to improve cache locality.
Do the same for the hash head/length arrays.

manifest hash: e6d9ed36782741b1d6fcce8c2d00155a9540e81d
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCvzWxywK+sNU5EO8RAlTMAJ9+yl0dKIeWv4RegeLy7g6wcnoYwgCgk6la
ip6KEAyBb7ktsX14KyZ5+/s=
=utNJ
-----END PGP SIGNATURE-----
2005-06-26 15:09:37 -08:00
mpm@selenic.com
44ac4156e1 extensions: use stdint.h
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

extensions: use stdint.h

Not sure why I didn't do this the first time around. Hopefully still
builds everywhere.

manifest hash: 965582286a190728f8cc0dfb8e11ee56628a59a5
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCvfRgywK+sNU5EO8RAg9SAJ4/ZVpQZcDY5xovLDTZK2txEegEgwCdF2b+
lzSIP109qq8D+KIdUWsbEPc=
=+0Yy
-----END PGP SIGNATURE-----
2005-06-25 16:18:40 -08:00
kyle@zeus.moffetthome.net
b724addd44 Added stdint.h include to fix build on Mac OS X Tiger [v10.4] 2005-06-24 20:53:51 -05:00
mpm@selenic.com
82f810c4fa Use __inline instead of inline
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Use __inline instead of inline

This should let us compile bdiff.c on the other OS.

manifest hash: c1233bb3c7fc060e49dbd2597c122d903797db9e
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCuu/WywK+sNU5EO8RAtqvAKC0d8Kv8He6xNCwmFnvKcff9BT4gACeLq7n
9JDFxYtWMrgjwlShfay1nL4=
=GDFt
-----END PGP SIGNATURE-----
2005-06-23 09:22:30 -08:00
mpm@selenic.com
cd9928ff94 Fix a compile warning for bdiff
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Fix a compile warning for bdiff

manifest hash: 263a8d670a4960f57b6738d41b40626efe1d90d5
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD4DBQFCubyMywK+sNU5EO8RAvw5AJ4usI49PlchNMgytp29Fajf+6aGfgCY/7YV
PBZf1pfbBH3nO0gEi33CNg==
=cw8/
-----END PGP SIGNATURE-----
2005-06-22 11:31:24 -08:00
mpm@selenic.com
20fd1f6e98 Add bdiff.blocks / minor performance tweaks
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Add bdiff.blocks / minor performance tweaks

This refactors bdiff.bdiff so that we can get a list of matching
blocks of line numbers for use by annotate/unidiff.

Minor performance tweaks:
- - add a field for equivalence so we can keep h around a bit longer for cmp
- - mix len into the hash to reduce collisions
- - move an operation into the slow path in longest_match

manifest hash: b1aee590b6291b31069ea8a86b6aa8fb259ac244
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCubu2ywK+sNU5EO8RAm4FAJ9r10aJpT7qA96nqGYFHcuy4XcIHgCfeFx5
q0PyTXeZQc7Fw5kwEPcoykI=
=QXSb
-----END PGP SIGNATURE-----
2005-06-22 11:27:50 -08:00
mpm@selenic.com
4266c33df9 Add 'other OS' bits to bdiff.c / style cleanups
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Add 'other OS' bits to bdiff.c / style cleanups

manifest hash: 9a0ef60a59af0594f95a2b22de243fe8ef059762
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCuNL0ywK+sNU5EO8RAg+yAKCe8dG411HdZZvsxB25AtfBBApQBQCgnb7O
MGO0xvEBgAtt+3F+VJBkiU4=
=F7r7
-----END PGP SIGNATURE-----
2005-06-21 18:54:44 -08:00
mpm@selenic.com
2875576bbc Add a fast binary diff extension (not yet used)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Add a fast binary diff extension (not yet used)

manifest hash: fbfdcab2b1f4856af45176fcf2423d602dfe88c4
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)

iD8DBQFCuL6eywK+sNU5EO8RAoT+AJ95z9gx2IrucBS30CnCQFkZT7lSbgCgnXh5
ScZcgwzJ/mEo9i5vuKNlCIs=
=Gr58
-----END PGP SIGNATURE-----
2005-06-21 17:27:58 -08:00