def link(src, dest): try: util.oslink(src, dest) except OSError: # if hardlinks fail, fallback on copy shutil.copyfile(src, dest) os.chmod(dest, os.stat(src).st_mode)
def relinkfile(src, dst): bak = dst + '.bak' os.rename(dst, bak) try: util.oslink(src, dst) except OSError: os.rename(bak, dst) raise os.remove(bak)
def link(src, dest): try: util.oslink(src, dest) except OSError: # if hardlinks fail, fallback on atomic copy dst = util.atomictempfile(dest) for chunk in util.filechunkiter(open(src, 'rb')): dst.write(chunk) dst.close() os.chmod(dest, os.stat(src).st_mode)
def link(src, dest): """Try to create hardlink - if that fails, efficiently make a copy.""" util.makedirs(os.path.dirname(dest)) try: util.oslink(src, dest) except OSError: # if hardlinks fail, fallback on atomic copy with open(src, 'rb') as srcf, util.atomictempfile(dest) as dstf: for chunk in util.filechunkiter(srcf): dstf.write(chunk) os.chmod(dest, os.stat(src).st_mode)
def link(src, dest): """Try to create hardlink - if that fails, efficiently make a copy.""" util.makedirs(os.path.dirname(dest)) try: util.oslink(src, dest) except OSError: # if hardlinks fail, fallback on atomic copy dst = util.atomictempfile(dest) for chunk in util.filechunkiter(open(src, 'rb')): dst.write(chunk) dst.close() os.chmod(dest, os.stat(src).st_mode)
def has_hardlink(): from mercurial import util fh, fn = tempfile.mkstemp(dir='.', prefix=tempprefix) os.close(fh) name = tempfile.mktemp(dir='.', prefix=tempprefix) try: util.oslink(fn, name) os.unlink(name) return True except OSError: return False finally: os.unlink(fn)
ui.note(_('%d suboptimal nodes\n') % suboptimal) writerevs(ui, r1, r2, order, tr) report(ui, r1, r2) tr.close() except: # re-raises # Abort transaction first, so we truncate the files before # deleting them. tr.abort() for fn in (tmpindexfn, tmpdatafn): ignoremissing(os.unlink)(fn) raise if not opts.get('dry_run'): # racy, both files cannot be renamed atomically # copy files util.oslink(indexfn, oldindexfn) ignoremissing(util.oslink)(datafn, olddatafn) # rename util.rename(tmpindexfn, indexfn) try: os.chmod(tmpdatafn, os.stat(datafn).st_mode) util.rename(tmpdatafn, datafn) except OSError, inst: if inst.errno != errno.ENOENT: raise ignoremissing(os.unlink)(datafn) else: for fn in (tmpindexfn, tmpdatafn): ignoremissing(os.unlink)(fn) finally: