Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CLI: gitlab --help behaves different with and without a config default #2703

Open
ericfrederich opened this issue Oct 25, 2023 · 0 comments
Open

Comments

@ericfrederich
Copy link
Contributor

Description of the problem, including code/CLI snippet

If you have a ~/.python-gitlab.cfg but don't specify a default under the global section you get different --help output.

This setup is useful if you work with multiple GitLab instances and prefer to be explicit every time in invoke a command.

For example gitlab -g dev project ..., vs gitlab -g prod project ...

This is one of the causes of the test failures on #2702

Expected Behavior

--help should be independent of any GitLab instance.

Actual Behavior

With no default

# cat ~/.python-gitlab.cfg
[global]
ssl_verify = true
timeout = 60
per_page = 100

[dev]
url = https://dev.example.com
private_token = abcdefghijklmnop
api_version = 4

[prod]
url = https://prod.example.com
private_token = abcdefghijklmnop
api_version = 4
#
# gitlab --help
usage: gitlab [--version] [-v] [-d] [-c CONFIG_FILE] [-g GITLAB] [-o {json,legacy,yaml}] [-f FIELDS] [--server-url SERVER_URL] [--ssl-verify SSL_VERIFY] [--timeout TIMEOUT]
              [--api-version API_VERSION] [--per-page PER_PAGE] [--pagination PAGINATION] [--order-by ORDER_BY] [--user-agent USER_AGENT]
              [--private-token PRIVATE_TOKEN | --oauth-token OAUTH_TOKEN | --job-token JOB_TOKEN]

GitLab API Command Line Interface

options:
  --version             Display the version.
  -v, --verbose, --fancy
                        Verbose mode (legacy format only) [env var: GITLAB_VERBOSE]
  -d, --debug           Debug mode (display HTTP requests) [env var: GITLAB_DEBUG]
  -c CONFIG_FILE, --config-file CONFIG_FILE
                        Configuration file to use. Can be used multiple times. [env var: PYTHON_GITLAB_CFG]
  -g GITLAB, --gitlab GITLAB
                        Which configuration section should be used. If not defined, the default selection will be used.
  -o {json,legacy,yaml}, --output {json,legacy,yaml}
                        Output format (v4 only): json|legacy|yaml
  -f FIELDS, --fields FIELDS
                        Fields to display in the output (comma separated). Not used with legacy output
  --server-url SERVER_URL
                        GitLab server URL [env var: GITLAB_URL]
  --ssl-verify SSL_VERIFY
                        Whether SSL certificates should be validated. [env var: GITLAB_SSL_VERIFY]
  --timeout TIMEOUT     Timeout to use for requests to the GitLab server. [env var: GITLAB_TIMEOUT]
  --api-version API_VERSION
                        GitLab API version [env var: GITLAB_API_VERSION]
  --per-page PER_PAGE   Number of entries to return per page in the response. [env var: GITLAB_PER_PAGE]
  --pagination PAGINATION
                        Whether to use keyset or offset pagination [env var: GITLAB_PAGINATION]
  --order-by ORDER_BY   Set order_by globally [env var: GITLAB_ORDER_BY]
  --user-agent USER_AGENT
                        The user agent to send to GitLab with the HTTP request. [env var: GITLAB_USER_AGENT]
  --private-token PRIVATE_TOKEN
                        GitLab private access token [env var: GITLAB_PRIVATE_TOKEN]
  --oauth-token OAUTH_TOKEN
                        GitLab OAuth token [env var: GITLAB_OAUTH_TOKEN]
  --job-token JOB_TOKEN
                        GitLab CI job token [env var: CI_JOB_TOKEN]
#

With a default

# cat ~/.python-gitlab.cfg
[global]
ssl_verify = true
timeout = 60
per_page = 100
default = dev

[dev]
url = https://dev.example.com
private_token = abcdefghijklmnop
api_version = 4

