codespeed icon indicating copy to clipboard operation
codespeed copied to clipboard

Commit IDs are compared with startswith?

Open Timmmm opened this issue 5 years ago • 0 comments

I made some test data with a few commit IDs like: 1, 11, 111. If you click on the graph node for 1 you get this error:

Environment:

Request Method: GET
Request URL: http://sw02:8005/changes/?rev=483ef73342&exe=1&env=1

Django Version: 1.11.15
Python Version: 3.5.2
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.admin',
 'django.contrib.staticfiles',
 'codespeed')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')

Traceback:

File "/home/timh/.local/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/timh/.local/lib/python3.5/site-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/home/me/.local/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/me/.local/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/me/.local/lib/python3.5/site-packages/django/views/decorators/http.py" in inner
  40.             return func(request, *args, **kwargs)

File "/home/me/workspace/codespeed/source/codespeed-0.12.0/codespeed/views.py" in changes
  654.                 commitid__startswith=commitid, branch=branch

File "/home/me/.local/lib/python3.5/site-packages/django/db/models/manager.py" in manager_method
  85.                 return getattr(self.get_queryset(), name)(*args, **kwargs)

File "/home/me/.local/lib/python3.5/site-packages/django/db/models/query.py" in get
  384.             (self.model._meta.object_name, num)

Exception Type: MultipleObjectsReturned at /changes/
Exception Value: get() returned more than one Revision -- it returned 3!

It looks like commit IDs are compared with startswith??? I guess that will coincidentally work in most cases but I can't see how that is correct.

Timmmm avatar Aug 09 '18 17:08 Timmmm