comparison mercurial/cmdutil.py @ 6651:7f0dd352fb4d

addremove: correctly handle intermediate symlinks This fixes problems mentioned in issue660 comments (unrelated to original issue) where directory was renamed, and symlink was added instead. In such situation addremove wasn't able to correctly detect that old files no longer here, but tried to add symlink (and failed due collision with old files).
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 07 May 2008 14:32:00 +0400
parents 30d3d531e11a
children 2cbe0f72c379
comparison
equal deleted inserted replaced
6649:05a682c8907d 6651:7f0dd352fb4d
272 dry_run = opts.get('dry_run') 272 dry_run = opts.get('dry_run')
273 if similarity is None: 273 if similarity is None:
274 similarity = float(opts.get('similarity') or 0) 274 similarity = float(opts.get('similarity') or 0)
275 add, remove = [], [] 275 add, remove = [], []
276 mapping = {} 276 mapping = {}
277 audit_path = util.path_auditor(repo.root)
277 for src, abs, rel, exact in walk(repo, pats, opts): 278 for src, abs, rel, exact in walk(repo, pats, opts):
278 target = repo.wjoin(abs) 279 target = repo.wjoin(abs)
279 if src == 'f' and abs not in repo.dirstate: 280 good = True
281 try:
282 audit_path(abs)
283 except:
284 good = False
285 if src == 'f' and good and abs not in repo.dirstate:
280 add.append(abs) 286 add.append(abs)
281 mapping[abs] = rel, exact 287 mapping[abs] = rel, exact
282 if repo.ui.verbose or not exact: 288 if repo.ui.verbose or not exact:
283 repo.ui.status(_('adding %s\n') % ((pats and rel) or abs)) 289 repo.ui.status(_('adding %s\n') % ((pats and rel) or abs))
284 if repo.dirstate[abs] != 'r' and (not util.lexists(target) 290 if repo.dirstate[abs] != 'r' and (not good or not util.lexists(target)
285 or (os.path.isdir(target) and not os.path.islink(target))): 291 or (os.path.isdir(target) and not os.path.islink(target))):
286 remove.append(abs) 292 remove.append(abs)
287 mapping[abs] = rel, exact 293 mapping[abs] = rel, exact
288 if repo.ui.verbose or not exact: 294 if repo.ui.verbose or not exact:
289 repo.ui.status(_('removing %s\n') % ((pats and rel) or abs)) 295 repo.ui.status(_('removing %s\n') % ((pats and rel) or abs))