Error when updating ReviewBoard perforce repositories

5 views
Skip to first unread message

backh...@googlemail.com

unread,
Feb 6, 2026, 5:53:29 AM (3 days ago) Feb 6
to Review Board Community
Hi,

We're running version 4.0.11 of ReviewBoard and trying to change authentication config to our configured Perforce repositories.
We have some duplicated repo paths due to some recent changes to our environment and Perforce depots (port changes due to moving to SSL and DNS domain changes).

eg. two configured repositories in ReviewBoard.
name: perforce.domain1.com:1666
path: ssl:perforce.domain1.com:1667

name: ssl:perforce.domain1.com:1667
path: ssl:perforce.domain1.com:1667

I need to update the username and password for both these repos, and also enable ticket-based authentication.
But when I attempt to make any changes to the repos, I get the 'Something broke' message in the browser page, and the following error in the logs.

django.core.exceptions.ValidationError: {'path': ['A repository with this path already exists']}

This is strange, as I was obviously able to configure the repos in this way (duplicate paths) some time back - but now any change to the repos give me that same error.

The full Traceback from the Reviewboard logs are below - any advice on how we can update our repos to use new username/password and ticket based auth will be much appreciated.

Thanks


'RepositoryForm' has no field named 'path'.
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/django/forms/models.py", line 413, in _post_clean
    self.instance.full_clean(exclude=exclude, validate_unique=False)
  File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 1250, in full_clean
    raise ValidationError(errors)
django.core.exceptions.ValidationError: {'path': ['A repository with this path already exists']}

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 552, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 224, in inner
return view(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1512, in change_view
return self.changeform_view(request, object_id, form_url, extra_context)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 67, in _wrapper
return bound_func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 63, in bound_func
return func.__get__(self, type(self))(*args2, **kwargs2)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1409, in changeform_view
return self._changeform_view(request, object_id, form_url, extra_context)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1441, in _changeform_view
if form.is_valid():
File "/usr/local/lib/python3.6/site-packages/reviewboard/scmtools/forms.py", line 2078, in is_valid
return (super(RepositoryForm, self).is_valid() and
File "/usr/local/lib/python3.6/site-packages/django/forms/forms.py", line 183, in is_valid
return self.is_bound and not self.errors
File "/usr/local/lib/python3.6/site-packages/django/forms/forms.py", line 175, in errors
self.full_clean()
File "/usr/local/lib/python3.6/site-packages/reviewboard/scmtools/forms.py", line 1813, in full_clean
super(RepositoryForm, self).full_clean(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/reviewboard/site/mixins.py", line 289, in full_clean
return super(LocalSiteAwareModelFormMixin, self).full_clean()
File "/usr/local/lib/python3.6/site-packages/django/forms/forms.py", line 386, in full_clean
self._post_clean()
File "/usr/local/lib/python3.6/site-packages/django/forms/models.py", line 415, in _post_clean
self._update_errors(e)
File "/usr/local/lib/python3.6/site-packages/django/forms/models.py", line 389, in _update_errors
self.add_error(None, errors)
File "/usr/local/lib/python3.6/site-packages/django/forms/forms.py", line 352, in add_error
"'%s' has no field named '%s'." % (self.__class__.__name__, field))
ValueError: 'RepositoryForm' has no field named 'path'.
2026-01-23 14:30:30,626 - ERROR - None - admin - /admin/db/scmtools/repository/35/change/ - django.request - Internal Server Error: /admin/db/scmtools/repository/35/change/
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/forms/models.py", line 413, in _post_clean
self.instance.full_clean(exclude=exclude, validate_unique=False)
File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 1250, in full_clean
raise ValidationError(errors)
django.core.exceptions.ValidationError: {'path': ['A repository with this path already exists']}

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
response = self._get_response(request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 552, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/views/decorators/cache.py", line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 224, in inner
return view(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1512, in change_view
return self.changeform_view(request, object_id, form_url, extra_context)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 67, in _wrapper
return bound_func(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/django/utils/decorators.py", line 63, in bound_func
return func.__get__(self, type(self))(*args2, **kwargs2)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1409, in changeform_view
return self._changeform_view(request, object_id, form_url, extra_context)
File "/usr/local/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1441, in _changeform_view
if form.is_valid():
File "/usr/local/lib/python3.6/site-packages/reviewboard/scmtools/forms.py", line 2078, in is_valid
return (super(RepositoryForm, self).is_valid() and
File "/usr/local/lib/python3.6/site-packages/django/forms/forms.py", line 183, in is_valid
return self.is_bound and not self.errors
File "/usr/local/lib/python3.6/site-packages/django/forms/forms.py", line 175, in errors
self.full_clean()
File "/usr/local/lib/python3.6/site-packages/reviewboard/scmtools/forms.py", line 1813, in full_clean
super(RepositoryForm, self).full_clean(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/reviewboard/site/mixins.py", line 289, in full_clean
return super(LocalSiteAwareModelFormMixin, self).full_clean()
File "/usr/local/lib/python3.6/site-packages/django/forms/forms.py", line 386, in full_clean
self._post_clean()
File "/usr/local/lib/python3.6/site-packages/django/forms/models.py", line 415, in _post_clean
self._update_errors(e)
File "/usr/local/lib/python3.6/site-packages/django/forms/models.py", line 389, in _update_errors
self.add_error(None, errors)
File "/usr/local/lib/python3.6/site-packages/django/forms/forms.py", line 352, in add_error
"'%s' has no field named '%s'." % (self.__class__.__name__, field))
ValueError: 'RepositoryForm' has no field named 'path'.




Reply all
Reply to author
Forward
0 new messages