mercurial/hgweb/protocol.py
changeset 6788 88a1bcc5c6a7
parent 6784 18c429ea3a0e
child 6795 c228ae4bc89c
equal deleted inserted replaced
6787:dbb00e91c327 6788:88a1bcc5c6a7
   122         for s in util.filechunkiter(req, limit=length):
   122         for s in util.filechunkiter(req, limit=length):
   123             # drain incoming bundle, else client will not see
   123             # drain incoming bundle, else client will not see
   124             # response when run outside cgi script
   124             # response when run outside cgi script
   125             pass
   125             pass
   126         req.respond(HTTP_OK, HGTYPE)
   126         req.respond(HTTP_OK, HGTYPE)
   127         yield errorfmt % 'unsynced changes'
   127         return errorfmt % 'unsynced changes',
   128         return
       
   129 
   128 
   130     req.respond(HTTP_OK, HGTYPE)
   129     req.respond(HTTP_OK, HGTYPE)
   131 
   130 
   132     # do not lock repo until all changegroup data is
   131     # do not lock repo until all changegroup data is
   133     # streamed. save to temporary file.
   132     # streamed. save to temporary file.
   141 
   140 
   142         try:
   141         try:
   143             lock = repo.lock()
   142             lock = repo.lock()
   144             try:
   143             try:
   145                 if not check_heads():
   144                 if not check_heads():
   146                     yield errorfmt % 'unsynced changes'
   145                     return errorfmt % 'unsynced changes',
   147                     return
       
   148 
   146 
   149                 fp.seek(0)
   147                 fp.seek(0)
   150                 header = fp.read(6)
   148                 header = fp.read(6)
   151                 if header.startswith('HG') and not header.startswith('HG10'):
   149                 if header.startswith('HG') and not header.startswith('HG10'):
   152                     raise ValueError('unknown bundle version')
   150                     raise ValueError('unknown bundle version')
   168                         sys.stdout.write("abort: %s\n" % inst)
   166                         sys.stdout.write("abort: %s\n" % inst)
   169                         ret = 0
   167                         ret = 0
   170                 finally:
   168                 finally:
   171                     val = sys.stdout.getvalue()
   169                     val = sys.stdout.getvalue()
   172                     sys.stdout, sys.stderr = oldio
   170                     sys.stdout, sys.stderr = oldio
   173                 yield '%d\n%s' % (ret, val)
   171                 return '%d\n%s' % (ret, val),
   174             finally:
   172             finally:
   175                 del lock
   173                 del lock
   176         except ValueError, inst:
   174         except ValueError, inst:
   177             yield errorfmt % inst
   175             return errorfmt % inst,
   178         except (OSError, IOError), inst:
   176         except (OSError, IOError), inst:
   179             filename = getattr(inst, 'filename', '')
   177             filename = getattr(inst, 'filename', '')
   180             # Don't send our filesystem layout to the client
   178             # Don't send our filesystem layout to the client
   181             if filename.startswith(repo.root):
   179             if filename.startswith(repo.root):
   182                 filename = filename[len(repo.root)+1:]
   180                 filename = filename[len(repo.root)+1:]
   186             if inst.errno == errno.ENOENT:
   184             if inst.errno == errno.ENOENT:
   187                 code = HTTP_NOT_FOUND
   185                 code = HTTP_NOT_FOUND
   188             else:
   186             else:
   189                 code = HTTP_SERVER_ERROR
   187                 code = HTTP_SERVER_ERROR
   190             req.respond(code)
   188             req.respond(code)
   191             yield '0\n%s: %s\n' % (error, filename)
   189             return '0\n%s: %s\n' % (error, filename),
   192     finally:
   190     finally:
   193         fp.close()
   191         fp.close()
   194         os.unlink(tempname)
   192         os.unlink(tempname)
   195 
   193 
   196 def stream_out(repo, req):
   194 def stream_out(repo, req):