# HG changeset patch # User Patrick Mezard # Date 1212831796 -7200 # Node ID 2cbe0f72c37900fc9045657a3f06c11445ec334d # Parent ab798a37b8461d314d9531d08198c54e194bea78# Parent 7f0dd352fb4dde3e37fbb9dde23f7c82128d91c5 Merge with crew-stable diff -r ab798a37b846 -r 2cbe0f72c379 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Tue Jun 03 21:20:52 2008 +0200 +++ b/mercurial/cmdutil.py Sat Jun 07 11:43:16 2008 +0200 @@ -276,17 +276,23 @@ similarity = float(opts.get('similarity') or 0) add, remove = [], [] mapping = {} + audit_path = util.path_auditor(repo.root) m = match(repo, pats, opts) for abs in repo.walk(m): target = repo.wjoin(abs) + good = True + try: + audit_path(abs) + except: + good = False rel = m.rel(abs) exact = m.exact(abs) - if abs not in repo.dirstate: + if good and abs not in repo.dirstate: add.append(abs) mapping[abs] = rel, m.exact(abs) if repo.ui.verbose or not exact: repo.ui.status(_('adding %s\n') % ((pats and rel) or abs)) - if repo.dirstate[abs] != 'r' and (not util.lexists(target) + if repo.dirstate[abs] != 'r' and (not good or not util.lexists(target) or (os.path.isdir(target) and not os.path.islink(target))): remove.append(abs) mapping[abs] = rel, exact diff -r ab798a37b846 -r 2cbe0f72c379 tests/test-symlink-addremove --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-symlink-addremove Sat Jun 07 11:43:16 2008 +0200 @@ -0,0 +1,15 @@ +#!/bin/sh + +"$TESTDIR/hghave" symlink || exit 80 + +hg init a +cd a + +echo '% directory moved and symlinked' +mkdir foo +touch foo/a +hg ci -Ama +mv foo bar +ln -s bar foo +echo '% now addremove should remove old files' +hg addremove diff -r ab798a37b846 -r 2cbe0f72c379 tests/test-symlink-addremove.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-symlink-addremove.out Sat Jun 07 11:43:16 2008 +0200 @@ -0,0 +1,6 @@ +% directory moved and symlinked +adding foo/a +% now addremove should remove old files +adding bar/a +adding foo +removing foo/a