def _get_repository_name_raw(self, plan, extra_data): if plan == 'personal': return extra_data['bitbucket_repo_name'] elif plan == 'team': return extra_data['bitbucket_team_repo_name'] else: raise InvalidPlanError(plan)
def _get_repository_owner_raw(self, plan, extra_data): if plan == 'personal': return self.account.username elif plan == 'team': return extra_data['bitbucket_team_name'] else: raise InvalidPlanError(plan)
def _find_repository_id(self, plan, owner, repo_name): """Finds the ID of a repository matching the given name and owner. If the repository could not be found, an appropriate error will be raised. """ # GitLab claims pagination support, but it has a number of problems. # We have no idea how many pages there are, or even if there's another # page of items. Furthermore, if we try to go beyond the last page, # we just get the first again, so we can't attempt to guess very # well. # # If the list doesn't return the repository, the user is out of luck. # # This is true as of GitLab 6.4.3. repositories = self._api_get_repositories() for repository_entry in repositories: namespace = repository_entry['namespace'] if (namespace['path'] == owner and repository_entry['path'] == repo_name): # This is the repository we wanted to find. return repository_entry['id'] if plan == 'personal': raise RepositoryError( ugettext('A repository with this name was not found, or your ' 'user may not own it.')) elif plan == 'group': raise RepositoryError( ugettext('A repository with this name was not found on this ' 'group, or your user may not have access to it.')) else: raise InvalidPlanError(plan)
def _get_repository_owner_raw(self, plan, extra_data): if plan in ('public', 'private'): return self.account.username elif plan in ('public-org', 'private-org'): return self.get_plan_field(plan, extra_data, 'name') else: raise InvalidPlanError(plan)
def _get_repository_name(self, plan, extra_data): """Return the name of the repository. Args: plan (unicode): The repository plan. extra_data (dict): The ``extra_data`` attribute of the corresponding :py:class:`reviewboard.scmtools.models.Repository`. Returns: unicode: The name of the plan. Raises: reviewboard.hostingsvcs.errors.InvalidPlanError: An invalid plan was given. """ if plan == 'personal': return extra_data['gitlab_personal_repo_name'] elif plan == 'group': return extra_data['gitlab_group_repo_name'] else: raise InvalidPlanError(plan)
def _get_repository_owner(self, plan, extra_data): """Return the owner of a repository. Args: plan (unicode): The plan name. This should be one of either ``'personal'`` or ``'group'``. extra_data (dict): The :py:attr:`~reviewboard.scmtools.models.Repository.extra_data` attribute. Returns: unicode: The owner of the repository. If this is a personal repository, the owner will be the user who has linked their account to GitLab. If this is a group repository, the owner will be the group name. Raises: reviewboard.hostingsvcs.errors.InvalidPlanError: Raised when the plan is not a valid choice. """ if plan == 'personal': return self.account.username elif plan == 'group': return extra_data['gitlab_group_name'] else: raise InvalidPlanError(plan)
def _get_repository_name(self, plan, extra_data): """Returns the name of the repository.""" if plan == 'personal': return extra_data['gitlab_personal_repo_name'] elif plan == 'group': return extra_data['gitlab_group_repo_name'] else: raise InvalidPlanError(plan)
def _get_repository_owner(self, plan, extra_data): """Returns the owner of a repository. If this is a personal repository, the owner will be the user who has linked their account to GitLab. if this is a group repository, the owner will be the group name. """ if plan == 'personal': return self.account.username elif plan == 'group': return extra_data['gitlab_group_name'] else: raise InvalidPlanError(plan)
def _find_repository_id_v3(self, plan, owner, repo_name): """Find the ID of a repository matching the given name and owner. If the repository could not be found, an appropriate error will be raised. Args: plan (unicode): The plan name. owner (unicode): The name of the owning group or user. repo_name (unicode): The name of the repository. Returns: int: The ID of the repository. Raises: reviewboard.scmtools.errors.AuthorizationError: There was an issue with the authorization credentials. reviewboard.scmtools.errors.RepositoryError: The repository could be found or accessed. urllib2.HTTPError: There was an error communicating with the server. """ # GitLab claims pagination support, but it has a number of problems. # We have no idea how many pages there are, or even if there's another # page of items. Furthermore, if we try to go beyond the last page, # we just get the first again, so we can't attempt to guess very # well. # # If the list doesn't return the repository, the user is out of luck. # # This is true as of GitLab 6.4.3. if plan == 'personal': repositories = self._api_get_repositories() for repository_entry in repositories: namespace = repository_entry['namespace'] if (namespace['path'] == owner and repository_entry['path'] == repo_name): # This is the repository we wanted to find. return repository_entry['id'] raise RepositoryError( ugettext('A repository with this name was not found, or your ' 'user may not own it.')) elif plan == 'group': groups = self._api_get_groups() for group_entry in groups: # If the full path is available, use that (to support nested # groups). Otherwise fall back on the group name. group_name = group_entry.get('full_path', group_entry['name']) if group_name == owner: group_id = group_entry['id'] group_data = self._api_get_group(group_id) repositories = group_data['projects'] for repository_entry in repositories: if repository_entry['name'] == repo_name: return repository_entry['id'] raise RepositoryError( ugettext('A repository with this name was not ' 'found on this group, or your user may ' 'not have access to it.')) raise RepositoryError( ugettext('A group with this name was not found, or your user ' 'may not have access to it.')) else: raise InvalidPlanError(plan)