mercurial/hgweb/protocol.py
changeset 6155 ea161d648117
parent 6154 ef1c5a3b653d
child 6211 f89fd07fc51d
equal deleted inserted replaced
6154:ef1c5a3b653d 6155:ea161d648117
   121     # require ssl by default, auth info cannot be sniffed and
   121     # require ssl by default, auth info cannot be sniffed and
   122     # replayed
   122     # replayed
   123     ssl_req = web.configbool('web', 'push_ssl', True)
   123     ssl_req = web.configbool('web', 'push_ssl', True)
   124     if ssl_req:
   124     if ssl_req:
   125         if req.env.get('wsgi.url_scheme') != 'https':
   125         if req.env.get('wsgi.url_scheme') != 'https':
   126             bail(_('ssl required\n'))
   126             bail('ssl required\n')
   127             return
   127             return
   128         proto = 'https'
   128         proto = 'https'
   129     else:
   129     else:
   130         proto = 'http'
   130         proto = 'http'
   131 
   131 
   132     # do not allow push unless explicitly allowed
   132     # do not allow push unless explicitly allowed
   133     if not web.check_perm(req, 'push', False):
   133     if not web.check_perm(req, 'push', False):
   134         bail(_('push not authorized\n'),
   134         bail('push not authorized\n',
   135              headers={'status': '401 Unauthorized'})
   135              headers={'status': '401 Unauthorized'})
   136         return
   136         return
   137 
   137 
   138     their_heads = req.form['heads'][0].split(' ')
   138     their_heads = req.form['heads'][0].split(' ')
   139 
   139 
   141         heads = map(hex, web.repo.heads())
   141         heads = map(hex, web.repo.heads())
   142         return their_heads == [hex('force')] or their_heads == heads
   142         return their_heads == [hex('force')] or their_heads == heads
   143 
   143 
   144     # fail early if possible
   144     # fail early if possible
   145     if not check_heads():
   145     if not check_heads():
   146         bail(_('unsynced changes\n'))
   146         bail('unsynced changes\n')
   147         return
   147         return
   148 
   148 
   149     req.respond(HTTP_OK, HGTYPE)
   149     req.respond(HTTP_OK, HGTYPE)
   150 
   150 
   151     # do not lock repo until all changegroup data is
   151     # do not lock repo until all changegroup data is
   161         try:
   161         try:
   162             lock = web.repo.lock()
   162             lock = web.repo.lock()
   163             try:
   163             try:
   164                 if not check_heads():
   164                 if not check_heads():
   165                     req.write('0\n')
   165                     req.write('0\n')
   166                     req.write(_('unsynced changes\n'))
   166                     req.write('unsynced changes\n')
   167                     return
   167                     return
   168 
   168 
   169                 fp.seek(0)
   169                 fp.seek(0)
   170                 header = fp.read(6)
   170                 header = fp.read(6)
   171                 if header.startswith('HG') and not header.startswith('HG10'):
   171                 if header.startswith('HG') and not header.startswith('HG10'):