Commit Graph

408 Commits

Author SHA1 Message Date
mpm@selenic.com
e271f138e7 dirstate: two more stat -> lstat changes 2005-09-09 12:17:51 -07:00
mpm@selenic.com
9580bfb453 Fix dangling symlink bug in dirstate walk code 2005-09-09 11:46:35 -07:00
mpm@selenic.com
3e01e32fbe Fix Windows status problem from new dirstate walk code 2005-09-08 15:01:33 -07:00
mason@suse.com
e8acfdbc0a Optimize dirstate walking
This generally cuts the time for hg status/diff in half, from 2s down to 1s.
The main parts I'm trying to optimize are:

1) os.walk stats every file.  dirstate.changes then stats every file again.

2) os.walk yields every file and subdir to dirstate.traverse who yields every
file and everything in the dirstate map.  dirstate.walk then
filters this mass and yields every file to the caller.  There should be
fewer steps in here, and fewer duplicate strings yielded.

3) dirstate.walk runs util.unique on the results from dirstate.traverse,
even though it is also passing things through dirstate.seen to look for
duplicates.

I've turned os.walk into something hg specific that takes all the dirstate
ignore and matching rules into account.  The new function also takes an
function arg (statmatch()) the caller supplies to help filter out
files it doesn't care about.  dirstate.changes uses this to update state
for each file, avoiding the second stat call.

dirstate.walk is changed to turn the match function it is passed into
a statmatch function.  The only real difference is that a statmatch
function takes the stat data as a second parameter.  It now calls
dirstate.walkhelper, who requires a statmatch function to be passed.

This fails test-walk, but right now I think this is from a sorting error
fixed by this patch.

Index: crew/mercurial/dirstate.py
===================================================================
2005-09-01 07:34:53 -07:00
mpm@selenic.com
7f0689647a fix some rename/copy bugs
- delete copy information when we update dirstate

  hg was keeping the copy state and marking things as copied on
  multiple commits

- files that are renamed should have no parents

  if you do a rename/copy to an existing file, it should not be marked
  as descending from its previous revisions.

- remove spurious print from filelog.renamed

- add some more copy tests
2005-08-27 22:04:17 -07:00
mpm@selenic.com
49950bfbc2 Fix dirstate imports 2005-08-27 16:42:03 -07:00
mpm@selenic.com
016db4f3e8 Adjust some imports 2005-08-27 14:59:25 -07:00
mpm@selenic.com
e175fdde9b Break apart hg.py
- move the various parts of hg.py into their own files
- create node.py to store node manipulation functions
2005-08-27 14:21:25 -07:00