Issue #252: 500 error when repository is removed via commandline
Reported by: | Karl Goetz |
State: | resolved |
Created on: | 2016-11-12 01:12 |
Updated on: | 2018-05-13 19:47 |
Description
Hi, I just moved a repository from the kallithea repositories directory (website below) then ran Remap and Rescan with "Delete records of missing repositories" and "Invalidate cache for all repositories" ticked. I was expecting the repository to be deleted from Kallithea but I caused a 500 error instead:
Error - <class 'kallithea.lib.vcs.exceptions.VCSError'>: Given path /srv/kallithea/repositories/website is not a directory URL: http://192.168.1.17:5000/_admin/settings/mapping File '/srv/kallithea/environment/local/lib/python2.7/site-packages/weberror/errormiddleware.py', line 171 in __call__ app_iter = self.application(environ, sr_checker) File '/srv/kallithea/kallithea/kallithea/lib/middleware/sessionmiddleware.py', line 62 in __call__ return self.wrap_app(environ, session_start_response) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/routes/middleware.py', line 131 in __call__ response = self.app(environ, start_response) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/wsgiapp.py', line 103 in __call__ response = self.dispatch(controller, environ, start_response) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/wsgiapp.py', line 313 in dispatch return controller(environ, start_response) File '/srv/kallithea/kallithea/kallithea/lib/base.py', line 446 in __call__ return WSGIController.__call__(self, environ, start_response) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 214 in __call__ response = self._dispatch_call() File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 164 in _dispatch_call response = self._inspect_call(func) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 107 in _inspect_call result = self._perform_call(func, args) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 57 in _perform_call return func(**args) File '<decorator-gen-164>', line 2 in settings_mapping File '/srv/kallithea/kallithea/kallithea/lib/auth.py', line 857 in __wrapper return func(*fargs, **fkwargs) File '/srv/kallithea/kallithea/kallithea/controllers/admin/settings.py', line 209 in settings_mapping ScmModel().mark_for_invalidation(repo.repo_name, delete=True) File '/srv/kallithea/kallithea/kallithea/model/scm.py', line 343 in mark_for_invalidation repo.update_changeset_cache() File '/srv/kallithea/kallithea/kallithea/model/db.py', line 1343 in update_changeset_cache scm_repo = self.scm_instance_no_cache() File '/srv/kallithea/kallithea/kallithea/model/db.py', line 1434 in scm_instance_no_cache return self.__get_instance() File '/srv/kallithea/kallithea/kallithea/model/db.py', line 1461 in __get_instance alias = get_scm(safe_str(repo_full_path))[0] File '/srv/kallithea/kallithea/kallithea/lib/vcs/utils/helpers.py', line 35 in get_scm raise VCSError("Given path %s is not a directory" % path) VCSError: Given path /srv/kallithea/repositories/website is not a directory
On the fronted this generates the following error
500 Internal Server Error The server encountered an unexpected condition which prevented it from fulfilling the request.
Attachments
Comments
Comment by Mads Kiilerich, on 2016-11-13 13:33
Kallithea is made for managing repositories through the web interface and by pushing/pulling - not so much by manipulating the repositories directly.
From the description, it sounds like you not have run "Remap and Rescan" with "Delete records of missing repositories" after touching repositories manually.
Comment by Karl Goetz, on 2016-11-13 22:53
I was confident I'd used the boxes suggested but decided to double check.
root@kallithea-combined:~# cd - /srv/kallithea/repositories root@kallithea-combined:/srv/kallithea/repositories# mkdir test-git-repo root@kallithea-combined:/srv/kallithea/repositories# cd test-git-repo/ root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# git init Initialized empty Git repository in /srv/kallithea/repositories/test-git-repo/.git/ root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# touch test file root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# git add . root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# git commit -av root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# ls -lh total 0 -rw-r--r-- 1 root root 0 Nov 14 09:45 file -rw-r--r-- 1 root root 0 Nov 14 09:45 test root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# git status On branch master nothing to commit, working directory clean root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# # Kallithea side; http://192.168.1.17:5000/_admin/settings/mapping root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# # delete + invalidate root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# # repo found and added http://192.168.1.17:5000/test-git-repo root@kallithea-combined:/srv/kallithea/repositories/test-git-repo# cd ../ root@kallithea-combined:/srv/kallithea/repositories# mv test-git-repo/ /tmp/ root@kallithea-combined:/srv/kallithea/repositories# # http://192.168.1.17:5000/test-git-repo now 404 root@kallithea-combined:/srv/kallithea/repositories# # Kallithea side; http://192.168.1.17:5000/_admin/settings/mapping running with delete + invalidate root@kallithea-combined:/srv/kallithea/repositories# # causes 500 Internal Server Error root@kallithea-combined:/srv/kallithea/repositories# mv /tmp/test-git-repo/ . root@kallithea-combined:/srv/kallithea/repositories# # Kallithea side; http://192.168.1.17:5000/_admin/settings/mapping running with delete + invalidate root@kallithea-combined:/srv/kallithea/repositories# # succeeds, nothing added nothing removed
The 500 error generated above is this
Error - <class 'kallithea.lib.vcs.exceptions.VCSError'>: Given path /srv/kallithea/repositories/test-git-repo is not a directory URL: http://192.168.1.17:5000/_admin/settings/mapping File '/srv/kallithea/environment/local/lib/python2.7/site-packages/weberror/errormiddleware.py', line 171 in __call__ app_iter = self.application(environ, sr_checker) File '/srv/kallithea/kallithea/kallithea/lib/middleware/sessionmiddleware.py', line 62 in __call__ return self.wrap_app(environ, session_start_response) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/routes/middleware.py', line 131 in __call__ response = self.app(environ, start_response) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/wsgiapp.py', line 103 in __call__ response = self.dispatch(controller, environ, start_response) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/wsgiapp.py', line 313 in dispatch return controller(environ, start_response) File '/srv/kallithea/kallithea/kallithea/lib/base.py', line 446 in __call__ return WSGIController.__call__(self, environ, start_response) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 214 in __call__ response = self._dispatch_call() File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 164 in _dispatch_call response = self._inspect_call(func) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 107 in _inspect_call result = self._perform_call(func, args) File '/srv/kallithea/environment/local/lib/python2.7/site-packages/pylons/controllers/core.py', line 57 in _perform_call return func(**args) File '<decorator-gen-130>', line 2 in settings_mapping File '/srv/kallithea/kallithea/kallithea/lib/auth.py', line 857 in __wrapper return func(*fargs, **fkwargs) File '/srv/kallithea/kallithea/kallithea/controllers/admin/settings.py', line 209 in settings_mapping ScmModel().mark_for_invalidation(repo.repo_name, delete=True) File '/srv/kallithea/kallithea/kallithea/model/scm.py', line 343 in mark_for_invalidation repo.update_changeset_cache() File '/srv/kallithea/kallithea/kallithea/model/db.py', line 1343 in update_changeset_cache scm_repo = self.scm_instance_no_cache() File '/srv/kallithea/kallithea/kallithea/model/db.py', line 1434 in scm_instance_no_cache return self.__get_instance() File '/srv/kallithea/kallithea/kallithea/model/db.py', line 1461 in __get_instance alias = get_scm(safe_str(repo_full_path))[0] File '/srv/kallithea/kallithea/kallithea/lib/vcs/utils/helpers.py', line 35 in get_scm raise VCSError("Given path %s is not a directory" % path) VCSError: Given path /srv/kallithea/repositories/test-git-repo is not a directory CGI Variables ------------- CONTENT_TYPE: 'application/x-www-form-urlencoded; charset="utf-8"' HTTP_ACCEPT: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' HTTP_ACCEPT_ENCODING: 'gzip, deflate' HTTP_ACCEPT_LANGUAGE: 'en-au' HTTP_CONNECTION: 'keep-alive' HTTP_COOKIE: 'kallithea=text here' HTTP_HOST: '192.168.1.17:5000' HTTP_ORIGIN: 'http://192.168.1.17:5000' HTTP_REFERER: 'http://192.168.1.17:5000/_admin/settings/mapping' HTTP_UPGRADE_INSECURE_REQUESTS: '1' HTTP_USER_AGENT: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14' PATH_INFO: '/_admin/settings/mapping' REMOTE_ADDR: '192.168.1.20' REQUEST_METHOD: 'POST' SERVER_NAME: 'kallithea-combined.local' SERVER_PORT: '5000' SERVER_PROTOCOL: 'HTTP/1.1' SERVER_SOFTWARE: 'waitress' WSGI Variables -------------- application: <kallithea.lib.middleware.sessionmiddleware.SecureSessionMiddleware object at 0x7fe23ada6cd0> beaker.get_session: <bound method SecureSessionMiddleware._get_session of <kallithea.lib.middleware.sessionmiddleware.SecureSessionMiddleware object at 0x7fe23ada6cd0>> beaker.session: {'_authentication_token': '192504495499346145735179491237683762683', 'authuser': {'is_authenticated': True, 'is_external_auth': False, 'user_id': 2}, '_accessed_time': 1479077287.458033, '_creation_time': 1479077179.789569} paste.registry: <paste.registry.Registry object at 0x7fe2228de850> paste.throw_errors: True pylons.action_method: <bound method SettingsController.settings_mapping of <kallithea.controllers.admin.settings.SettingsController object at 0x7fe2228dec90>> pylons.controller: <kallithea.controllers.admin.settings.SettingsController object at 0x7fe2228dec90> pylons.environ_config: {'session': 'beaker.session', 'cache': 'beaker.cache'} pylons.log_debug: True pylons.pylons: <pylons.util.PylonsContext object at 0x7fe2228de290> pylons.routes_dict: {'action': u'settings_mapping', 'controller': u'admin/settings'} routes.route: <routes.route.Route object at 0x7fe23b4a5890> routes.url: <routes.util.URLGenerator object at 0x7fe2228deb50> webob._body_file: (<LimitedLengthFile(<cStringIO.StringI object at 0x7fe2239fbe00>, maxlen=117)>, <cStringIO.StringI object at 0x7fe2239fbe00>) webob._parsed_post_vars: (MultiDict([('_authentication_token', '192504495499346145735179491237683762683'), ('destroy', 'True'), ('invalidate', 'True'), ('rescan', 'Rescan Repositories')]), <FakeCGIBody at 0x7fe2228de890 viewing MultiDict([('_a...s')])>) webob._parsed_query_vars: (GET([]), '') webob.adhoc_attrs: {'errors': 'ignore'} webob.is_body_readable: True webob.is_body_seekable: False wsgi process: 'Multithreaded' wsgi.file_wrapper: <class 'waitress.buffers.ReadOnlyFileBasedBuffer'> wsgiorg.routing_args: (<routes.util.URLGenerator object at 0x7fe2228deb50>, {'action': u'settings_mapping', 'controller': u'admin/settings'}) ------------------------------------------------------------
Comment by Karl Goetz, on 2016-11-13 22:57
A 500 error also occurs when the repositories directory is entirely missing, also in kallithea.lib.vcs.exceptions.VCSError with the same 'raise VCSError("Given path %s is not a directory" % path)' error.
Comment by Mads Kiilerich, on 2016-11-15 22:25
It seems like there is a bug with selecting delete and invalidate at the same time. Can you confirm that it works if you don't select invalidate?
(There is usually no need for running invalidate - only if you have pushed to Kallithea's repositories outside Kallithea.)
Comment by Karl Goetz, on 2016-11-16 06:13
I can confirm that it works if I do select delete and don't select invalidate. Remap and rescan returns
Repositories successfully rescanned. Added: -. Removed: test-git-repo.
Comment by Thomas De Schampheleire, on 2018-05-13 19:47
Issue was solved a long time ago, commit 05437d03bc9e