Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/cmdutil.py @ 16283:6c4dbe28dda3 stable
rename: handle case-changing (issue1717)
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 23 Mar 2012 11:47:27 -0500 |
parents | 60101427d618 |
children | a740fa28d718 |
comparison
equal
deleted
inserted
replaced
16282:50247a7a9983 | 16283:6c4dbe28dda3 |
---|---|
283 repo.pathto(prevsrc, cwd))) | 283 repo.pathto(prevsrc, cwd))) |
284 return | 284 return |
285 | 285 |
286 # check for overwrites | 286 # check for overwrites |
287 exists = os.path.lexists(target) | 287 exists = os.path.lexists(target) |
288 samefile = False | |
289 if exists and abssrc != abstarget: | |
290 if (repo.dirstate.normalize(abssrc) == | |
291 repo.dirstate.normalize(abstarget)): | |
292 if not rename: | |
293 ui.warn(_("%s: can't copy - same file\n") % reltarget) | |
294 return | |
295 exists = False | |
296 samefile = True | |
297 | |
288 if not after and exists or after and state in 'mn': | 298 if not after and exists or after and state in 'mn': |
289 if not opts['force']: | 299 if not opts['force']: |
290 ui.warn(_('%s: not overwriting - file exists\n') % | 300 ui.warn(_('%s: not overwriting - file exists\n') % |
291 reltarget) | 301 reltarget) |
292 return | 302 return |
305 if exists: | 315 if exists: |
306 os.unlink(target) | 316 os.unlink(target) |
307 targetdir = os.path.dirname(target) or '.' | 317 targetdir = os.path.dirname(target) or '.' |
308 if not os.path.isdir(targetdir): | 318 if not os.path.isdir(targetdir): |
309 os.makedirs(targetdir) | 319 os.makedirs(targetdir) |
310 util.copyfile(src, target) | 320 if samefile: |
321 tmp = target + "~hgrename" | |
322 os.rename(src, tmp) | |
323 os.rename(tmp, target) | |
324 else: | |
325 util.copyfile(src, target) | |
311 srcexists = True | 326 srcexists = True |
312 except IOError, inst: | 327 except IOError, inst: |
313 if inst.errno == errno.ENOENT: | 328 if inst.errno == errno.ENOENT: |
314 ui.warn(_('%s: deleted in working copy\n') % relsrc) | 329 ui.warn(_('%s: deleted in working copy\n') % relsrc) |
315 srcexists = False | 330 srcexists = False |
328 | 343 |
329 # fix up dirstate | 344 # fix up dirstate |
330 scmutil.dirstatecopy(ui, repo, wctx, abssrc, abstarget, | 345 scmutil.dirstatecopy(ui, repo, wctx, abssrc, abstarget, |
331 dryrun=dryrun, cwd=cwd) | 346 dryrun=dryrun, cwd=cwd) |
332 if rename and not dryrun: | 347 if rename and not dryrun: |
333 if not after and srcexists: | 348 if not after and srcexists and not samefile: |
334 util.unlinkpath(repo.wjoin(abssrc)) | 349 util.unlinkpath(repo.wjoin(abssrc)) |
335 wctx.forget([abssrc]) | 350 wctx.forget([abssrc]) |
336 | 351 |
337 # pat: ossep | 352 # pat: ossep |
338 # dest ossep | 353 # dest ossep |