2555: On a https Mercurial URL, a diff on a file that currently exists throws an error
- Fixed
- Review Board
| mail*****@gmai***** (Google Code) (Is this you? Claim this profile.) | |
| July 4, 2012 | |
| 2567 |
Configure reviewboard with a Mercurial https URL that works with the clone request. Change a file, create a diff using hg diff, upload. View the diff. (New files show up properly). The following error is thrown for any change on an existing file:
The file 'README' (rtip) could not be found in the repository
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.6.4.1-py2.7.egg/reviewboard/diffviewer/views.py", line 151, in view_diff
interdiffset, highlighting, True)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.6.4.1-py2.7.egg/reviewboard/diffviewer/diffutils.py", line 1072, in get_diff_files
large_data=True)
File "/usr/local/lib/python2.7/dist-packages/Djblets-0.6.16-py2.7.egg/djblets/util/misc.py", line 157, in cache_memoize
data = lookup_callable()
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.6.4.1-py2.7.egg/reviewboard/diffviewer/diffutils.py", line 1071, in <lambda>
enable_syntax_highlighting)),
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.6.4.1-py2.7.egg/reviewboard/diffviewer/diffutils.py", line 552, in get_chunks
old = get_original_file(filediff)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.6.4.1-py2.7.egg/reviewboard/diffviewer/diffutils.py", line 365, in get_original_file
large_data=True)[0]
File "/usr/local/lib/python2.7/dist-packages/Djblets-0.6.16-py2.7.egg/djblets/util/misc.py", line 157, in cache_memoize
data = lookup_callable()
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.6.4.1-py2.7.egg/reviewboard/diffviewer/diffutils.py", line 364, in <lambda>
data = cache_memoize(key, lambda: [fetch_file(file, revision)],
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.6.4.1-py2.7.egg/reviewboard/diffviewer/diffutils.py", line 343, in fetch_file
data = tool.get_file(file, revision)
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.6.4.1-py2.7.egg/reviewboard/scmtools/hg.py", line 35, in get_file
return self.client.cat_file(path, str(revision))
File "/usr/local/lib/python2.7/dist-packages/ReviewBoard-1.6.4.1-py2.7.egg/reviewboard/scmtools/hg.py", line 199, in cat_file
raise FileNotFoundError(path, rev)
FileNotFoundError: The file 'README' (rtip) could not be found in the repository
In hg.py, the offending function is:
class HgWebClient(SCMClient):
FULL_FILE_URL = '%(url)s/%(rawpath)s/%(revision)s/%(quoted_path)s'
def __init__(self, path, username, password):
super(HgWebClient, self).__init__(path, username=username,
password=password)
logging.debug('Initialized HgWebClient with url=%r, username=%r',
self.path, self.username)
def cat_file(self, path, rev="tip"):
if rev == HEAD or rev == UNKNOWN:
rev = "tip"
elif rev == PRE_CREATION:
rev = ""
for rawpath in ["raw-file", "raw"]:
try:
url = self.FULL_FILE_URL % {
'url': self.path.rstrip('/'),
'rawpath': rawpath,
'revision': rev,
'quoted_path': urllib_quote(path.lstrip('/')),
}
url = url.replace('https', 'http')
return self.get_file_http(url, path, rev)
except Exception:
# It failed. Error was logged and we may try again.
pass
raise FileNotFoundError(path, rev)
When fetching the file, the https was replaced with http, resulting in the error.
Logs: 2012-03-28 16:41:44,497 - DEBUG - Initialized HgWebClient with url=u'https://in.example.com/cgi-bin/hgwebdir.cgi/dev/gui', username=u'swami' 2012-03-28 16:41:44,498 - DEBUG - Initialized HgWebClient with url=u'https://in.example.com/cgi-bin/hgwebdir.cgi/dev/gui', username=u'swami' 2012-03-28 16:41:44,500 - DEBUG - Generating diff viewer page for filediff id 9 2012-03-28 16:41:44,502 - DEBUG - Begin: Generating diff file info for diffset id 9 2012-03-28 16:41:44,504 - DEBUG - Initialized HgWebClient with url=u'https://in.example.com/cgi-bin/hgwebdir.cgi/dev/gui', username=u'swami' 2012-03-28 16:41:44,505 - DEBUG - End: Generating diff file info for diffset id 9 2012-03-28 16:41:44,505 - DEBUG - Generating diff file info for diffset id 9 took 0.3049 seconds 2012-03-28 16:41:44,506 - DEBUG - Begin: Generating diff file info for diffset id 9, filediff 14 2012-03-28 16:41:44,506 - DEBUG - Initialized HgWebClient with url=u'https://in.example.com/cgi-bin/hgwebdir.cgi/dev/gui', username=u'swami' 2012-03-28 16:41:44,507 - INFO - Cache miss for key reviews.example.com:diff-sidebyside-hl-14. 2012-03-28 16:41:44,507 - DEBUG - Initialized HgWebClient with url=u'https://in.example.com/cgi-bin/hgwebdir.cgi/dev/gui', username=u'swami' 2012-03-28 16:41:44,508 - INFO - Cache miss for key reviews.nimblestorage.com:https%3A//in.example.com/cgi-bin/hgwebdir.cgi/dev/gui:README:UNKNOWN. 2012-03-28 16:41:44,508 - DEBUG - Begin: Fetching file 'README' rUNKNOWN from gui 2012-03-28 16:41:44,508 - INFO - Fetching file from http://in.example.com/cgi-bin/hgwebdir.cgi/dev/gui/raw-file/tip/README 2012-03-28 16:41:44,512 - ERROR - Unexpected error fetching file from http://in.example.com/cgi-bin/hgwebdir.cgi/dev/gui/raw-file/tip/README: <urlopen error [Errno 111] Connection refused> 2012-03-28 16:41:44,512 - INFO - Fetching file from http://in.example.com/cgi-bin/hgwebdir.cgi/dev/gui/raw/tip/README 2012-03-28 16:41:44,515 - ERROR - Unexpected error fetching file from http://in.example.com/cgi-bin/hgwebdir.cgi/dev/gui/raw/tip/README: <urlopen error [Errno 111] Connection refused>
This line commented out
url = url.replace('https', 'http')
is working so far for us
In which file? Which line number?
reviewboard/scmtools/hg.py:192 Had to find and fix this again after upgrading.
You may also need to remove the hg.pyc file to get it to read the changed file.