.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "SALSA 1" .TH SALSA 1 "2021-08-18" "Debian Utilities" " " .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" salsa \- tool to manipulate salsa repositories and group members .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 10 \& # salsa \& salsa whoami \& salsa search_project devscripts \& salsa search_project qa/qa \& salsa search_group js\-team \& salsa search_group perl\-team/modules \& salsa search_user yadd \& salsa push_repo . \-\-group js\-team \-\-kgb \-\-irc devscripts \-\-tagpending \& salsa update_repo node\-mongodb \-\-group js\-team \-\-disable\-kgb \-\-desc \e \& \-\-desc\-pattern "Package %p" \& salsa update_repo js\-team/node\-mongodb \-\-kgb \-\-irc debian\-js \& salsa update_safe \-\-all \-\-desc \-\-desc\-pattern "Debian package %p" \e \& \-\-group js\-team \& salsa checkout node\-mongodb \-\-group js\-team \& salsa checkout js\-team/node\-mongodb \& salsa add_user developer foobar \-\-group\-id 2665 \& salsa update_user maintainer foobar \-\-group js\-team \& salsa del_user foobar \-\-group js\-team .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBsalsa\fR is a designed to create and configure repositories on and manage users of groups. .PP A Salsa token is required, except for search* commands, and must be set in command line \fI(see below)\fR, or in your configuration file \fI(~/.devscripts)\fR: .PP .Vb 1 \& SALSA_TOKEN=abcdefghi .Ve .PP or .PP .Vb 1 \& SALSA_TOKEN=\`cat ~/.token\` .Ve .PP or .PP .Vb 1 \& SALSA_TOKEN_FILE=~/.dpt.conf .Ve .PP If you choose to link another file using \s-1SALSA_TOKEN_FILE,\s0 it must contain a line with one of (no differences): .PP .Vb 2 \& SALSA_PRIVATE_TOKEN=xxxx \& SALSA_TOKEN=xxxx .Ve .PP This allows for example to use \fBdpt\fR\|(1) configuration file (~/.dpt.conf) which contains: .PP .Vb 1 \& DPT_SALSA_PRIVATE_TOKEN=abcdefghi .Ve .SH "COMMANDS" .IX Header "COMMANDS" .SS "Managing users and groups" .IX Subsection "Managing users and groups" .IP "\fBjoin\fR" 4 .IX Item "join" Request access to a group. .Sp .Vb 3 \& salsa join js\-team \& salsa join \-\-group js\-team \& salsa join \-\-group\-id 1234 .Ve .IP "\fBadd_user\fR" 4 .IX Item "add_user" Add a user to a group. .Sp .Vb 3 \& salsa \-\-group js\-group add_user guest foouser \& salsa \-\-group\-id 1234 add_user guest foouser \& salsa \-\-group\-id 1234 add_user maintainer 1245 .Ve .Sp First argument is the GitLab's access levels: guest, reporter, developer, maintainer, owner. .IP "\fBdel_user\fR" 4 .IX Item "del_user" Remove a user from a group .Sp .Vb 2 \& salsa \-\-group js\-team del_user foouser \& salsa \-\-group\-id=1234 del_user foouser .Ve .IP "\fBlist_groups\fR" 4 .IX Item "list_groups" List sub groups of current one if group is set, groups of current user else. .IP "\fBgroup\fR" 4 .IX Item "group" Show group members. .Sp .Vb 2 \& salsa \-\-group js\-team group \& salsa \-\-group\-id 1234 group .Ve .IP "\fBsearch_group\fR" 4 .IX Item "search_group" Search for a group using given string. Shows group id and other information. .Sp .Vb 3 \& salsa search_group perl\-team \& salsa search_group perl\-team/modules \& salsa search_group 2666 .Ve .IP "\fBsearch_user\fR" 4 .IX Item "search_user" Search for a user using given string. Shows user id and other information. .Sp .Vb 1 \& salsa search_user yadd .Ve .IP "\fBupdate_user\fR" 4 .IX Item "update_user" Update user role in a group. .Sp .Vb 2 \& salsa \-\-group\-id 1234 update_user guest foouser \& salsa \-\-group js\-team update_user maintainer 1245 .Ve .Sp First argument is the GitLab's access levels: guest, reporter, developer, maintainer, owner. .IP "\fBwhoami\fR" 4 .IX Item "whoami" Gives information on the token owner .Sp .Vb 1 \& salsa whoami .Ve .SS "Managing repositories" .IX Subsection "Managing repositories" One of \f(CW\*(C`\-\-group\*(C'\fR, \f(CW\*(C`\-\-group\-id\*(C'\fR, \f(CW\*(C`\-\-user\*(C'\fR or \f(CW\*(C`\-\-user\-id\*(C'\fR is required to manage repositories. If both are set, salsa warns and only \&\f(CW\*(C`\-\-user\*(C'\fR/\f(CW\*(C`\-\-user\-id\*(C'\fR is used. If none is given, salsa uses current user id \&\fI(token owner)\fR. .IP "\fBcheck_repo\fR" 4 .IX Item "check_repo" Verify that repo(s) are well configured. It works exactly like \fBupdate_repo\fR except that it does not modify anything but just lists projects not well configured with found errors. .Sp .Vb 3 \& salsa \-\-user yadd \-\-tagpending \-\-kgb \-\-irc=devscripts check_repo test \& salsa \-\-group js\-team check_repo \-\-all \& salsa \-\-group js\-team \-\-rename\-head check_repo test1 test2 test3 .Ve .IP "\fBcheckout\fR or \fBco\fR" 4 .IX Item "checkout or co" Clone repo in current dir. If directory already exists, update local repo. .Sp .Vb 3 \& salsa \-\-user yadd co devscripts \& salsa \-\-group js\-team co node\-mongodb \& salsa co js\-team/node\-mongodb .Ve .Sp You can clone more than one repository or all repositories of a group or a user: .Sp .Vb 4 \& salsa \-\-user yadd co devscripts autodep8 \& salsa co yadd/devscripts js\-team/npm \& salsa \-\-group js\-team co \-\-all # All js\-team repos \& salsa co \-\-all # All your repos .Ve .IP "\fBcreate_repo\fR" 4 .IX Item "create_repo" Create public empty project. If \f(CW\*(C`\-\-group\*(C'\fR/\f(CW\*(C`\-\-group\-id\*(C'\fR is set, project is created in group directory, else in user directory. .Sp .Vb 2 \& salsa \-\-user yadd create_repo test \& salsa \-\-group js\-team \-\-kgb \-\-irc\-channel=devscripts create_repo test .Ve .IP "\fBdel_repo\fR" 4 .IX Item "del_repo" Delete a repository. .IP "\fBfork\fR" 4 .IX Item "fork" Forks a project in group/user repository and set \*(L"upstream\*(R" to original project. Example: .Sp .Vb 9 \& $ salsa fork js\-team/node\-mongodb \-\-verbose \& ... \& salsa.pl info: node\-mongodb ready in node\-mongodb/ \& $ cd node\-mongodb \& $ git remote \-\-verbose show \& origin git@salsa.debian.org:me/node\-mongodb (fetch) \& origin git@salsa.debian.org:me/node\-mongodb (push) \& upstream git@salsa.debian.org:js\-team/node\-mongodb (fetch) \& upstream git@salsa.debian.org:js\-team/node\-mongodb (push) .Ve .Sp For a group: .Sp .Vb 1 \& salsa fork \-\-group js\-team user/node\-foo .Ve .IP "\fBforks\fR" 4 .IX Item "forks" List forks of project(s). .Sp .Vb 1 \& salsa forks qa/qa debian/devscripts .Ve .Sp Project can be set using full path or using \fB\-\-group\fR/\fB\-\-group\-id\fR or \&\fB\-\-user\fR/\fB\-\-user\-id\fR, else it is searched in current user namespace. .IP "\fBpush\fR" 4 .IX Item "push" Push relevant packaging refs to origin Git remote. To be run from packaging working directory. .Sp .Vb 1 \& salsa push .Ve .Sp It pushes the following refs to the configured remote for the debian-branch or, falling back, to the \*(L"origin\*(R" remote: .RS 4 .ie n .IP """master"" branch (or whatever is set to debian-branch in gbp.conf)" 4 .el .IP "``master'' branch (or whatever is set to debian-branch in gbp.conf)" 4 .IX Item "master branch (or whatever is set to debian-branch in gbp.conf)" .PD 0 .ie n .IP """upstream"" branch (or whatever is set to upstream-branch in gbp.conf)" 4 .el .IP "``upstream'' branch (or whatever is set to upstream-branch in gbp.conf)" 4 .IX Item "upstream branch (or whatever is set to upstream-branch in gbp.conf)" .ie n .IP """pristine-tar"" branch" 4 .el .IP "``pristine-tar'' branch" 4 .IX Item "pristine-tar branch" .ie n .IP "tags named ""debian/*"" (or whatever is set to debian-tag in gbp.conf)" 4 .el .IP "tags named ``debian/*'' (or whatever is set to debian-tag in gbp.conf)" 4 .IX Item "tags named debian/* (or whatever is set to debian-tag in gbp.conf)" .ie n .IP "tags named ""upstream/*"" (or whatever is set to upstream-tag in gbp.conf)" 4 .el .IP "tags named ``upstream/*'' (or whatever is set to upstream-tag in gbp.conf)" 4 .IX Item "tags named upstream/* (or whatever is set to upstream-tag in gbp.conf)" .ie n .IP "all tags, if the package's source format is ""3.0 (native)""" 4 .el .IP "all tags, if the package's source format is ``3.0 (native)''" 4 .IX Item "all tags, if the package's source format is 3.0 (native)" .RE .RS 4 .RE .IP "\fBls\fR or \fBlist_repos\fR" 4 .IX Item "ls or list_repos" .PD Shows projects owned by user or group. If second argument exists, search only matching projects .Sp .Vb 2 \& salsa \-\-group js\-team list_repos \& salsa \-\-user yadd list_repos foo* .Ve .IP "\fBmerge_request\fR, \fBmr\fR" 4 .IX Item "merge_request, mr" Creates a merge request. .Sp Suppose you created a fork using \fBsalsa fork\fR, modify some things in a new branch using one commit and want to propose it to original project \&\fI(branch \*(L"master\*(R")\fR. You just have to launch this in source directory: .Sp .Vb 1 \& salsa mr .Ve .Sp Other example: .Sp .Vb 1 \& salsa mr \-\-mr\-dst\-project debian/foo \-\-mr\-dst\-branch debian/master .Ve .Sp or simply .Sp .Vb 1 \& salsa mr debian/foo debian/master .Ve .Sp Note that unless destination project has been set using command line, \&\fBsalsa merge_request\fR will search it in the following order: .RS 4 .IP "using GitLab \s-1API:\s0 salsa will detect from where this project was forked" 4 .IX Item "using GitLab API: salsa will detect from where this project was forked" .PD 0 .ie n .IP "using ""upstream"" origin" 4 .el .IP "using ``upstream'' origin" 4 .IX Item "using upstream origin" .IP "else salsa will use source project as destination project" 4 .IX Item "else salsa will use source project as destination project" .RE .RS 4 .PD .Sp To force salsa to use source project as destination project, you can use \&\*(L"same\*(R": .Sp .Vb 3 \& salsa mr \-\-mr\-dst\-project same \& # or \& salsa mr same .Ve .Sp New merge request will be created using last commit title and description. .Sp See \fB\-\-mr\-*\fR options for more. .RE .IP "\fBmerge_requests\fR, \fBmrs\fR" 4 .IX Item "merge_requests, mrs" List opened merge requests for project(s) .Sp .Vb 1 \& salsa mrs qa/qa debian/devscripts .Ve .Sp Project can be set using full path or using \fB\-\-group\fR/\fB\-\-group\-id\fR or \&\fB\-\-user\fR/\fB\-\-user\-id\fR, else it is searched in current user namespace. .IP "\fBprotect_branch\fR" 4 .IX Item "protect_branch" Protect/unprotect a branch. .RS 4 .IP "Set protection" 4 .IX Item "Set protection" .Vb 2 \& # project branch merge push \& salsa \-\-group js\-team protect_branch node\-mongodb master m d .Ve .Sp \&\*(L"merge\*(R" and \*(L"push\*(R" can be one of: .RS 4 .IP "\fBo\fR, \fBowner\fR: owner only" 4 .IX Item "o, owner: owner only" .PD 0 .IP "\fBm\fR, \fBmaintainer\fR: \fBo\fR + maintainers allowed" 4 .IX Item "m, maintainer: o + maintainers allowed" .IP "\fBd\fR, \fBdeveloper\fR: \fBm\fR + developers allowed" 4 .IX Item "d, developer: m + developers allowed" .IP "\fBr\fR, \fBreporter\fR: \fBd\fR + reporters allowed" 4 .IX Item "r, reporter: d + reporters allowed" .IP "\fBg\fR, \fBguest\fR: \fBr\fR + guest allowed" 4 .IX Item "g, guest: r + guest allowed" .RE .RS 4 .RE .IP "Unprotect" 4 .IX Item "Unprotect" .PD .Vb 1 \& salsa \-\-group js\-team protect_branch node\-mongodb master no .Ve .RE .RS 4 .RE .IP "\fBprotected_branches\fR" 4 .IX Item "protected_branches" List protected branches .Sp .Vb 1 \& salsa \-\-group js\-team protected_branches node\-mongodb .Ve .IP "\fBpush_repo\fR" 4 .IX Item "push_repo" Create a new project from a local Debian source directory configured with git. .Sp \&\fBpush_repo\fR executes the following steps: .RS 4 .IP "gets project name using debian/changelog file;" 4 .IX Item "gets project name using debian/changelog file;" .PD 0 .IP "launches \fBgit remote add upstream ...\fR;" 4 .IX Item "launches git remote add upstream ...;" .IP "launches \fBcreate_repo\fR;" 4 .IX Item "launches create_repo;" .IP "pushes local repo." 4 .IX Item "pushes local repo." .RE .RS 4 .PD .Sp Examples: .Sp .Vb 2 \& salsa \-\-user yadd push_repo ./test \& salsa \-\-group js\-team \-\-kgb \-\-irc\-channel=devscripts push_repo . .Ve .RE .IP "\fBrename_branch\fR" 4 .IX Item "rename_branch" Rename branch given in \fB\-\-source\-branch\fR with name given in \fB\-\-dest\-branch\fR. You can use \fB\-\-no\-fail\fR and \fB\-\-all\fR options here. .IP "\fBsearch\fR, \fBsearch_project\fR, \fBsearch_repo\fR" 4 .IX Item "search, search_project, search_repo" Search for a project using given string. Shows name, owner id and other information. .Sp .Vb 3 \& salsa search devscripts \& salsa search debian/devscripts \& salsa search 18475 .Ve .IP "\fBupdate_repo\fR" 4 .IX Item "update_repo" Configure repo(s) using parameters given to command line. A repo name has to be given unless \fB\-\-all\fR is set. Prefer to use \&\fBupdate_safe\fR. .Sp .Vb 4 \& salsa \-\-user yadd \-\-tagpending \-\-kgb \-\-irc=devscripts update_repo test \& salsa \-\-group js\-team update_repo \-\-all \& salsa \-\-group js\-team \-\-rename\-head update_repo test1 test2 test3 \& salsa update_repo js\-team/node\-mongodb \-\-kgb \-\-irc debian\-js .Ve .Sp By default when using \fB\-\-all\fR, salsa will fail on first error. If you want to continue, set \fB\-\-no\-fail\fR. In this case, salsa will display a warning for each project that has fail but continue with next project. Then to see full errors, set \fB\-\-verbose\fR. .IP "\fBupdate_safe\fR" 4 .IX Item "update_safe" Launch \fBcheck_repo\fR and ask before launching \fBupdate_repo\fR (unless \fB\-\-yes\fR). .Sp .Vb 4 \& salsa \-\-user yadd \-\-tagpending \-\-kgb \-\-irc=devscripts update_safe test \& salsa \-\-group js\-team update_safe \-\-all \& salsa \-\-group js\-team \-\-rename\-head update_safe test1 test2 test3 \& salsa update_safe js\-team/node\-mongodb \-\-kgb \-\-irc debian\-js .Ve .SS "Other" .IX Subsection "Other" .IP "\fBpurge_cache\fR" 4 .IX Item "purge_cache" Empty local cache. .SH "OPTIONS" .IX Header "OPTIONS" .SS "General options" .IX Subsection "General options" .IP "\fB\-C\fR, \fB\-\-chdir\fR" 4 .IX Item "-C, --chdir" Change directory before launching command .Sp .Vb 1 \& salsa \-C ~/debian co debian/libapache2\-mod\-fcgid .Ve .IP "\fB\-\-cache\-file\fR" 4 .IX Item "--cache-file" File to store cached values. Default to \fB~/.cache/salsa.json\fR. An empty value disables cache. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_CACHE_FILE\s0\fR .IP "\fB\-\-no\-cache\fR" 4 .IX Item "--no-cache" Disable cache usage. Same as \fB\-\-cache\-file ''\fR .IP "\fB\-\-conffile\fR, \fB\-\-conf\-file\fR" 4 .IX Item "--conffile, --conf-file" Add or replace default configuration files (\f(CW\*(C`/etc/devscripts.conf\*(C'\fR and \&\f(CW\*(C`~/.devscripts\*(C'\fR). This can only be used as the first option given on the command-line. .RS 4 .IP "replace:" 4 .IX Item "replace:" .Vb 2 \& salsa \-\-conf\-file test.conf ... \& salsa \-\-conf\-file test.conf \-\-conf\-file test2.conf ... .Ve .IP "add:" 4 .IX Item "add:" .Vb 2 \& salsa \-\-conf\-file +test.conf ... \& salsa \-\-conf\-file +test.conf \-\-conf\-file +test2.conf ... .Ve .Sp If one \fB\-\-conf\-file\fR has no \f(CW\*(C`+\*(C'\fR, default configuration files are ignored. .RE .RS 4 .RE .IP "\fB\-\-no\-conf\fR, \fB\-\-noconf\fR" 4 .IX Item "--no-conf, --noconf" Don't read any configuration files. This can only be used as the first option given on the command-line. .IP "\fB\-\-debug\fR" 4 .IX Item "--debug" Enable debugging output .IP "\fB\-\-group\fR" 4 .IX Item "--group" Team to use. Use \f(CW\*(C`salsa search_group name\*(C'\fR to find it. .Sp If you want to use a subgroup, you have to set its full path: .Sp .Vb 1 \& salsa \-\-group perl\-team/modules/packages check_repo lemonldap\-ng .Ve .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_GROUP\s0\fR .Sp Be careful when you use \fB\s-1SALSA_GROUP\s0\fR in your \f(CW\*(C`.devscripts\*(C'\fR file. Every \&\fBsalsa\fR command will be executed in group space, for example if you want to propose a little change in a project using \fBsalsa fork\fR + \fBsalsa mr\fR, this \&\*(L"fork\*(R" will be done in group space unless you set a \fB\-\-user\fR/\fB\-\-user\-id\fR. Prefer to use an alias in your \f(CW\*(C`.bashrc\*(C'\fR file. Example: .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-group js\-team" .Ve .Sp or .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-conf\-file ~/.js.conf .Ve .Sp or to use both .devscripts and .js.conf: .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-conf\-file +~/.js.conf .Ve .Sp then you can fix \fB\s-1SALSA_GROUP\s0\fR in \f(CW\*(C`~/.js.conf\*(C'\fR .Sp To enable bash completion for your alias, add this in your .bashrc file: .Sp .Vb 2 \& _completion_loader salsa \& complete \-F _salsa_completion jsteam_admin .Ve .IP "\fB\-\-group\-id\fR" 4 .IX Item "--group-id" Group id to use. Use \f(CW\*(C`salsa search_group name\*(C'\fR to find it. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_GROUP_ID\s0\fR .Sp Be careful when you use \fB\s-1SALSA_GROUP_ID\s0\fR in your \f(CW\*(C`.devscripts\*(C'\fR file. Every \&\fBsalsa\fR command will be executed in group space, for example if you want to propose a little change in a project using \fBsalsa fork\fR + \fBsalsa mr\fR, this \&\*(L"fork\*(R" will be done in group space unless you set a \fB\-\-user\fR/\fB\-\-user\-id\fR. Prefer to use an alias in your \f(CW\*(C`.bashrc\*(C'\fR file. Example: .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-group\-id 2666" .Ve .Sp or .Sp .Vb 1 \& alias jsteam_admin="salsa \-\-conf\-file ~/.js.conf .Ve .Sp then you can fix \fB\s-1SALSA_GROUP_ID\s0\fR in \f(CW\*(C`~/.js.conf\*(C'\fR .IP "\fB\-\-help\fR: displays this manpage" 4 .IX Item "--help: displays this manpage" .PD 0 .IP "\fB\-i\fR, \fB\-\-info\fR" 4 .IX Item "-i, --info" .PD Prompt before sensible changes. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_INFO\s0\fR (yes/no) .IP "\fB\-\-path\fR" 4 .IX Item "--path" Repo path. Default to group or user path. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_REPO_PATH\s0\fR .IP "\fB\-\-token\fR" 4 .IX Item "--token" Token value (see above). .IP "\fB\-\-token\-file\fR" 4 .IX Item "--token-file" File to find token (see above). .IP "\fB\-\-user\fR" 4 .IX Item "--user" Username to use. If neither \fB\-\-group\fR, \fB\-\-group\-id\fR, \fB\-\-user\fR or \fB\-\-user\-id\fR is set, salsa uses current user id (corresponding to salsa private token). .IP "\fB\-\-user\-id\fR" 4 .IX Item "--user-id" User id to use. Use \f(CW\*(C`salsa search_user name\*(C'\fR to find one. If neither \&\fB\-\-group\fR, \fB\-\-group\-id\fR, \fB\-\-user\fR or \fB\-\-user\-id\fR is set, salsa uses current user id (corresponding to salsa private token). .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_USER_ID\s0\fR .IP "\fB\-\-verbose\fR" 4 .IX Item "--verbose" Enable verbose output. .IP "\fB\-\-yes\fR" 4 .IX Item "--yes" Never ask for consent. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_YES\s0\fR (yes/no) .SS "List/search repo options" .IX Subsection "List/search repo options" .IP "\fB\-\-archived\fR \fB\-\-no\-archived\fR" 4 .IX Item "--archived --no-archived" Instead of looking to active projects, list or search in archived projects. Note that you can't have both archived and unarchived projects in the same request. Default: no \fI(ie \-\-no\-archived)\fR. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_ARCHIVED\s0\fR (yes/no) .SS "Update/create repo options" .IX Subsection "Update/create repo options" .IP "\fB\-\-all\fR" 4 .IX Item "--all" When set, all project of group/user are affected by command. .RS 4 .IP "\fB\-\-skip\fR: ignore project with \fB\-\-all\fR. Example:" 4 .IX Item "--skip: ignore project with --all. Example:" .Vb 1 \& salsa update_repo \-\-tagpending \-\-all \-\-skip qa \-\-skip devscripts .Ve .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_SKIP\s0\fR. To set multiples values, use spaces. Example .Sp .Vb 1 \& SALSA_SKIP=qa devscripts .Ve .IP "\fB\-\-skip\-file\fR: ignore projects in this file (1 project per line)" 4 .IX Item "--skip-file: ignore projects in this file (1 project per line)" .Vb 1 \& salsa update_repo \-\-tagpending \-\-all \-\-skip\-file ~/.skip .Ve .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_SKIP_FILE\s0\fR .RE .RS 4 .RE .IP "\fB\-\-ci\-config\-path\fR" 4 .IX Item "--ci-config-path" Configure configuration file path of GitLab \s-1CI.\s0 Default: empty. Example: .Sp .Vb 1 \& salsa update_safe \-\-ci\-config\-path debian/.gitlab\-ci.yml debian/devscripts .Ve .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_CI_CONFIG_PATH\s0\fR .IP "\fB\-\-desc\fR \fB\-\-no\-desc\fR" 4 .IX Item "--desc --no-desc" Configure repo description using pattern given in \fBdesc-pattern\fR .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_DESC\s0\fR (yes/no) .IP "\fB\-\-desc\-pattern\fR" 4 .IX Item "--desc-pattern" Repo description pattern. Default to \*(L"Debian package \f(CW%p\fR\*(R". \*(L"%p\*(R" is replaced by repo name, while \*(L"%P\*(R" is replaced by repo name given in command (may contains full path). .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_DESC_PATTERN\s0\fR .IP "\fB\-\-email\fR, \fB\-\-no\-email\fR, \fB\-\-disable\-email\fR" 4 .IX Item "--email, --no-email, --disable-email" Enable, ignore or disable email-on-push. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_EMAIL\s0\fR (yes/ignore/no, default: ignore) .IP "\fB\-\-email\-recipient\fR" 4 .IX Item "--email-recipient" Email-on-push recipient. Can be multi valued: .Sp .Vb 3 \& $ salsa update_safe myrepo \e \& \-\-email\-recipient foo@foobar.org \e \& \-\-email\-recipient bar@foobar.org .Ve .Sp If recipient value contains \*(L"%p\*(R", it is replaced by project name. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_EMAIL_RECIPIENTS\s0\fR (use spaces to separate multiples recipients) .IP "\fB\-\-enable\-issues\fR, \fB\-\-no\-enable\-issues\fR, \fB\-\-disable\-issues\fR, \fB\-\-no\-disable\-issues\fR" 4 .IX Item "--enable-issues, --no-enable-issues, --disable-issues, --no-disable-issues" Enable, ignore or disable issues. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR values: \fB\s-1SALSA_ENABLE_ISSUES\s0\fR (yes/ignore/no, default: ignore) .IP "\fB\-\-enable\-mr\fR, \fB\-\-no\-enable\-mr\fR, \fB\-\-disable\-mr\fR, \fB\-\-no\-disable\-mr\fR" 4 .IX Item "--enable-mr, --no-enable-mr, --disable-mr, --no-disable-mr" Enable, ignore or disable merge requests. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR values: \fB\s-1SALSA_ENABLE_MR\s0\fR (yes/ignore/no, default: ignore) .IP "\fB\-\-irc\-channel\fR" 4 .IX Item "--irc-channel" \&\s-1IRC\s0 channel for \s-1KGB\s0 or Irker. Can be used more than one time only with \&\fB\-\-irker\fR. .Sp \&\fBImportant\fR: channel must not include the first \*(L"#\*(R". If salsa finds a channel starting with \*(L"#\*(R", it will consider that the channel starts with 2 \*(L"#\*(R"! .Sp \&\f(CW\*(C`.devscript\*(C'\fR value: \fB\s-1SALSA_IRC_CHANNEL\s0\fR. .Sp Multiple values must be space separated. .Sp Since configuration files are read using \fBsh\fR, be careful when using \*(L"#\*(R": you must enclose the channel with quotes, else \fBsh\fR will consider it as a comment and will ignore this value. .IP "\fB\-\-irker\fR, \fB\-\-no\-irker\fR, \fB\-\-disable\-irker\fR" 4 .IX Item "--irker, --no-irker, --disable-irker" Enable, ignore or disable Irker service .Sp \&\f(CW\*(C`.devscripts\*(C'\fR values: \fB\s-1SALSA_IRKER\s0\fR (yes/ignore/no, default: ignore) .IP "\fB\-\-irker\-host\fR" 4 .IX Item "--irker-host" Irker host. Default: ruprecht.snow\-crash.org .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_IRKER_HOST\s0\fR .IP "\fB\-\-irker\-port\fR" 4 .IX Item "--irker-port" Irker port. Default: empty (default value) .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_IRKER_PORT\s0\fR .IP "\fB\-\-kgb\fR, \fB\-\-no\-kgb\fR, \fB\-\-disable\-kgb\fR" 4 .IX Item "--kgb, --no-kgb, --disable-kgb" Enable, ignore or disable \s-1KGB\s0 webhook. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_KGB\s0\fR (yes/ignore/no, default: ignore) .IP "\fB\-\-kgb\-options\fR" 4 .IX Item "--kgb-options" List of \s-1KGB\s0 enabled options (comma separated). Default: issues_events, merge_requests_events, note_events, pipeline_events, push_events, tag_push_events, wiki_page_events, enable_ssl_verification .Sp .Vb 2 \& $ salsa update_safe debian/devscripts \-\-kgb \-\-irc\-channel devscripts \e \& \-\-kgb\-options \*(Aqmerge_requests_events,issues_events,enable_ssl_verification\*(Aq .Ve .Sp List of available options: confidential_comments_events, confidential_issues_events, confidential_note_events, enable_ssl_verification, issues_events, job_events, merge_requests_events, note_events, pipeline_events, tag_push_events, wiki_page_events .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_KGB_OPTIONS\s0\fR .IP "\fB\-\-no\-fail\fR" 4 .IX Item "--no-fail" Don't stop on error when using \fBupdate_repo\fR with \fB\-\-all\fR. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_NO_FAIL\s0\fR (yes/no) .IP "\fB\-\-rename\-head\fR, \fB\-\-no\-rename\-head\fR" 4 .IX Item "--rename-head, --no-rename-head" Rename \s-1HEAD\s0 branch given by \fB\-\-source\-branch\fR into \fB\-\-dest\-branch\fR and change \&\*(L"default branch\*(R" of project. Works only with \fBupdate_repo\fR. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_RENAME_HEAD\s0\fR (yes/no) .RS 4 .ie n .IP "\fB\-\-source\-branch\fR: default ""master""" 4 .el .IP "\fB\-\-source\-branch\fR: default ``master''" 4 .IX Item "--source-branch: default master" \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_SOURCE_BRANCH\s0\fR .ie n .IP "\fB\-\-dest\-branch\fR: default ""debian/master""" 4 .el .IP "\fB\-\-dest\-branch\fR: default ``debian/master''" 4 .IX Item "--dest-branch: default debian/master" \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_DEST_BRANCH\s0\fR .RE .RS 4 .RE .IP "\fB\-\-tagpending\fR, \fB\-\-no\-tagpending\fR, \fB\-\-disable\-tagpending\fR" 4 .IX Item "--tagpending, --no-tagpending, --disable-tagpending" Enable, ignore or disable \*(L"tagpending\*(R" webhook. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_TAGPENDING\s0\fR (yes/ignore/no, default: ignore) .SS "Merge requests options" .IX Subsection "Merge requests options" .IP "\fB\-\-mr\-title\fR" 4 .IX Item "--mr-title" Title for merge request. Default: last commit title. .IP "\fB\-\-mr\-desc\fR" 4 .IX Item "--mr-desc" Description of new \s-1MR.\s0 Default: .RS 4 .IP "empty if \fB\-\-mr\-title\fR is set" 4 .IX Item "empty if --mr-title is set" .PD 0 .IP "last commit description if any" 4 .IX Item "last commit description if any" .RE .RS 4 .RE .IP "\fB\-\-mr\-dst\-branch\fR (or second command line argument)" 4 .IX Item "--mr-dst-branch (or second command line argument)" .PD Destination branch. Default to \*(L"master\*(R". .IP "\fB\-\-mr\-dst\-project\fR (or first command line argument)" 4 .IX Item "--mr-dst-project (or first command line argument)" Destination project. Default: project from which the current project was forked; or, if not found, \*(L"upstream\*(R" value found using \&\fBgit remote \-\-verbose show\fR; or using source project. .Sp If \fB\-\-mr\-dst\-project\fR is set to \fBsame\fR, salsa will use source project as destination. .IP "\fB\-\-mr\-src\-branch\fR" 4 .IX Item "--mr-src-branch" Source branch. Default: current branch. .IP "\fB\-\-mr\-src\-project\fR" 4 .IX Item "--mr-src-project" Source project. Default: current project found using \&\fBgit remote \-\-verbose show\fR. .IP "\fB\-\-mr\-allow\-squash\fR, \fB\-\-no\-mr\-allow\-squash\fR" 4 .IX Item "--mr-allow-squash, --no-mr-allow-squash" Allow upstream project to squash your commits, this is the default. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_MR_ALLOW_SQUASH\s0\fR (yes/no) .IP "\fB\-\-mr\-remove\-source\-branch\fR, \fB\-\-no\-mr\-remove\-source\-branch\fR" 4 .IX Item "--mr-remove-source-branch, --no-mr-remove-source-branch" Remove source branch if merge request is accepted. Default: no. .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_MR_REMOVE_SOURCE_BRANCH\s0\fR (yes/no) .SS "Options to manage other Gitlab instances" .IX Subsection "Options to manage other Gitlab instances" .IP "\fB\-\-api\-url\fR" 4 .IX Item "--api-url" GitLab \s-1API.\s0 Default: . .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_API_URL\s0\fR .IP "\fB\-\-git\-server\-url\fR" 4 .IX Item "--git-server-url" Default to \*(L"git@salsa.debian.org:\*(R" .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_GIT_SERVER_URL\s0\fR .IP "\fB\-\-irker\-server\-url\fR" 4 .IX Item "--irker-server-url" Default to \*(L"ircs://irc.oftc.net:6697/\*(R" .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_IRKER_SERVER_URL\s0\fR .IP "\fB\-\-kgb\-server\-url\fR" 4 .IX Item "--kgb-server-url" Default to .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_KGB_SERVER_URL\s0\fR .IP "\fB\-\-tagpending\-server\-url\fR" 4 .IX Item "--tagpending-server-url" Default to .Sp \&\f(CW\*(C`.devscripts\*(C'\fR value: \fB\s-1SALSA_TAGPENDING_SERVER_URL\s0\fR .PP \fIConfiguration file example\fR .IX Subsection "Configuration file example" .PP Example to use salsa with (group \*(L"lemonldap-ng\*(R"): .PP .Vb 4 \& SALSA_TOKEN=\`cat ~/.ow2\-gitlab\-token\` \& SALSA_API_URL=https://gitlab.ow2.org/api/v4 \& SALSA_GIT_SERVER_URL=git@gitlab.ow2.org: \& SALSA_GROUP_ID=34 .Ve .PP Then to use it, add something like this in your \f(CW\*(C`.bashrc\*(C'\fR file: .PP .Vb 1 \& alias llng_admin=\*(Aqsalsa \-\-conffile ~/.salsa\-ow2.conf\*(Aq .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fBdpt-salsa\fR .SH "AUTHOR" .IX Header "AUTHOR" Xavier Guimard .SH "COPYRIGHT AND LICENSE" .IX Header "COPYRIGHT AND LICENSE" Copyright (C) 2018, Xavier Guimard .PP It contains code formerly found in dpt-salsa \fI(pkg-perl-tools)\fR copyright 2018, gregor herrmann . .PP This library is free software; you can redistribute it and/or modify it under the terms of the \s-1GNU\s0 General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. .PP This program is distributed in the hope that it will be useful, but \s-1WITHOUT ANY WARRANTY\s0; without even the implied warranty of \&\s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE.\s0 See the \&\s-1GNU\s0 General Public License for more details. .PP You should have received a copy of the \s-1GNU\s0 General Public License along with this program. If not, see .