{
    "content": [
        {
            "type": "text",
            "text": "# salsa (man)\n\n## NAME\n\nsalsa - tool to manipulate salsa projects, repositories and group members\n\n## SYNOPSIS\n\n# salsa <command> <parameters> <options>\nsalsa adduser developer foobar --group-id 2665\nsalsa deleteuser foobar --group js-team\nsalsa searchgroups perl-team/modules\nsalsa searchprojects qa/qa\nsalsa searchusers yadd\nsalsa updateuser maintainer foobar --group js-team\nsalsa whoami\nsalsa checkout node-mongodb --group js-team\nsalsa fork salsa fork --group js-team user/node-foo\nsalsa lastcistatus js-team/nodejs\nsalsa pipelines js-team/nodejs\nsalsa mr debian/foo debian/master\nsalsa pushrepo . --group js-team --kgb --irc devscripts --tagpending\nsalsa updateprojects node-mongodb --group js-team --disable-kgb --desc \\\n--desc-pattern \"Package %p\"\nsalsa updatesafe --all --desc --desc-pattern \"Debian package %p\" \\\n--group js-team\n\n## DESCRIPTION\n\nsalsa is designed to create and configure projects and repositories on\n<https://salsa.debian.org> as well as to manage group members.\n\n## Sections\n\n- **NAME**\n- **SYNOPSIS**\n- **DESCRIPTION**\n- **COMMANDS** (20 subsections)\n- **OPTIONS** (66 subsections)\n- **SEE ALSO** (1 subsections)\n- **AUTHOR**\n- **COPYRIGHT AND LICENSE**\n\nUse structuredContent.sections for detailed options, examples, and full documentation.\n"
        }
    ],
    "structuredContent": {
        "command": "salsa",
        "section": "",
        "mode": "man",
        "summary": "salsa - tool to manipulate salsa projects, repositories and group members",
        "synopsis": "# salsa <command> <parameters> <options>\nsalsa adduser developer foobar --group-id 2665\nsalsa deleteuser foobar --group js-team\nsalsa searchgroups perl-team/modules\nsalsa searchprojects qa/qa\nsalsa searchusers yadd\nsalsa updateuser maintainer foobar --group js-team\nsalsa whoami\nsalsa checkout node-mongodb --group js-team\nsalsa fork salsa fork --group js-team user/node-foo\nsalsa lastcistatus js-team/nodejs\nsalsa pipelines js-team/nodejs\nsalsa mr debian/foo debian/master\nsalsa pushrepo . --group js-team --kgb --irc devscripts --tagpending\nsalsa updateprojects node-mongodb --group js-team --disable-kgb --desc \\\n--desc-pattern \"Package %p\"\nsalsa updatesafe --all --desc --desc-pattern \"Debian package %p\" \\\n--group js-team",
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [
            {
                "flag": "",
                "long": "--cache-file",
                "arg": null,
                "description": "File to store cached values. An empty value disables cache. Default: \"~/.cache/salsa.json\". \".devscripts\" value: SALSACACHEFILE"
            },
            {
                "flag": "",
                "long": "--no-cache",
                "arg": null,
                "description": "Disable cache usage. Same as --cache-file '' --conf-file or --conffile Add or replace default configuration files. This can only be used as the first option given on the command-line. Default: \"/etc/devscripts.conf\" and \"~/.devscripts\". replace: salsa --conf-file test.conf <command>... salsa --conf-file test.conf --conf-file test2.conf <command>... add: salsa --conf-file +test.conf <command>... salsa --conf-file +test.conf --conf-file +test2.conf <command>... If one --conf-file has no \"+\", default configuration files are ignored. --no-conf or --noconf Don't read any configuration files. This can only be used as the first option given on the command-line."
            },
            {
                "flag": "",
                "long": "--debug",
                "arg": null,
                "description": "Enable debugging output."
            },
            {
                "flag": "",
                "long": "--group",
                "arg": null,
                "description": "Team to use. Use \"salsa searchgroups name\" to find it. If you want to use a subgroup, you have to set its full path: salsa --group perl-team/modules/packages checkprojects lemonldap-ng \".devscripts\" value: SALSAGROUP Be careful when you use SALSAGROUP in your \".devscripts\" file. Every salsa command will be executed in group space, for example if you want to propose a little change in a project using salsa fork + salsa mergerequest, this \"fork\" will be done in group space unless you set a --user/--user-id. Prefer to use an alias in your \".bashrc\" file. Example: alias jsteamadmin=\"salsa --group js-team\" or alias jsteamadmin=\"salsa --conf-file ~/.js.conf or to use both .devscripts and .js.conf: alias jsteamadmin=\"salsa --conf-file +~/.js.conf then you can fix SALSAGROUP in \"~/.js.conf\" To enable bash completion for your alias, add this in your .bashrc file: completionloader salsa complete -F salsacompletion jsteamadmin"
            },
            {
                "flag": "",
                "long": "--group-id",
                "arg": null,
                "description": "Group ID to use. Use \"salsa searchgroups name\" to find it. \".devscripts\" value: SALSAGROUPID Be careful when you use SALSAGROUPID in your \".devscripts\" file. Every salsa command will be executed in group space, for example if you want to propose a little change in a project using salsa fork + salsa mergerequest, this \"fork\" will be done in group space unless you set a --user/--user-id. Prefer to use an alias in your \".bashrc\" file. Example: alias jsteamadmin=\"salsa --group-id 2666\" or alias jsteamadmin=\"salsa --conf-file ~/.js.conf then you can fix SALSAGROUPID in \"~/.js.conf\"."
            },
            {
                "flag": "",
                "long": "--help",
                "arg": null,
                "description": "Displays this manpage. --info or -i Prompt before sensible changes. \".devscripts\" value: SALSAINFO (yes/no)"
            },
            {
                "flag": "",
                "long": "--path",
                "arg": null,
                "description": "Repository path. Default to group or user path. \".devscripts\" value: SALSAREPOPATH"
            },
            {
                "flag": "",
                "long": "--token",
                "arg": null,
                "description": "Token value (see above)."
            },
            {
                "flag": "",
                "long": "--token-file",
                "arg": null,
                "description": "File to find token (see above)."
            },
            {
                "flag": "",
                "long": "--user",
                "arg": null,
                "description": "Username to use. If neither --group, --group-id, --user or --user-id is set, salsa uses current user ID (corresponding to salsa private token)."
            },
            {
                "flag": "",
                "long": "--user-id",
                "arg": null,
                "description": "User ID to use. Use \"salsa searchusers name\" to find one. If neither --group, --group-id, --user or --user-id is set, salsa uses current user ID (corresponding to salsa private token). \".devscripts\" value: SALSAUSERID"
            },
            {
                "flag": "",
                "long": "--verbose",
                "arg": null,
                "description": "Enable verbose output."
            },
            {
                "flag": "",
                "long": "--yes",
                "arg": null,
                "description": "Never ask for consent. \".devscripts\" value: SALSAYES (yes/no)"
            },
            {
                "flag": "",
                "long": "--build-timeout",
                "arg": null,
                "description": "The maximum amount of time, in seconds, that a job can run. Default: 3600 (60 minutes). salsa updatesafe myrepo --build-timeout 3600 \".devscripts\" value: SALSABUILDTIMEOUT"
            },
            {
                "flag": "",
                "long": "--avatar-path",
                "arg": null,
                "description": "Path to an image for the project's avatar. If path value contains \"%p\", it is replaced by project name. \".devscripts\" value: SALSAAVATARPATH"
            },
            {
                "flag": "",
                "long": "--ci-config-path",
                "arg": null,
                "description": "Configure configuration file path of GitLab CI. Default: empty. Example: salsa updatesafe --ci-config-path recipes/debian.yml@salsa-ci-team/pipeline debian/devscripts \".devscripts\" value: SALSACICONFIGPATH --desc, --no-desc Configure a project's description using pattern given in desc-pattern. \".devscripts\" value: SALSADESC (yes/no)"
            },
            {
                "flag": "",
                "long": "--desc-pattern",
                "arg": null,
                "description": "Project's description pattern. \"%p\" is replaced by project's name, while \"%P\" is replaced by project's name given in command (may contains full path). Default: \"Debian package %p\". \".devscripts\" value: SALSADESCPATTERN --email, --no-email, --disable-email Enable, ignore or disable email-on-push. \".devscripts\" value: SALSAEMAIL (yes/ignore/no, default: ignore)"
            },
            {
                "flag": "",
                "long": "--email-recipient",
                "arg": null,
                "description": "Email-on-push recipient. Can be multi valued: $ salsa updatesafe myrepo \\ --email-recipient foo@foobar.org \\ --email-recipient bar@foobar.org If recipient value contains \"%p\", it is replaced by project name. \".devscripts\" value: SALSAEMAILRECIPIENTS (use spaces to separate multiples recipients)"
            },
            {
                "flag": "",
                "long": "--analytics",
                "arg": null,
                "description": "Set analytics feature with permissions. \".devscripts\" value: SALSAENABLEANALYTICS (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--auto-devops",
                "arg": null,
                "description": "Set auto devops feature. \".devscripts\" value: SALSAENABLEAUTODEVOPS (yes/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--container",
                "arg": null,
                "description": "Set container feature with permissions. \".devscripts\" value: SALSAENABLECONTAINER (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--environments",
                "arg": null,
                "description": "Set environments feature with permissions. \".devscripts\" value: SALSAENABLEENVIRONMENTS (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--feature-flags",
                "arg": null,
                "description": "Set feature flags feature with permissions. \".devscripts\" value: SALSAENABLEFEATUREFLAGS (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--forks",
                "arg": null,
                "description": "Set forking a project feature with permissions. \".devscripts\" value: SALSAENABLEFORKS (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--infrastructure",
                "arg": null,
                "description": "Set infrastructure feature with permissions. \".devscripts\" value: SALSAENABLEINFRASTRUCTURE (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--issues",
                "arg": null,
                "description": "Set issues feature with permissions. \".devscripts\" value: SALSAENABLEISSUES (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--jobs",
                "arg": null,
                "description": "Set jobs feature with permissions. \".devscripts\" value: SALSAENABLEJOBS (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--lfs",
                "arg": null,
                "description": "Set Large File Storage (LFS) feature. \".devscripts\" value: SALSAENABLELFS (yes/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--mr",
                "arg": null,
                "description": "Set merge requests feature with permissions. \".devscripts\" value: SALSAENABLEMR (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--monitor",
                "arg": null,
                "description": "Set monitor feature with permissions. \".devscripts\" value: SALSAENABLEMONITOR (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--packages",
                "arg": null,
                "description": "Set packages feature. \".devscripts\" value: SALSAENABLEPACKAGES (yes/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--pages",
                "arg": null,
                "description": "Set pages feature with permissions. \".devscripts\" value: SALSAENABLEPAGES (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--releases",
                "arg": null,
                "description": "Set releases feature with permissions. \".devscripts\" value: SALSAENABLERELEASES (yes/private/no, default: yes) --enable-remove-source-branch, --disable-remove-source-branch Enable or disable deleting source branch option by default for all new merge requests. \".devscripts\" value: SALSAREMOVESOURCEBRANCH (yes/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--repo",
                "arg": null,
                "description": "Set the project's repository feature with permissions. \".devscripts\" value: SALSAENABLEREPO (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--request-access",
                "arg": null,
                "description": "Allow users to request member access. \".devscripts\" value: SALSAREQUESTACCESS (yes/no)"
            },
            {
                "flag": "",
                "long": "--requirements",
                "arg": null,
                "description": "Set requirements feature with permissions. \".devscripts\" value: SALSAENABLEREQUIREMENTS (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--security-compliance",
                "arg": null,
                "description": "Enable or disabled Security and Compliance feature. \".devscripts\" value: SALSAENABLESECURITYCOMPLIANCE (yes/no)"
            },
            {
                "flag": "",
                "long": "--service-desk",
                "arg": null,
                "description": "Allow service desk feature. \".devscripts\" value: SALSAENABLESERVICEDESK (yes/no)"
            },
            {
                "flag": "",
                "long": "--snippets",
                "arg": null,
                "description": "Set snippets feature with permissions. \".devscripts\" value: SALSAENABLESNIPPETS (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--wiki",
                "arg": null,
                "description": "Set wiki feature with permissions. \".devscripts\" value: SALSAENABLEWIKI (yes/private/no, default: yes)"
            },
            {
                "flag": "",
                "long": "--irc-channel",
                "arg": null,
                "description": "IRC channel for KGB or Irker. Can be used more than one time only with --irker. Important: channel must not include the first \"#\". If salsa finds a channel starting with \"#\", it will consider that the channel starts with 2 \"#\"! \".devscript\" value: SALSAIRCCHANNEL Multiple values must be space separated. Since configuration files are read using sh, be careful when using \"#\": you must enclose the channel with quotes, else sh will consider it as a comment and will ignore this value. --irker, --no-irker, --disable-irker Enable, ignore or disable Irker service. \".devscripts\" value: SALSAIRKER (yes/ignore/no, default: ignore)"
            },
            {
                "flag": "",
                "long": "--irker-host",
                "arg": null,
                "description": "Irker host. Default: ruprecht.snow-crash.org. \".devscripts\" value: SALSAIRKERHOST"
            },
            {
                "flag": "",
                "long": "--irker-port",
                "arg": null,
                "description": "Irker port. Default: empty (default value). \".devscripts\" value: SALSAIRKERPORT --kgb, --no-kgb, --disable-kgb Enable, ignore or disable KGB webhook. \".devscripts\" value: SALSAKGB (yes/ignore/no, default: ignore)"
            },
            {
                "flag": "",
                "long": "--kgb-options",
                "arg": null,
                "description": "List of KGB enabled options (comma separated). Default: issuesevents, mergerequestsevents, noteevents, pipelineevents, pushevents, tagpushevents, wikipageevents, enablesslverification $ salsa updatesafe debian/devscripts --kgb --irc-channel devscripts \\ --kgb-options 'mergerequestsevents,issuesevents,enablesslverification' List of available options: confidentialcommentsevents, confidentialissuesevents, confidentialnoteevents, enablesslverification, issuesevents, jobevents, mergerequestsevents, noteevents, pipelineevents, tagpushevents, wikipageevents \".devscripts\" value: SALSAKGBOPTIONS"
            },
            {
                "flag": "",
                "long": "--no-fail",
                "arg": null,
                "description": "Don't stop on error when using updateprojects with --all or --all-archived when set to yes. \".devscripts\" value: SALSANOFAIL (yes/no, default: no) --rename-head, --no-rename-head Rename HEAD branch given by --source-branch into --dest-branch and change \"default branch\" of project. Works only with updateprojects. \".devscripts\" value: SALSARENAMEHEAD (yes/no) --source-branch Default: \"master\". \".devscripts\" value: SALSASOURCEBRANCH --dest-branch Default: \"debian/master\". \".devscripts\" value: SALSADESTBRANCH --tagpending, --no-tagpending, --disable-tagpending Enable, ignore or disable \"tagpending\" webhook. \".devscripts\" value: SALSATAGPENDING (yes/ignore/no, default: ignore)"
            },
            {
                "flag": "",
                "long": "--schedule-desc",
                "arg": null,
                "description": "Description of the pipeline schedule."
            },
            {
                "flag": "",
                "long": "--schedule-ref",
                "arg": null,
                "description": "Branch or tag name that is triggered."
            },
            {
                "flag": "",
                "long": "--schedule-cron",
                "arg": null,
                "description": "Cron schedule. Example: 0 1 * * *."
            },
            {
                "flag": "",
                "long": "--schedule-tz",
                "arg": null,
                "description": "Time zone to run cron schedule. Default: UTC. --schedule-enable, --schedule-disable Enable/disable the pipeline schedule to run. Default: disabled."
            },
            {
                "flag": "",
                "long": "--schedule-run",
                "arg": null,
                "description": "Trigger --schedule-desc scheduled pipeline to run immediately. Default: false."
            },
            {
                "flag": "",
                "long": "--schedule-delete",
                "arg": null,
                "description": "Delete --schedule-desc pipeline schedule."
            },
            {
                "flag": "",
                "long": "--mr-title",
                "arg": null,
                "description": "Title for merge request. Default: last commit title."
            },
            {
                "flag": "",
                "long": "--mr-desc",
                "arg": null,
                "description": "Description of new MR. Default: empty if --mr-title is set last commit description if any --mr-dst-branch (or second command line argument) Destination branch. Default: \"master\". --mr-dst-project (or first command line argument) Destination project. Default: project from which the current project was forked; or, if not found, \"upstream\" value found using git remote --verbose show; or using source project. If --mr-dst-project is set to same, salsa will use source project as destination."
            },
            {
                "flag": "",
                "long": "--mr-src-branch",
                "arg": null,
                "description": "Source branch. Default: current branch."
            },
            {
                "flag": "",
                "long": "--mr-src-project",
                "arg": null,
                "description": "Source project. Default: current project found using git remote --verbose show. --mr-allow-squash, --no-mr-allow-squash Allow upstream project to squash your commits, this is the default. \".devscripts\" value: SALSAMRALLOWSQUASH (yes/no) --mr-remove-source-branch, --no-mr-remove-source-branch Remove source branch if merge request is accepted. Default: no. \".devscripts\" value: SALSAMRREMOVESOURCEBRANCH (yes/no)"
            },
            {
                "flag": "",
                "long": "--api-url",
                "arg": null,
                "description": "GitLab API. Default: <https://salsa.debian.org/api/v4>. \".devscripts\" value: SALSAAPIURL"
            },
            {
                "flag": "",
                "long": "--git-server-url",
                "arg": null,
                "description": "Default: \"git@salsa.debian.org:\". \".devscripts\" value: SALSAGITSERVERURL"
            },
            {
                "flag": "",
                "long": "--irker-server-url",
                "arg": null,
                "description": "Default: \"ircs://irc.oftc.net:6697/\". \".devscripts\" value: SALSAIRKERSERVERURL"
            },
            {
                "flag": "",
                "long": "--kgb-server-url",
                "arg": null,
                "description": "Default: <https://kgb.debian.net/webhook/?channel=>. \".devscripts\" value: SALSAKGBSERVERURL"
            },
            {
                "flag": "",
                "long": "--tagpending-server-url",
                "arg": null,
                "description": "Default: <https://webhook.salsa.debian.org/tagpending/>. \".devscripts\" value: SALSATAGPENDINGSERVERURL Configuration file example Example to use salsa with <https://gitlab.ow2.org> (group \"lemonldap-ng\"): SALSATOKEN=`cat ~/.ow2-gitlab-token` SALSAAPIURL=https://gitlab.ow2.org/api/v4 SALSAGITSERVERURL=git@gitlab.ow2.org: SALSAGROUPID=34 Then to use it, add something like this in your \".bashrc\" file: alias llngadmin='salsa --conffile ~/.salsa-ow2.conf'"
            }
        ],
        "examples": [],
        "see_also": [],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "SYNOPSIS",
                "lines": 19,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 26,
                "subsections": []
            },
            {
                "name": "COMMANDS",
                "lines": 1,
                "subsections": [
                    {
                        "name": "Managing users and groups",
                        "lines": 1
                    },
                    {
                        "name": "add_user",
                        "lines": 15
                    },
                    {
                        "name": "join",
                        "lines": 6
                    },
                    {
                        "name": "list_groups",
                        "lines": 8
                    },
                    {
                        "name": "search_groups",
                        "lines": 6
                    },
                    {
                        "name": "search_users",
                        "lines": 4
                    },
                    {
                        "name": "update_user",
                        "lines": 8
                    },
                    {
                        "name": "whoami",
                        "lines": 4
                    },
                    {
                        "name": "Managing projects",
                        "lines": 38
                    },
                    {
                        "name": "fork",
                        "lines": 16
                    },
                    {
                        "name": "forks",
                        "lines": 7
                    },
                    {
                        "name": "push",
                        "lines": 21
                    },
                    {
                        "name": "last_ci_status",
                        "lines": 64
                    },
                    {
                        "name": "protect_branch",
                        "lines": 16
                    },
                    {
                        "name": "protected_branches",
                        "lines": 4
                    },
                    {
                        "name": "push_repo",
                        "lines": 14
                    },
                    {
                        "name": "rename_branch",
                        "lines": 23
                    },
                    {
                        "name": "update_safe",
                        "lines": 7
                    },
                    {
                        "name": "Other",
                        "lines": 1
                    },
                    {
                        "name": "purge_cache",
                        "lines": 2
                    }
                ]
            },
            {
                "name": "OPTIONS",
                "lines": 1,
                "subsections": [
                    {
                        "name": "General options",
                        "lines": 5
                    },
                    {
                        "name": "--cache-file",
                        "lines": 5,
                        "long": "--cache-file"
                    },
                    {
                        "name": "--no-cache",
                        "lines": 20,
                        "long": "--no-cache"
                    },
                    {
                        "name": "--debug",
                        "lines": 2,
                        "long": "--debug"
                    },
                    {
                        "name": "--group",
                        "lines": 31,
                        "long": "--group"
                    },
                    {
                        "name": "--group-id",
                        "lines": 18,
                        "long": "--group-id"
                    },
                    {
                        "name": "--help",
                        "lines": 7,
                        "long": "--help"
                    },
                    {
                        "name": "--path",
                        "lines": 4,
                        "long": "--path"
                    },
                    {
                        "name": "--token",
                        "lines": 2,
                        "long": "--token"
                    },
                    {
                        "name": "--token-file",
                        "lines": 2,
                        "long": "--token-file"
                    },
                    {
                        "name": "--user",
                        "lines": 3,
                        "long": "--user"
                    },
                    {
                        "name": "--user-id",
                        "lines": 6,
                        "long": "--user-id"
                    },
                    {
                        "name": "--verbose",
                        "lines": 2,
                        "long": "--verbose"
                    },
                    {
                        "name": "--yes",
                        "lines": 4,
                        "long": "--yes"
                    },
                    {
                        "name": "List/search project options",
                        "lines": 7
                    },
                    {
                        "name": "Update/create project options",
                        "lines": 24
                    },
                    {
                        "name": "--build-timeout",
                        "lines": 6,
                        "long": "--build-timeout"
                    },
                    {
                        "name": "--avatar-path",
                        "lines": 5,
                        "long": "--avatar-path"
                    },
                    {
                        "name": "--ci-config-path",
                        "lines": 11,
                        "long": "--ci-config-path"
                    },
                    {
                        "name": "--desc-pattern",
                        "lines": 11,
                        "long": "--desc-pattern"
                    },
                    {
                        "name": "--email-recipient",
                        "lines": 10,
                        "long": "--email-recipient"
                    },
                    {
                        "name": "--analytics",
                        "lines": 4,
                        "long": "--analytics"
                    },
                    {
                        "name": "--auto-devops",
                        "lines": 4,
                        "long": "--auto-devops"
                    },
                    {
                        "name": "--container",
                        "lines": 4,
                        "long": "--container"
                    },
                    {
                        "name": "--environments",
                        "lines": 4,
                        "long": "--environments"
                    },
                    {
                        "name": "--feature-flags",
                        "lines": 4,
                        "long": "--feature-flags"
                    },
                    {
                        "name": "--forks",
                        "lines": 4,
                        "long": "--forks"
                    },
                    {
                        "name": "--infrastructure",
                        "lines": 4,
                        "long": "--infrastructure"
                    },
                    {
                        "name": "--issues",
                        "lines": 4,
                        "long": "--issues"
                    },
                    {
                        "name": "--jobs",
                        "lines": 4,
                        "long": "--jobs"
                    },
                    {
                        "name": "--lfs",
                        "lines": 4,
                        "long": "--lfs"
                    },
                    {
                        "name": "--mr",
                        "lines": 4,
                        "long": "--mr"
                    },
                    {
                        "name": "--monitor",
                        "lines": 4,
                        "long": "--monitor"
                    },
                    {
                        "name": "--packages",
                        "lines": 4,
                        "long": "--packages"
                    },
                    {
                        "name": "--pages",
                        "lines": 4,
                        "long": "--pages"
                    },
                    {
                        "name": "--releases",
                        "lines": 9,
                        "long": "--releases"
                    },
                    {
                        "name": "--repo",
                        "lines": 4,
                        "long": "--repo"
                    },
                    {
                        "name": "--request-access",
                        "lines": 4,
                        "long": "--request-access"
                    },
                    {
                        "name": "--requirements",
                        "lines": 4,
                        "long": "--requirements"
                    },
                    {
                        "name": "--security-compliance",
                        "lines": 4,
                        "long": "--security-compliance"
                    },
                    {
                        "name": "--service-desk",
                        "lines": 4,
                        "long": "--service-desk"
                    },
                    {
                        "name": "--snippets",
                        "lines": 4,
                        "long": "--snippets"
                    },
                    {
                        "name": "--wiki",
                        "lines": 4,
                        "long": "--wiki"
                    },
                    {
                        "name": "--irc-channel",
                        "lines": 18,
                        "long": "--irc-channel"
                    },
                    {
                        "name": "--irker-host",
                        "lines": 4,
                        "long": "--irker-host"
                    },
                    {
                        "name": "--irker-port",
                        "lines": 9,
                        "long": "--irker-port"
                    },
                    {
                        "name": "--kgb-options",
                        "lines": 13,
                        "long": "--kgb-options"
                    },
                    {
                        "name": "--no-fail",
                        "lines": 26,
                        "long": "--no-fail"
                    },
                    {
                        "name": "Pipeline schedules",
                        "lines": 1
                    },
                    {
                        "name": "--schedule-desc",
                        "lines": 2,
                        "long": "--schedule-desc"
                    },
                    {
                        "name": "--schedule-ref",
                        "lines": 2,
                        "long": "--schedule-ref"
                    },
                    {
                        "name": "--schedule-cron",
                        "lines": 4,
                        "long": "--schedule-cron"
                    },
                    {
                        "name": "--schedule-tz",
                        "lines": 5,
                        "long": "--schedule-tz"
                    },
                    {
                        "name": "--schedule-run",
                        "lines": 2,
                        "long": "--schedule-run"
                    },
                    {
                        "name": "--schedule-delete",
                        "lines": 2,
                        "long": "--schedule-delete"
                    },
                    {
                        "name": "Merge requests options",
                        "lines": 1
                    },
                    {
                        "name": "--mr-title",
                        "lines": 2,
                        "long": "--mr-title"
                    },
                    {
                        "name": "--mr-desc",
                        "lines": 14,
                        "long": "--mr-desc"
                    },
                    {
                        "name": "--mr-src-branch",
                        "lines": 2,
                        "long": "--mr-src-branch"
                    },
                    {
                        "name": "--mr-src-project",
                        "lines": 12,
                        "long": "--mr-src-project"
                    },
                    {
                        "name": "Options to manage other GitLab instances",
                        "lines": 1
                    },
                    {
                        "name": "--api-url",
                        "lines": 4,
                        "long": "--api-url"
                    },
                    {
                        "name": "--git-server-url",
                        "lines": 4,
                        "long": "--git-server-url"
                    },
                    {
                        "name": "--irker-server-url",
                        "lines": 4,
                        "long": "--irker-server-url"
                    },
                    {
                        "name": "--kgb-server-url",
                        "lines": 4,
                        "long": "--kgb-server-url"
                    },
                    {
                        "name": "--tagpending-server-url",
                        "lines": 17,
                        "long": "--tagpending-server-url"
                    }
                ]
            },
            {
                "name": "SEE ALSO",
                "lines": 1,
                "subsections": [
                    {
                        "name": "dpt-salsa",
                        "lines": 1
                    }
                ]
            },
            {
                "name": "AUTHOR",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "COPYRIGHT AND LICENSE",
                "lines": 17,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "salsa - tool to manipulate salsa projects, repositories and group members\n",
                "subsections": []
            },
            "SYNOPSIS": {
                "content": "# salsa <command> <parameters> <options>\nsalsa adduser developer foobar --group-id 2665\nsalsa deleteuser foobar --group js-team\nsalsa searchgroups perl-team/modules\nsalsa searchprojects qa/qa\nsalsa searchusers yadd\nsalsa updateuser maintainer foobar --group js-team\nsalsa whoami\nsalsa checkout node-mongodb --group js-team\nsalsa fork salsa fork --group js-team user/node-foo\nsalsa lastcistatus js-team/nodejs\nsalsa pipelines js-team/nodejs\nsalsa mr debian/foo debian/master\nsalsa pushrepo . --group js-team --kgb --irc devscripts --tagpending\nsalsa updateprojects node-mongodb --group js-team --disable-kgb --desc \\\n--desc-pattern \"Package %p\"\nsalsa updatesafe --all --desc --desc-pattern \"Debian package %p\" \\\n--group js-team\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "salsa is designed to create and configure projects and repositories on\n<https://salsa.debian.org> as well as to manage group members.\n\nA Salsa token is required, except for search* commands, and must be set in command line (see\nbelow), or in your configuration file (~/.devscripts):\n\nSALSATOKEN=abcdefghi\n\nor\n\nSALSATOKEN=`cat ~/.token`\n\nor\n\nSALSATOKENFILE=~/.dpt.conf\n\nIf you choose to link another file using SALSATOKENFILE, it must contain a line with one of\n(no differences):\n\n<anything>SALSAPRIVATETOKEN=xxxx\n<anything>SALSATOKEN=xxxx\n\nThis allows for example to use dpt(1) configuration file (~/.dpt.conf) which contains:\n\nDPTSALSAPRIVATETOKEN=abcdefghi\n",
                "subsections": []
            },
            "COMMANDS": {
                "content": "",
                "subsections": [
                    {
                        "name": "Managing users and groups",
                        "content": ""
                    },
                    {
                        "name": "add_user",
                        "content": "Add a user to a group.\n\nsalsa --group js-group adduser guest foouser\nsalsa --group-id 1234 adduser guest foouser\nsalsa --group-id 1234 adduser maintainer 1245\n\nFirst  argument  is  the  GitLab's access levels: guest, reporter, developer, maintainer,\nowner.\n\ndeleteuser or deluser\nRemove a user from a group.\n\nsalsa --group js-team deleteuser foouser\nsalsa --group-id=1234 deleteuser foouser\n"
                    },
                    {
                        "name": "join",
                        "content": "Request access to a group.\n\nsalsa join js-team\nsalsa join --group js-team\nsalsa join --group-id 1234\n"
                    },
                    {
                        "name": "list_groups",
                        "content": "List the subgroups for current group if group is set, otherwise will do the current user.\n\nlistusers or group\nList users in a subgroup.  Note, this does not include inherited or invited.\n\nsalsa --group js-team listusers\nsalsa --group-id 1234 listusers\n"
                    },
                    {
                        "name": "search_groups",
                        "content": "Search for a group using given string. Shows group ID and other information.\n\nsalsa searchgroups perl-team\nsalsa searchgroups perl-team/modules\nsalsa searchgroups 2666\n"
                    },
                    {
                        "name": "search_users",
                        "content": "Search for a user using given string. Shows user ID and other information.\n\nsalsa searchusers yadd\n"
                    },
                    {
                        "name": "update_user",
                        "content": "Update a user's role in a group.\n\nsalsa --group-id 1234 updateuser guest foouser\nsalsa --group js-team updateuser maintainer 1245\n\nFirst argument is the GitLab's access levels:  guest,  reporter,  developer,  maintainer,\nowner.\n"
                    },
                    {
                        "name": "whoami",
                        "content": "Gives information on the token owner.\n\nsalsa whoami\n"
                    },
                    {
                        "name": "Managing projects",
                        "content": "One  of  \"--group\",  \"--group-id\", \"--user\" or \"--user-id\" is required to manage projects. If\nboth are set, salsa warns and only \"--user\"/\"--user-id\" is used. If none is given, salsa uses\ncurrent user ID (token owner).\n\ncheckprojects or checkrepo\nVerify that projects are configured as expected. It works  exactly  like  updateprojects\nexcept  that it does not modify anything but just lists projects not well configured with\nfound errors.\n\nsalsa --user yadd --tagpending --kgb --irc=devscripts checkprojects test\nsalsa --group js-team checkprojects --all\nsalsa --group js-team --rename-head checkprojects test1 test2 test3\n\ncheckout or co\nClone a project's repository in current  directory.  If  the  directory  already  exists,\nupdate local repository.\n\nsalsa --user yadd checkout devscripts\nsalsa --group js-team checkout node-mongodb\nsalsa checkout js-team/node-mongodb\n\nYou can clone more than one repository or all repositories of a group or a user:\n\nsalsa --user yadd checkout devscripts autodep8\nsalsa checkout yadd/devscripts js-team/npm\nsalsa --group js-team checkout --all           # All js-team active repositories\nsalsa checkout --all-archived                  # All your repositories, including archived\n\ncreateproject or createrepo\nCreate  public  empty  project.  If  \"--group\"/\"--group-id\" is set, project is created in\ngroup directory, else in user directory.\n\nsalsa --user yadd createproject test\nsalsa --group js-team --kgb --irc-channel=devscripts createproject test\n\ndeleteproject or delrepo\nDelete a project.\n"
                    },
                    {
                        "name": "fork",
                        "content": "Forks a project in group/user repository and set \"upstream\" to original project. Example:\n\n$ salsa fork js-team/node-mongodb --verbose\n...\nsalsa.pl info: node-mongodb ready in node-mongodb/\n$ cd node-mongodb\n$ git remote --verbose show\norigin          git@salsa.debian.org:me/node-mongodb (fetch)\norigin          git@salsa.debian.org:me/node-mongodb (push)\nupstream        git@salsa.debian.org:js-team/node-mongodb (fetch)\nupstream        git@salsa.debian.org:js-team/node-mongodb (push)\n\nFor a group:\n\nsalsa fork --group js-team user/node-foo\n"
                    },
                    {
                        "name": "forks",
                        "content": "List forks of project(s).\n\nsalsa forks qa/qa debian/devscripts\n\nProject can be set using full path or using --group/--group-id or --user/--user-id,  else\nit is searched in current user namespace.\n"
                    },
                    {
                        "name": "push",
                        "content": "Push  relevant  packaging  refs  to  origin  Git remote. To be run from packaging working\ndirectory.\n\nsalsa push\n\nIt pushes the following refs to the configured remote for the debian-branch  or,  falling\nback, to the \"origin\" remote:\n\n\"master\" branch (or whatever is set to debian-branch in gbp.conf)\n\"upstream\" branch (or whatever is set to upstream-branch in gbp.conf)\n\"pristine-tar\" branch\ntags named \"debian/*\" (or whatever is set to debian-tag in gbp.conf)\ntags named \"upstream/*\" (or whatever is set to upstream-tag in gbp.conf)\nall tags, if the package's source format is \"3.0 (native)\"\nlistprojects or listrepos or ls\nShows  projects  owned  by user or group. If second argument exists, search only matching\nprojects.\n\nsalsa --group js-team listprojects\nsalsa --user yadd listprojects foo*\n"
                    },
                    {
                        "name": "last_ci_status",
                        "content": "Displays the last continuous integration result. Use --verbose to  see  URL  of  pipeline\nwhen  result  isn't  success.  Unless --no-fail is set, salsa lastcistatus will stop on\nfirst \"failed\" status.\n\nsalsa --group js-team lastcistatus --all --no-fail\nsalsa --user yadd lastcistatus foo\nsalsa lastcistatus js-team/nodejs\n\nThis commands returns  the  number  of  \"failed\"  status  found.  \"success\"  entries  are\ndisplayed  using  STDOUT  while other are displayed (with details) using STDERR. Then you\ncan easily see only failures using:\n\nsalsa --group js-team lastcistatus --all --no-fail >/dev/null\n\npipelineschedule or schedule\nControl pipeline schedule.\n\npipelineschedules or schedules\nLists current pipeline schedule items.\n\nYou can use --no-fail and --all options here.\n\nmergerequest or mr\nCreates a merge request.\n\nSuppose you created a fork using salsa fork, modify some things in a new branch using one\ncommit and want to propose it to original project (branch \"master\").  You  just  have  to\nlaunch this in source directory:\n\nsalsa mergerequest\n\nAnother example:\n\nsalsa mergerequest --mr-dst-project debian/foo --mr-dst-branch debian/master\n\nOr simply:\n\nsalsa mergerequest debian/foo debian/master\n\nNote that unless destination project has been set using command line, salsa mergerequest\nwill search it in the following order:\n\nusing GitLab API: salsa will detect from where this project was forked\nusing \"upstream\" origin\nelse salsa will use source project as destination project\n\nTo force salsa to use source project as destination project, you can use \"same\":\n\nsalsa mergerequest --mr-dst-project same\n# or\nsalsa mergerequest same\n\nNew merge request will be created using last commit title and description.\n\nSee --mr-* options for more.\n\nmergerequests or mrs\nList opened merge requests for project(s).\n\nsalsa mergerequests qa/qa debian/devscripts\n\nProject  can be set using full path or using --group/--group-id or --user/--user-id, else\nit is searched in current user namespace.\n"
                    },
                    {
                        "name": "protect_branch",
                        "content": "Protect/unprotect a branch.\n\nProtect\n#                                    project      branch merge push\nsalsa --group js-team protectbranch node-mongodb master m     d\n\n\"merge\" and \"push\" can be one of:\n\no, owner: owner only\nm, maintainer: o + maintainers allowed\nd, developer: m + developers allowed\nr, reporter: d + reporters allowed\ng, guest: r + guest allowed\nUnprotect\nsalsa --group js-team protectbranch node-mongodb master no\n"
                    },
                    {
                        "name": "protected_branches",
                        "content": "List protected branches:\n\nsalsa --group js-team protectedbranches node-mongodb\n"
                    },
                    {
                        "name": "push_repo",
                        "content": "Create a new project from a local Debian source directory configured with git.\n\npushrepo executes the following steps:\n\ngets project name using debian/changelog file;\nlaunches git remote add upstream ...;\nlaunches createproject;\npushes local repository.\n\nExamples:\n\nsalsa --user yadd pushrepo ./test\nsalsa --group js-team --kgb --irc-channel=devscripts pushrepo .\n"
                    },
                    {
                        "name": "rename_branch",
                        "content": "Rename branch given in --source-branch with name given in  --dest-branch.   You  can  use\n--no-fail, --all and --all-archived options here.\n\nsearchprojects or searchrepo or search\nSearch for a project using given string. Shows name, owner ID and other information.\n\nsalsa searchprojects devscripts\nsalsa searchprojects debian/devscripts\nsalsa searchprojects 18475\n\nupdateprojects or updaterepo\nConfigure  projects  using  parameters  given  to command line.  A project name has to be\ngiven unless --all or --all-archived is set. Prefer to use updatesafe.\n\nsalsa --user yadd --tagpending --kgb --irc=devscripts updateprojects test\nsalsa --group js-team updateprojects --all\nsalsa --group js-team --rename-head updateprojects test1 test2 test3\nsalsa updateprojects js-team/node-mongodb --kgb --irc debian-js\n\nBy default when using --all, salsa will fail on first error. If you want to continue, set\n--no-fail. In this case, salsa will display a warning for each project that has fail  but\ncontinue with next project. Then to see full errors, set --verbose.\n"
                    },
                    {
                        "name": "update_safe",
                        "content": "Launch checkprojects and ask before launching updateprojects (unless --yes).\n\nsalsa --user yadd --tagpending --kgb --irc=devscripts updatesafe test\nsalsa --group js-team updatesafe --all\nsalsa --group js-team --rename-head updatesafe test1 test2 test3\nsalsa updatesafe js-team/node-mongodb --kgb --irc debian-js\n"
                    },
                    {
                        "name": "Other",
                        "content": ""
                    },
                    {
                        "name": "purge_cache",
                        "content": "Empty local cache.\n"
                    }
                ]
            },
            "OPTIONS": {
                "content": "",
                "subsections": [
                    {
                        "name": "General options",
                        "content": "--chdir or -C\nChange directory before launching command:\n\nsalsa --chdir ~/debian checkout debian/libapache2-mod-fcgid\n"
                    },
                    {
                        "name": "--cache-file",
                        "content": "File   to   store   cached   values.   An   empty   value   disables   cache.    Default:\n\"~/.cache/salsa.json\".\n\n\".devscripts\" value: SALSACACHEFILE\n",
                        "long": "--cache-file"
                    },
                    {
                        "name": "--no-cache",
                        "content": "Disable cache usage. Same as --cache-file ''\n\n--conf-file or --conffile\nAdd or replace default configuration files.  This can only be used as  the  first  option\ngiven on the command-line.  Default: \"/etc/devscripts.conf\" and \"~/.devscripts\".\n\nreplace:\nsalsa --conf-file test.conf <command>...\nsalsa --conf-file test.conf --conf-file test2.conf  <command>...\n\nadd:\nsalsa --conf-file +test.conf <command>...\nsalsa --conf-file +test.conf --conf-file +test2.conf  <command>...\n\nIf one --conf-file has no \"+\", default configuration files are ignored.\n\n--no-conf or --noconf\nDon't  read  any  configuration files. This can only be used as the first option given on\nthe command-line.\n",
                        "long": "--no-cache"
                    },
                    {
                        "name": "--debug",
                        "content": "Enable debugging output.\n",
                        "long": "--debug"
                    },
                    {
                        "name": "--group",
                        "content": "Team to use. Use \"salsa searchgroups name\" to find it.\n\nIf you want to use a subgroup, you have to set its full path:\n\nsalsa --group perl-team/modules/packages checkprojects lemonldap-ng\n\n\".devscripts\" value: SALSAGROUP\n\nBe careful when you use SALSAGROUP in your \".devscripts\" file. Every salsa command  will\nbe  executed  in  group  space,  for  example if you want to propose a little change in a\nproject using salsa fork + salsa mergerequest, this \"fork\" will be done in  group  space\nunless  you  set  a  --user/--user-id.   Prefer  to  use an alias in your \".bashrc\" file.\nExample:\n\nalias jsteamadmin=\"salsa --group js-team\"\n\nor\n\nalias jsteamadmin=\"salsa --conf-file ~/.js.conf\n\nor to use both .devscripts and .js.conf:\n\nalias jsteamadmin=\"salsa --conf-file +~/.js.conf\n\nthen you can fix SALSAGROUP in \"~/.js.conf\"\n\nTo enable bash completion for your alias, add this in your .bashrc file:\n\ncompletionloader salsa\ncomplete -F salsacompletion jsteamadmin\n",
                        "long": "--group"
                    },
                    {
                        "name": "--group-id",
                        "content": "Group ID to use. Use \"salsa searchgroups name\" to find it.\n\n\".devscripts\" value: SALSAGROUPID\n\nBe careful when you use SALSAGROUPID in your \".devscripts\" file.  Every  salsa  command\nwill  be executed in group space, for example if you want to propose a little change in a\nproject using salsa fork + salsa mergerequest, this \"fork\" will be done in  group  space\nunless  you  set  a  --user/--user-id.   Prefer  to  use an alias in your \".bashrc\" file.\nExample:\n\nalias jsteamadmin=\"salsa --group-id 2666\"\n\nor\n\nalias jsteamadmin=\"salsa --conf-file ~/.js.conf\n\nthen you can fix SALSAGROUPID in \"~/.js.conf\".\n",
                        "long": "--group-id"
                    },
                    {
                        "name": "--help",
                        "content": "Displays this manpage.\n\n--info or -i\nPrompt before sensible changes.\n\n\".devscripts\" value: SALSAINFO (yes/no)\n",
                        "long": "--help"
                    },
                    {
                        "name": "--path",
                        "content": "Repository path.  Default to group or user path.\n\n\".devscripts\" value: SALSAREPOPATH\n",
                        "long": "--path"
                    },
                    {
                        "name": "--token",
                        "content": "Token value (see above).\n",
                        "long": "--token"
                    },
                    {
                        "name": "--token-file",
                        "content": "File to find token (see above).\n",
                        "long": "--token-file"
                    },
                    {
                        "name": "--user",
                        "content": "Username to use. If neither --group, --group-id, --user or --user-id is set,  salsa  uses\ncurrent user ID (corresponding to salsa private token).\n",
                        "long": "--user"
                    },
                    {
                        "name": "--user-id",
                        "content": "User  ID  to  use.  Use  \"salsa  searchusers  name\"  to  find  one.  If neither --group,\n--group-id, --user or --user-id is set, salsa uses  current  user  ID  (corresponding  to\nsalsa private token).\n\n\".devscripts\" value: SALSAUSERID\n",
                        "long": "--user-id"
                    },
                    {
                        "name": "--verbose",
                        "content": "Enable verbose output.\n",
                        "long": "--verbose"
                    },
                    {
                        "name": "--yes",
                        "content": "Never ask for consent.\n\n\".devscripts\" value: SALSAYES (yes/no)\n",
                        "long": "--yes"
                    },
                    {
                        "name": "List/search project options",
                        "content": "--archived, --no-archived\nInstead  of  looking  to active projects, list or search in archived projects.  Note that\nyou can't have both archived and unarchived projects in the same  request.   Default:  no\n(ie --no-archived).\n\n\".devscripts\" value: SALSAARCHIVED (yes/no)\n"
                    },
                    {
                        "name": "Update/create project options",
                        "content": "--all, --all-archived\nWhen  set,  all  projects  of  group/user are affected by command.  --all will filter all\nactive projects, whereas --all-archived will include active and archived projects.\n\n--skip, --no-skip\nIgnore project with --all or --all-achived. Example:\n\nsalsa updateprojects --tagpending --all --skip qa --skip devscripts\n\nTo set multiples values, use spaces. Example:\n\nSALSASKIP=qa devscripts\n\nUsing --no-skip will ignore any projects to be skipped and include them.\n\n\".devscripts\" value: SALSASKIP\n\n--skip-file\nIgnore projects in this file (1 project per line).\n\nsalsa updateprojects --tagpending --all --skip-file ~/.skip\n\n\".devscripts\" value: SALSASKIPFILE\n"
                    },
                    {
                        "name": "--build-timeout",
                        "content": "The maximum amount of time, in seconds, that a job can run.  Default: 3600 (60 minutes).\n\nsalsa updatesafe myrepo --build-timeout 3600\n\n\".devscripts\" value: SALSABUILDTIMEOUT\n",
                        "long": "--build-timeout"
                    },
                    {
                        "name": "--avatar-path",
                        "content": "Path to an image for the project's avatar.  If path value contains \"%p\", it  is  replaced\nby project name.\n\n\".devscripts\" value: SALSAAVATARPATH\n",
                        "long": "--avatar-path"
                    },
                    {
                        "name": "--ci-config-path",
                        "content": "Configure configuration file path of GitLab CI.  Default: empty.  Example:\n\nsalsa updatesafe --ci-config-path recipes/debian.yml@salsa-ci-team/pipeline debian/devscripts\n\n\".devscripts\" value: SALSACICONFIGPATH\n\n--desc, --no-desc\nConfigure a project's description using pattern given in desc-pattern.\n\n\".devscripts\" value: SALSADESC (yes/no)\n",
                        "long": "--ci-config-path"
                    },
                    {
                        "name": "--desc-pattern",
                        "content": "Project's description pattern. \"%p\" is replaced by project's name, while \"%P\" is replaced\nby  project's  name  given in command (may contains full path).  Default: \"Debian package\n%p\".\n\n\".devscripts\" value: SALSADESCPATTERN\n\n--email, --no-email, --disable-email\nEnable, ignore or disable email-on-push.\n\n\".devscripts\" value: SALSAEMAIL (yes/ignore/no, default: ignore)\n",
                        "long": "--desc-pattern"
                    },
                    {
                        "name": "--email-recipient",
                        "content": "Email-on-push recipient. Can be multi valued:\n\n$ salsa updatesafe myrepo \\\n--email-recipient foo@foobar.org \\\n--email-recipient bar@foobar.org\n\nIf recipient value contains \"%p\", it is replaced by project name.\n\n\".devscripts\" value: SALSAEMAILRECIPIENTS (use spaces to separate multiples recipients)\n",
                        "long": "--email-recipient"
                    },
                    {
                        "name": "--analytics",
                        "content": "Set analytics feature with permissions.\n\n\".devscripts\" value: SALSAENABLEANALYTICS (yes/private/no, default: yes)\n",
                        "long": "--analytics"
                    },
                    {
                        "name": "--auto-devops",
                        "content": "Set auto devops feature.\n\n\".devscripts\" value: SALSAENABLEAUTODEVOPS (yes/no, default: yes)\n",
                        "long": "--auto-devops"
                    },
                    {
                        "name": "--container",
                        "content": "Set container feature with permissions.\n\n\".devscripts\" value: SALSAENABLECONTAINER (yes/private/no, default: yes)\n",
                        "long": "--container"
                    },
                    {
                        "name": "--environments",
                        "content": "Set environments feature with permissions.\n\n\".devscripts\" value: SALSAENABLEENVIRONMENTS (yes/private/no, default: yes)\n",
                        "long": "--environments"
                    },
                    {
                        "name": "--feature-flags",
                        "content": "Set feature flags feature with permissions.\n\n\".devscripts\" value: SALSAENABLEFEATUREFLAGS (yes/private/no, default: yes)\n",
                        "long": "--feature-flags"
                    },
                    {
                        "name": "--forks",
                        "content": "Set forking a project feature with permissions.\n\n\".devscripts\" value: SALSAENABLEFORKS (yes/private/no, default: yes)\n",
                        "long": "--forks"
                    },
                    {
                        "name": "--infrastructure",
                        "content": "Set infrastructure feature with permissions.\n\n\".devscripts\" value: SALSAENABLEINFRASTRUCTURE (yes/private/no, default: yes)\n",
                        "long": "--infrastructure"
                    },
                    {
                        "name": "--issues",
                        "content": "Set issues feature with permissions.\n\n\".devscripts\" value: SALSAENABLEISSUES (yes/private/no, default: yes)\n",
                        "long": "--issues"
                    },
                    {
                        "name": "--jobs",
                        "content": "Set jobs feature with permissions.\n\n\".devscripts\" value: SALSAENABLEJOBS (yes/private/no, default: yes)\n",
                        "long": "--jobs"
                    },
                    {
                        "name": "--lfs",
                        "content": "Set Large File Storage (LFS) feature.\n\n\".devscripts\" value: SALSAENABLELFS (yes/no, default: yes)\n",
                        "long": "--lfs"
                    },
                    {
                        "name": "--mr",
                        "content": "Set merge requests feature with permissions.\n\n\".devscripts\" value: SALSAENABLEMR (yes/private/no, default: yes)\n",
                        "long": "--mr"
                    },
                    {
                        "name": "--monitor",
                        "content": "Set monitor feature with permissions.\n\n\".devscripts\" value: SALSAENABLEMONITOR (yes/private/no, default: yes)\n",
                        "long": "--monitor"
                    },
                    {
                        "name": "--packages",
                        "content": "Set packages feature.\n\n\".devscripts\" value: SALSAENABLEPACKAGES (yes/no, default: yes)\n",
                        "long": "--packages"
                    },
                    {
                        "name": "--pages",
                        "content": "Set pages feature with permissions.\n\n\".devscripts\" value: SALSAENABLEPAGES (yes/private/no, default: yes)\n",
                        "long": "--pages"
                    },
                    {
                        "name": "--releases",
                        "content": "Set releases feature with permissions.\n\n\".devscripts\" value: SALSAENABLERELEASES (yes/private/no, default: yes)\n\n--enable-remove-source-branch, --disable-remove-source-branch\nEnable or disable deleting source branch option by default for all new merge requests.\n\n\".devscripts\" value: SALSAREMOVESOURCEBRANCH (yes/no, default: yes)\n",
                        "long": "--releases"
                    },
                    {
                        "name": "--repo",
                        "content": "Set the project's repository feature with permissions.\n\n\".devscripts\" value: SALSAENABLEREPO (yes/private/no, default: yes)\n",
                        "long": "--repo"
                    },
                    {
                        "name": "--request-access",
                        "content": "Allow users to request member access.\n\n\".devscripts\" value: SALSAREQUESTACCESS (yes/no)\n",
                        "long": "--request-access"
                    },
                    {
                        "name": "--requirements",
                        "content": "Set requirements feature with permissions.\n\n\".devscripts\" value: SALSAENABLEREQUIREMENTS (yes/private/no, default: yes)\n",
                        "long": "--requirements"
                    },
                    {
                        "name": "--security-compliance",
                        "content": "Enable or disabled Security and Compliance feature.\n\n\".devscripts\" value: SALSAENABLESECURITYCOMPLIANCE (yes/no)\n",
                        "long": "--security-compliance"
                    },
                    {
                        "name": "--service-desk",
                        "content": "Allow service desk feature.\n\n\".devscripts\" value: SALSAENABLESERVICEDESK (yes/no)\n",
                        "long": "--service-desk"
                    },
                    {
                        "name": "--snippets",
                        "content": "Set snippets feature with permissions.\n\n\".devscripts\" value: SALSAENABLESNIPPETS (yes/private/no, default: yes)\n",
                        "long": "--snippets"
                    },
                    {
                        "name": "--wiki",
                        "content": "Set wiki feature with permissions.\n\n\".devscripts\" value: SALSAENABLEWIKI (yes/private/no, default: yes)\n",
                        "long": "--wiki"
                    },
                    {
                        "name": "--irc-channel",
                        "content": "IRC channel for KGB or Irker. Can be used more than one time only with --irker.\n\nImportant: channel must not include the first \"#\". If salsa finds a channel starting with\n\"#\", it will consider that the channel starts with 2 \"#\"!\n\n\".devscript\" value: SALSAIRCCHANNEL\n\nMultiple values must be space separated.\n\nSince configuration files are read using sh, be careful when using \"#\": you must  enclose\nthe  channel  with  quotes,  else  sh  will consider it as a comment and will ignore this\nvalue.\n\n--irker, --no-irker, --disable-irker\nEnable, ignore or disable Irker service.\n\n\".devscripts\" value: SALSAIRKER (yes/ignore/no, default: ignore)\n",
                        "long": "--irc-channel"
                    },
                    {
                        "name": "--irker-host",
                        "content": "Irker host.  Default: ruprecht.snow-crash.org.\n\n\".devscripts\" value: SALSAIRKERHOST\n",
                        "long": "--irker-host"
                    },
                    {
                        "name": "--irker-port",
                        "content": "Irker port.  Default: empty (default value).\n\n\".devscripts\" value: SALSAIRKERPORT\n\n--kgb, --no-kgb, --disable-kgb\nEnable, ignore or disable KGB webhook.\n\n\".devscripts\" value: SALSAKGB (yes/ignore/no, default: ignore)\n",
                        "long": "--irker-port"
                    },
                    {
                        "name": "--kgb-options",
                        "content": "List   of   KGB   enabled   options   (comma   separated).     Default:    issuesevents,\nmergerequestsevents,   noteevents,   pipelineevents,   pushevents,  tagpushevents,\nwikipageevents, enablesslverification\n\n$ salsa updatesafe debian/devscripts --kgb --irc-channel devscripts \\\n--kgb-options 'mergerequestsevents,issuesevents,enablesslverification'\n\nList  of  available  options:  confidentialcommentsevents,  confidentialissuesevents,\nconfidentialnoteevents,     enablesslverification,     issuesevents,     jobevents,\nmergerequestsevents, noteevents, pipelineevents, tagpushevents, wikipageevents\n\n\".devscripts\" value: SALSAKGBOPTIONS\n",
                        "long": "--kgb-options"
                    },
                    {
                        "name": "--no-fail",
                        "content": "Don't stop on error when using updateprojects with --all or --all-archived when  set  to\nyes.\n\n\".devscripts\" value: SALSANOFAIL (yes/no, default: no)\n\n--rename-head, --no-rename-head\nRename  HEAD  branch  given  by  --source-branch  into  --dest-branch and change \"default\nbranch\" of project. Works only with updateprojects.\n\n\".devscripts\" value: SALSARENAMEHEAD (yes/no)\n\n--source-branch\nDefault: \"master\".\n\n\".devscripts\" value: SALSASOURCEBRANCH\n\n--dest-branch\nDefault: \"debian/master\".\n\n\".devscripts\" value: SALSADESTBRANCH\n\n--tagpending, --no-tagpending, --disable-tagpending\nEnable, ignore or disable \"tagpending\" webhook.\n\n\".devscripts\" value: SALSATAGPENDING (yes/ignore/no, default: ignore)\n",
                        "long": "--no-fail"
                    },
                    {
                        "name": "Pipeline schedules",
                        "content": ""
                    },
                    {
                        "name": "--schedule-desc",
                        "content": "Description of the pipeline schedule.\n",
                        "long": "--schedule-desc"
                    },
                    {
                        "name": "--schedule-ref",
                        "content": "Branch or tag name that is triggered.\n",
                        "long": "--schedule-ref"
                    },
                    {
                        "name": "--schedule-cron",
                        "content": "Cron schedule. Example:\n\n0 1 * * *.\n",
                        "long": "--schedule-cron"
                    },
                    {
                        "name": "--schedule-tz",
                        "content": "Time zone to run cron schedule.  Default: UTC.\n\n--schedule-enable, --schedule-disable\nEnable/disable the pipeline schedule to run.  Default: disabled.\n",
                        "long": "--schedule-tz"
                    },
                    {
                        "name": "--schedule-run",
                        "content": "Trigger --schedule-desc scheduled pipeline to run immediately.  Default: false.\n",
                        "long": "--schedule-run"
                    },
                    {
                        "name": "--schedule-delete",
                        "content": "Delete --schedule-desc pipeline schedule.\n",
                        "long": "--schedule-delete"
                    },
                    {
                        "name": "Merge requests options",
                        "content": ""
                    },
                    {
                        "name": "--mr-title",
                        "content": "Title for merge request.  Default: last commit title.\n",
                        "long": "--mr-title"
                    },
                    {
                        "name": "--mr-desc",
                        "content": "Description of new MR.  Default:\n\nempty if --mr-title is set\nlast commit description if any\n--mr-dst-branch (or second command line argument)\nDestination branch.  Default: \"master\".\n\n--mr-dst-project (or first command line argument)\nDestination project.  Default: project from which the current project was forked; or,  if\nnot  found,  \"upstream\"  value  found  using  git  remote --verbose show; or using source\nproject.\n\nIf --mr-dst-project is set to same, salsa will use source project as destination.\n",
                        "long": "--mr-desc"
                    },
                    {
                        "name": "--mr-src-branch",
                        "content": "Source branch.  Default: current branch.\n",
                        "long": "--mr-src-branch"
                    },
                    {
                        "name": "--mr-src-project",
                        "content": "Source project.  Default: current project found using git remote --verbose show.\n\n--mr-allow-squash, --no-mr-allow-squash\nAllow upstream project to squash your commits, this is the default.\n\n\".devscripts\" value: SALSAMRALLOWSQUASH (yes/no)\n\n--mr-remove-source-branch, --no-mr-remove-source-branch\nRemove source branch if merge request is accepted.  Default: no.\n\n\".devscripts\" value: SALSAMRREMOVESOURCEBRANCH (yes/no)\n",
                        "long": "--mr-src-project"
                    },
                    {
                        "name": "Options to manage other GitLab instances",
                        "content": ""
                    },
                    {
                        "name": "--api-url",
                        "content": "GitLab API.  Default: <https://salsa.debian.org/api/v4>.\n\n\".devscripts\" value: SALSAAPIURL\n",
                        "long": "--api-url"
                    },
                    {
                        "name": "--git-server-url",
                        "content": "Default: \"git@salsa.debian.org:\".\n\n\".devscripts\" value: SALSAGITSERVERURL\n",
                        "long": "--git-server-url"
                    },
                    {
                        "name": "--irker-server-url",
                        "content": "Default: \"ircs://irc.oftc.net:6697/\".\n\n\".devscripts\" value: SALSAIRKERSERVERURL\n",
                        "long": "--irker-server-url"
                    },
                    {
                        "name": "--kgb-server-url",
                        "content": "Default: <https://kgb.debian.net/webhook/?channel=>.\n\n\".devscripts\" value: SALSAKGBSERVERURL\n",
                        "long": "--kgb-server-url"
                    },
                    {
                        "name": "--tagpending-server-url",
                        "content": "Default: <https://webhook.salsa.debian.org/tagpending/>.\n\n\".devscripts\" value: SALSATAGPENDINGSERVERURL\n\nConfiguration file example\n\nExample to use salsa with <https://gitlab.ow2.org> (group \"lemonldap-ng\"):\n\nSALSATOKEN=`cat ~/.ow2-gitlab-token`\nSALSAAPIURL=https://gitlab.ow2.org/api/v4\nSALSAGITSERVERURL=git@gitlab.ow2.org:\nSALSAGROUPID=34\n\nThen to use it, add something like this in your \".bashrc\" file:\n\nalias llngadmin='salsa --conffile ~/.salsa-ow2.conf'\n",
                        "long": "--tagpending-server-url"
                    }
                ]
            },
            "SEE ALSO": {
                "content": "",
                "subsections": [
                    {
                        "name": "dpt-salsa",
                        "content": ""
                    }
                ]
            },
            "AUTHOR": {
                "content": "Xavier Guimard <yadd@debian.org>\n",
                "subsections": []
            },
            "COPYRIGHT AND LICENSE": {
                "content": "Copyright (C) 2018, Xavier Guimard <yadd@debian.org>\n\nIt contains code formerly found in dpt-salsa (pkg-perl-tools) copyright 2018, gregor herrmann\n<gregoa@debian.org>.\n\nThis library is free software; you can redistribute it and/or modify it under  the  terms  of\nthe  GNU  General Public License as published by the Free Software Foundation; either version\n2, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,  but  WITHOUT  ANY  WARRANTY;\nwithout  even  the  implied  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\nSee the GNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License along  with  this  program.\nIf not, see <http://www.gnu.org/licenses/>.\n\nDebian Utilities                             2026-02-25                                     SALSA(1)",
                "subsections": []
            }
        }
    }
}