Mercurial > kallithea
comparison kallithea/model/db.py @ 6619:865c1f65244c
repositories: make sure repositories not only differ in casing
Repositories only differing in case cause problems:
* it can't be stored on case insensitive filesystems (Windows and MacOS)
* some databases can't easily handle case sensitive queries
* users will most certainly be confused by names that only differ in case
We will keep trying to be case sensitive on systems that can ... but on some
systems wrong casings might work. We don't care.
The validators are changed to prevent mixed case repo and repo group names.
Repository sensitivity tests are removed, and insensitivity tests are added
instead.
author | domruf <dominikruf@gmail.com> |
---|---|
date | Thu, 23 Mar 2017 23:49:19 +0100 |
parents | f58ed40c9a72 |
children | b60fb9461b18 |
comparison
equal
deleted
inserted
replaced
6618:cc1b5e0e01e8 | 6619:865c1f65244c |
---|---|
1119 @classmethod | 1119 @classmethod |
1120 def guess_instance(cls, value): | 1120 def guess_instance(cls, value): |
1121 return super(Repository, cls).guess_instance(value, Repository.get_by_repo_name) | 1121 return super(Repository, cls).guess_instance(value, Repository.get_by_repo_name) |
1122 | 1122 |
1123 @classmethod | 1123 @classmethod |
1124 def get_by_repo_name(cls, repo_name): | 1124 def get_by_repo_name(cls, repo_name, case_insensitive=False): |
1125 q = Session().query(cls).filter(cls.repo_name == repo_name) | 1125 """Get the repo, defaulting to database case sensitivity. |
1126 case_insensitive will be slower and should only be specified if necessary.""" | |
1127 if case_insensitive: | |
1128 q = Session().query(cls).filter(func.lower(cls.repo_name) == func.lower(repo_name)) | |
1129 else: | |
1130 q = Session().query(cls).filter(cls.repo_name == repo_name) | |
1126 q = q.options(joinedload(Repository.fork)) \ | 1131 q = q.options(joinedload(Repository.fork)) \ |
1127 .options(joinedload(Repository.owner)) \ | 1132 .options(joinedload(Repository.owner)) \ |
1128 .options(joinedload(Repository.group)) | 1133 .options(joinedload(Repository.group)) |
1129 return q.scalar() | 1134 return q.scalar() |
1130 | 1135 |