[prod]
url = https://prod.example.com
private_token = abcdefghijklmnop
api_version = 4
#
# gitlab --help
usage: gitlab [-h] [--version] [-v] [-d] [-c CONFIG_FILE] [-g GITLAB] [-o {json,legacy,yaml}] [-f FIELDS] [--server-url SERVER_URL] [--ssl-verify SSL_VERIFY] [--timeout TIMEOUT]
              [--api-version API_VERSION] [--per-page PER_PAGE] [--pagination PAGINATION] [--order-by ORDER_BY] [--user-agent USER_AGENT]
              [--private-token PRIVATE_TOKEN | --oauth-token OAUTH_TOKEN | --job-token JOB_TOKEN]
  application
  application-appearance
  application-settings
  application-statistics
  audit-event
  broadcast-message
  bulk-import
  bulk-import-all-entity
  bulk-import-entity
  ci-lint
  current-user
  current-user-email
  current-user-gpg-key
  current-user-key
  current-user-status
  deploy-key
  deploy-token
  dockerfile
  event
  feature
  generic-package
  geo-node
  gitignore
  gitlabciyml
  group
  group-access-request
  group-access-token
  group-audit-event
  group-badge
  group-billable-member
  group-billable-member-membership
  group-board
  group-board-list
  group-cluster
  group-custom-attribute
  group-deploy-token
  group-descendant-group
  group-epic
  group-epic-award-emoji
  group-epic-discussion-note
  group-epic-issue
  group-epic-note
  group-epic-note-award-emoji
  group-epic-resource-label-event
  group-export
  group-hook
  group-import
  group-invitation
  group-issue
  group-issues-statistics
  group-iteration
  group-ldap-group-link
  group-label
  group-member
  group-member-all
  group-merge-request
  group-milestone
  group-notification-settings
  group-package
  group-project
  group-push-rules
  group-runner
  group-saml-group-link
  group-subgroup
  group-variable
  group-wiki
  hook
  issue
  issues-statistics
  key
  ldap-group
  license
  merge-request
  namespace
  notification-settings
  pages-domain
  personal-access-token
  project
  project-access-request
  project-access-token
  project-additional-statistics
  project-approval
  project-approval-rule
  project-artifact
  project-audit-event
  project-badge
  project-board
  project-board-list
  project-branch
  project-ci-lint
  project-cluster
  project-commit
  project-commit-comment
  project-commit-discussion
  project-commit-discussion-note
  project-commit-status
  project-custom-attribute
  project-deploy-token
  project-deployment
  project-deployment-merge-request
  project-environment
  project-event
  project-export
  project-file
  project-fork
  project-hook
  project-import
  project-integration
  project-invitation
  project-issue
  project-issue-award-emoji
  project-issue-discussion
  project-issue-discussion-note
  project-issue-link
  project-issue-note
  project-issue-note-award-emoji
  project-issue-resource-iteration-event
  project-issue-resource-label-event
  project-issue-resource-milestone-event
  project-issue-resource-state-event
  project-issue-resource-weight-event
  project-issues-statistics
  project-job
  project-key
  project-label
  project-member
  project-member-all
  project-merge-request
  project-merge-request-approval
  project-merge-request-approval-rule
  project-merge-request-approval-state
  project-merge-request-award-emoji
  project-merge-request-diff
  project-merge-request-discussion
  project-merge-request-discussion-note
  project-merge-request-note
  project-merge-request-note-award-emoji
  project-merge-request-pipeline
  project-merge-request-resource-label-event
  project-merge-request-resource-milestone-event
  project-merge-request-resource-state-event
  project-merge-train
  project-milestone
  project-note
  project-notification-settings
  project-package
  project-package-file
  project-pages-domain
  project-pipeline
  project-pipeline-bridge
  project-pipeline-job
  project-pipeline-schedule
  project-pipeline-schedule-pipeline
  project-pipeline-schedule-variable
  project-pipeline-test-report
  project-pipeline-test-report-summary
  project-pipeline-variable
  project-protected-branch
  project-protected-environment
  project-protected-tag
  project-push-rules
  project-registry-repository
  project-registry-tag
  project-release
  project-release-link
  project-remote-mirror
  project-resource-group
  project-resource-group-upcoming-job
  project-runner
  project-secure-file
  project-service
  project-snippet
  project-snippet-award-emoji
  project-snippet-discussion
  project-snippet-discussion-note
  project-snippet-note
  project-snippet-note-award-emoji
  project-storage
  project-tag
  project-trigger
  project-user
  project-variable
  project-wiki
  registry-repository
  runner
  runner-all
  runner-job
  shared-project
  snippet
  starred-project
  todo
  topic
  user
  user-activities
  user-custom-attribute
  user-email
  user-event
  user-gpg-key
  user-impersonation-token
  user-key
  user-membership
  user-personal-access-token
  user-project
  user-status
  variable
              ...

GitLab API Command Line Interface

options:
  -h, --help            show this help message and exit
  --version             Display the version.
  -v, --verbose, --fancy
                        Verbose mode (legacy format only) [env var: GITLAB_VERBOSE]
  -d, --debug           Debug mode (display HTTP requests) [env var: GITLAB_DEBUG]
  -c CONFIG_FILE, --config-file CONFIG_FILE
                        Configuration file to use. Can be used multiple times. [env var: PYTHON_GITLAB_CFG]
  -g GITLAB, --gitlab GITLAB
                        Which configuration section should be used. If not defined, the default selection will be used.
  -o {json,legacy,yaml}, --output {json,legacy,yaml}
                        Output format (v4 only): json|legacy|yaml
  -f FIELDS, --fields FIELDS
                        Fields to display in the output (comma separated). Not used with legacy output
  --server-url SERVER_URL
                        GitLab server URL [env var: GITLAB_URL]
  --ssl-verify SSL_VERIFY
                        Whether SSL certificates should be validated. [env var: GITLAB_SSL_VERIFY]
  --timeout TIMEOUT     Timeout to use for requests to the GitLab server. [env var: GITLAB_TIMEOUT]
  --api-version API_VERSION
                        GitLab API version [env var: GITLAB_API_VERSION]
  --per-page PER_PAGE   Number of entries to return per page in the response. [env var: GITLAB_PER_PAGE]
  --pagination PAGINATION
                        Whether to use keyset or offset pagination [env var: GITLAB_PAGINATION]
  --order-by ORDER_BY   Set order_by globally [env var: GITLAB_ORDER_BY]
  --user-agent USER_AGENT
                        The user agent to send to GitLab with the HTTP request. [env var: GITLAB_USER_AGENT]
  --private-token PRIVATE_TOKEN
                        GitLab private access token [env var: GITLAB_PRIVATE_TOKEN]
  --oauth-token OAUTH_TOKEN
                        GitLab OAuth token [env var: GITLAB_OAUTH_TOKEN]
  --job-token JOB_TOKEN
                        GitLab CI job token [env var: CI_JOB_TOKEN]

