def putlfile(repo, proto, sha): '''Server command for putting a largefile into a repository's local store and into the user cache.''' proto.redirect() path = lfutil.storepath(repo, sha) util.makedirs(os.path.dirname(path)) tmpfp = util.atomictempfile(path, createmode=repo.store.createmode) try: proto.getfile(tmpfp) tmpfp._fp.seek(0) if sha != lfutil.hexsha1(tmpfp._fp): raise IOError(0, _('largefile contents do not match hash')) tmpfp.close() lfutil.linktousercache(repo, sha) except IOError as e: repo.ui.warn( _('largefiles: failed to put %s into store: %s\n') % (sha, e.strerror)) return wireproto.pushres(1) finally: tmpfp.discard() return wireproto.pushres(0)
def putlfile(repo, proto, sha): '''Put a largefile into a repository's local store and into the user cache.''' proto.redirect() path = lfutil.storepath(repo, sha) util.makedirs(os.path.dirname(path)) tmpfp = util.atomictempfile(path, createmode=repo.store.createmode) try: try: proto.getfile(tmpfp) tmpfp._fp.seek(0) if sha != lfutil.hexsha1(tmpfp._fp): raise IOError(0, _('largefile contents do not match hash')) tmpfp.close() lfutil.linktousercache(repo, sha) except IOError, e: repo.ui.warn(_('largefiles: failed to put %s into store: %s\n') % (sha, e.strerror)) return wireproto.pushres(1) finally: tmpfp.discard() return wireproto.pushres(0)
def putbfile(repo, proto, sha): """putbfile puts a bfile into a repository's local cache and into the system cache.""" f = None proto.redirect() try: try: f = tempfile.NamedTemporaryFile(mode='wb+', prefix='hg-putbfile-') proto.getfile(f) f.seek(0) if sha != bfutil.hexsha1(f): return wireproto.pushres(1) bfutil.copytocacheabsolute(repo, f.name, sha) except IOError: repo.ui.warn( _('error: could not put received data into bfile store')) return wireproto.pushres(1) finally: if f: f.close() return wireproto.pushres(0)
def putlfile(repo, proto, sha): '''Put a largefile into a repository's local store and into the user cache.''' proto.redirect() fd, tmpname = lfutil.mkstemp(repo, prefix='hg-putlfile') tmpfp = os.fdopen(fd, 'wb+') try: try: proto.getfile(tmpfp) tmpfp.seek(0) if sha != lfutil.hexsha1(tmpfp): return wireproto.pushres(1) tmpfp.close() lfutil.copytostoreabsolute(repo, tmpname, sha) except IOError, e: repo.ui.warn(_('largefiles: failed to put %s (%s) into store: %s') % (sha, tmpname, e.strerror)) return wireproto.pushres(1) finally: tmpfp.close() os.unlink(tmpname) return wireproto.pushres(0)
def srv_pushobsmarkers(repo, proto): """wireprotocol command""" fp = StringIO() proto.redirect() proto.getfile(fp) data = fp.getvalue() fp.close() lock = repo.lock() try: tr = repo.transaction('pushkey: obsolete markers') try: repo.obsstore.mergemarkers(tr, data) tr.close() finally: tr.release() finally: lock.release() return wireproto.pushres(0)
def srv_pushobsmarkers(repo, proto): """That receives a stream of markers and apply then to the repo""" fp = StringIO() proto.redirect() proto.getfile(fp) data = fp.getvalue() fp.close() lock = repo.lock() try: tr = repo.transaction('pushkey: obsolete markers') try: repo.obsstore.mergemarkers(tr, data) tr.close() finally: tr.release() finally: lock.release() repo.hook('evolve_pushobsmarkers') return wireproto.pushres(0)
def srv_notifypushend(repo, proto): """wire protocol command to notify a push is done""" proto.redirect() repo.hook('notifypushend') return wireproto.pushres(0)