{"record":{"id":"abde2edae7b3f90e","repo":"infiniflow/ragflow","slug":"invalid-connector-settings-no-valid-repository-na","errorCode":null,"errorMessage":"Invalid connector settings: No valid repository names provided.","messagePattern":"Invalid connector settings: No valid repository names provided\\.","errorType":"validation","errorClass":"ConnectorValidationError","httpStatus":null,"severity":"error","filePath":"common/data_source/github/connector.py","lineNumber":682,"sourceCode":"        end: SecondsSinceUnixEpoch,\n        checkpoint: GithubConnectorCheckpoint,\n    ) -> CheckpointOutput[GithubConnectorCheckpoint]:\n        return self._load_from_checkpoint(start, end, checkpoint, include_permissions=True)\n\n    def validate_connector_settings(self) -> None:\n        if self.github_client is None:\n            raise ConnectorMissingCredentialError(\"GitHub credentials not loaded.\")\n\n        if not self.repo_owner:\n            raise ConnectorValidationError(\"Invalid connector settings: 'repo_owner' must be provided.\")\n\n        try:\n            if self.repositories:\n                if \",\" in self.repositories:\n                    # Multiple repositories specified\n                    repo_names = [name.strip() for name in self.repositories.split(\",\")]\n                    if not repo_names:\n                        raise ConnectorValidationError(\"Invalid connector settings: No valid repository names provided.\")\n\n                    # Validate at least one repository exists and is accessible\n                    valid_repos = False\n                    validation_errors = []\n\n                    for repo_name in repo_names:\n                        if not repo_name:\n                            continue\n\n                        try:\n                            test_repo = self.github_client.get_repo(f\"{self.repo_owner}/{repo_name}\")\n                            logging.info(f\"Successfully accessed repository: {self.repo_owner}/{repo_name}\")\n                            test_repo.get_contents(\"\")\n                            valid_repos = True\n                            # If at least one repo is valid, we can proceed\n                            break\n                        except GithubException as e:\n                            validation_errors.append(f\"Repository '{repo_name}': {e.data.get('message', str(e))}\")","sourceCodeStart":664,"sourceCodeEnd":700,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/common/data_source/github/connector.py#L664-L700","documentation":"ConnectorValidationError raised in the multi-repository branch: when the 'repositories' setting contains a comma, it is split and stripped into repo_names, and if that list is empty the connector refuses to continue. In practice this is only reachable when repositories is a string of commas/whitespace (e.g. ', ,'), because a comma must be present for this branch to run.","triggerScenarios":"repositories set to something like ',' or ' , ' — contains a comma but yields no non-empty names after split().strip(), so repo_names is empty.","commonSituations":"User pastes a trailing comma or accidental comma-only value into the repositories field; automated config generation emitting ', ' placeholders.","solutions":["Set repositories to real names, e.g. 'repo-a,repo-b', or remove the setting to index the whole org.","Filter/sanitize the input in the form layer: reject values with no valid names before save.","For a single repo, use the bare name without commas so the single-repo branch runs."],"exampleFix":"// before\nconnector.repositories = \", ,\"\n\n// after\nconnector.repositories = \"frontend,backend\"","handlingStrategy":"validation","validationCode":"names = [n.strip() for n in repositories.split(',') if n.strip()]\nif ',' in repositories and not names:\n    raise ValueError('repositories must contain at least one real name')","typeGuard":null,"tryCatchPattern":"try:\n    connector.validate_connector_settings()\nexcept ConnectorValidationError as e:\n    return 400, str(e)","preventionTips":["Strip and filter comma-separated input in the UI before save.","Reject placeholder values like ',' early with a clear message."],"tags":["github","configuration","validation","repositories"],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}