resource:
  application
  application-appearance
  application-settings
  application-statistics
  audit-event
  broadcast-message
  bulk-import
  bulk-import-all-entity
  bulk-import-entity
  ci-lint
  current-user
  current-user-email
  current-user-gpg-key
  current-user-key
  current-user-status
  deploy-key
  deploy-token
  dockerfile
  event
  feature
  generic-package
  geo-node
  gitignore
  gitlabciyml
  group
  group-access-request
  group-access-token
  group-audit-event
  group-badge
  group-billable-member
  group-billable-member-membership
  group-board
  group-board-list
  group-cluster
  group-custom-attribute
  group-deploy-token
  group-descendant-group
  group-epic
  group-epic-award-emoji
  group-epic-discussion-note
  group-epic-issue
  group-epic-note
  group-epic-note-award-emoji
  group-epic-resource-label-event
  group-export
  group-hook
  group-import
  group-invitation
  group-issue
  group-issues-statistics
  group-iteration
  group-ldap-group-link
  group-label
  group-member
  group-member-all
  group-merge-request
  group-milestone
  group-notification-settings
  group-package
  group-project
  group-push-rules
  group-runner
  group-saml-group-link
  group-subgroup
  group-variable
  group-wiki
  hook
  issue
  issues-statistics
  key
  ldap-group
  license
  merge-request
  namespace
  notification-settings
  pages-domain
  personal-access-token
  project
  project-access-request
  project-access-token
  project-additional-statistics
  project-approval
  project-approval-rule
  project-artifact
  project-audit-event
  project-badge
  project-board
  project-board-list
  project-branch
  project-ci-lint
  project-cluster
  project-commit
  project-commit-comment
  project-commit-discussion
  project-commit-discussion-note
  project-commit-status
  project-custom-attribute
  project-deploy-token
  project-deployment
  project-deployment-merge-request
  project-environment
  project-event
  project-export
  project-file
  project-fork
  project-hook
  project-import
  project-integration
  project-invitation
  project-issue
  project-issue-award-emoji
  project-issue-discussion
  project-issue-discussion-note
  project-issue-link
  project-issue-note
  project-issue-note-award-emoji
  project-issue-resource-iteration-event
  project-issue-resource-label-event
  project-issue-resource-milestone-event
  project-issue-resource-state-event
  project-issue-resource-weight-event
  project-issues-statistics
  project-job
  project-key
  project-label
  project-member
  project-member-all
  project-merge-request
  project-merge-request-approval
  project-merge-request-approval-rule
  project-merge-request-approval-state
  project-merge-request-award-emoji
  project-merge-request-diff
  project-merge-request-discussion
  project-merge-request-discussion-note
  project-merge-request-note
  project-merge-request-note-award-emoji
  project-merge-request-pipeline
  project-merge-request-resource-label-event
  project-merge-request-resource-milestone-event
  project-merge-request-resource-state-event
  project-merge-train
  project-milestone
  project-note
  project-notification-settings
  project-package
  project-package-file
  project-pages-domain
  project-pipeline
  project-pipeline-bridge
  project-pipeline-job
  project-pipeline-schedule
  project-pipeline-schedule-pipeline
  project-pipeline-schedule-variable
  project-pipeline-test-report
  project-pipeline-test-report-summary
  project-pipeline-variable
  project-protected-branch
  project-protected-environment
  project-protected-tag
  project-push-rules
  project-registry-repository
  project-registry-tag
  project-release
  project-release-link
  project-remote-mirror
  project-resource-group
  project-resource-group-upcoming-job
  project-runner
  project-secure-file
  project-service
  project-snippet
  project-snippet-award-emoji
  project-snippet-discussion
  project-snippet-discussion-note
  project-snippet-note
  project-snippet-note-award-emoji
  project-storage
  project-tag
  project-trigger
  project-user
  project-variable
  project-wiki
  registry-repository
  runner
  runner-all
  runner-job
  shared-project
  snippet
  starred-project
  todo
  topic
  user
  user-activities
  user-custom-attribute
  user-email
  user-event
  user-gpg-key
  user-impersonation-token
  user-key
  user-membership
  user-personal-access-token
  user-project
  user-status
  variable
                        The GitLab resource to manipulate.
#

Specifications

  • python-gitlab version: 3.15.0
  • API version you are using (v3/v4): N/A
  • Gitlab server version (or gitlab.com): N/A
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant