equal
deleted
inserted
replaced
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 |