lohgerrit | 265 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 265 insertions(+)
New commits: commit 6b60ab5dad52dbb40376d65e3076ea0552690292 Author: Olivier Hallot <[email protected]> AuthorDate: Fri Oct 3 18:33:55 2025 -0300 Commit: Olivier Hallot <[email protected]> CommitDate: Sun Oct 5 14:11:50 2025 +0200 tdf#98488 Add logerrit to help repo + changed logerrit to lohgerrit to make it different from core logerrit Change-Id: If1aa173d9c7a5bbd5d49da3c9e03695b263e6a2f Reviewed-on: https://gerrit.libreoffice.org/c/help/+/191836 Tested-by: Jenkins Reviewed-by: Olivier Hallot <[email protected]> diff --git a/lohgerrit b/lohgerrit new file mode 100755 index 0000000000..fb89171503 --- /dev/null +++ b/lohgerrit @@ -0,0 +1,265 @@ +#!/usr/bin/env bash + +#GERRITHOST=gerrit.libreoffice.org +GERRITHOST=logerrit +GERRITURL="ssh://$GERRITHOST/help" + +get_SHA_for_change() { + SHA=$(ssh "${GERRITHOST?}" gerrit query --all-approvals change:"$1" | grep ref | tail -1 | cut -d: -f2 | sed 's/^ *//') +} + +branch_or_default() { + local branch=$1 + if test -z "${branch}"; then + # Try to use the tracked branch + branch=$(git symbolic-ref HEAD|sed 's|refs/heads/||') + local remote=$(git config branch.${branch}.remote) + branch=$(git rev-parse --abbrev-ref --symbolic-full-name HEAD@{upstream}|sed "s|${remote}/||") + if test -z "$branch"; then + branch=$(git symbolic-ref HEAD 2> /dev/null) + branch="${branch##refs/heads/}" + if test -z "${branch}"; then + echo >&2 "no branch specified, and could not guess the current branch" + exit 1 + fi + echo >&2 "no branch specified, guessing current branch ${branch}" + else + echo >&2 "no branch specified, guessing tracked branch ${branch}" + fi + fi + echo "${branch}" +} + +lohgerrit() { + echo "Host logerrit gerrit.libreoffice.org" + if test -n "${2-}" && test -f "$HOME/.ssh/id_$2"; then + echo " IdentityFile ~/.ssh/id_$2" + fi + echo " User $1" + echo " Port 29418" + echo " HostName gerrit.libreoffice.org" +} + +case "$1" in + help|--help|"") + echo "Usage: ./logerrit subcommand [options]" + echo "simple and basic tool to interact with LibreOffice gerrit" + echo "see https://wiki.documentfoundation.org/Development/gerrit for details." + echo + echo "subcommands:" + echo " setup walking you though your gerrit setup" + echo " test test your gerrit setup" + echo + echo " --- for submitters:" + echo " submit [BRANCH] submit your change for review" + echo " submit [BRANCH]%private submit your change as private" + echo " submit [BRANCH]%wip submit your change as work-in-progress" + echo " nextchange [BRANCH] reset branch to the remote to start with the next change" + echo " testfeature [BRANCH] [CHANGEID]" + echo " trigger a test of a feature branch on gerrit" + echo + echo "Note: private changes are only visibly to yourself and those that you explicitly add as reviewers." + echo "For full documentation, see https://gerrit.libreoffice.org/Documentation/intro-user.html#private-changes" + echo + echo " --- for reviewers:" + echo " checkout CHANGEID checkout the changes for review" + echo " pull CHANGEID pull (and merge) the changes on current branch" + echo " cherry-pick CHANGEID cherry-pick the change on current branch" + echo " patch CHANGEID show the change as a patch" + echo " query ... query for changes for review on project help" + echo " <any other gerrit command>" + echo + echo "advanced users should consider using git review instead:" + echo "https://wiki.documentfoundation.org/Development/GitReview" + exit + ;; + setup) + script_canonical_file=$(readlink -f "$0") + script_canonical_dir=$(dirname "$script_canonical_file") + if ! cd "$script_canonical_dir"; then + echo "Can't cd to $script_canonical_dir" + exit 1 + fi + ssh_home="$HOME/.ssh"; + ssh_key= + created_ssh= + if ! test -d "$ssh_home"; then + echo "It appears that you have no ssh setup, running ssh-keygen to create that:" + mkdir -m0700 "$ssh_home" + created_ssh=TRUE + echo + echo "Hit enter to generate an ssh key - you will need to enter a pass-phrase" + echo + read -r + all_algo="$(ssh -Q key)" + if grep -q -x ssh-ed25519 <<< "$all_algo"; then + algo="ed25519" + elif grep -q -x ssh-rsa <<< "$all_algo"; then + algo="rsa" + else + echo "Could not find 'ssh-ed25519' or 'ssh-rsa' in the output from 'ssh -Q key'" + exit 1 + fi + ssh-keygen -t "$algo" # Generate the key pair using the selected algorithm + fi + if test -d "$ssh_home"; then + # order algos based on the PubkeyAcceptedKeyTypes option from OpenSSH 8.1 + for ssh_key_type in ecdsa ed25519 rsa; do + pk="$ssh_home/id_${ssh_key_type}.pub" + ssh_key="" + if test -f "$pk" && ssh_key="$(< "$pk")" && test -n "$ssh_key"; then + break + fi + done + fi + echo "Please go to https://gerrit.libreoffice.org/ and click the \"Sign in\" link" + echo "at the top right of the page. You'll be sent to our Single Sign-On portal" + echo "for authentication (create an account if needs be), and automatically" + echo "redirected back to gerrit afterwards." + echo + echo "Visit https://gerrit.libreoffice.org/settings/#SSHKeys and paste the public" + if test -z "$ssh_key"; then + echo "part of your SSH key in the 'New SSH key' form." + else + echo "key below in the 'New SSH key' form." + echo + printf '%s ' "$ssh_key" + echo + fi + echo + echo "Note that you need to register additional email addresses, if you want to" + echo "commit from them. Each additional email address must be confirmed by" + echo "following the verification link sent to it." + echo + read -r -p 'Which user name did you choose? ' GERRITUSER + if test -z "$created_ssh"; then + echo + echo "Please now add the following to your ~/.ssh/config, creating the file if needed:" + echo + logerrit "$GERRITUSER" ${ssh_key:+"$ssh_key_type"} + echo + else + echo "Automatically creating your ssh config" + logerrit "$GERRITUSER" ${ssh_key:+"$ssh_key_type"} >"$ssh_home/config" + fi + # setup the remote properly ... + git config remote.origin.pushurl ssh://logerrit/help + echo "To see if your setup was successful, run './logerrit test' then." + # a good place to make sure the hooks are set up + ./g -z + ;; + test) + if test -n "$(ssh "$GERRITHOST" 2>&1|grep "Welcome to Gerrit Code Review")"; then + echo "Your gerrit setup was successful!" + else + echo "There seems to be trouble. Please have the output of:" + echo "ssh -vvvv $GERRITHOST" + echo "at hand when looking for help." + fi + ;; + submit) + BRANCH=$(branch_or_default $2) + TYPE=${3:+"%$3"} + + if [ "$BRANCH" = "master" ]; then + WEEKOLDDATE=$(date --date="7 days ago" +%s 2> /dev/null) + if [ "$WEEKOLDDATE" = "" ]; then + WEEKOLDDATE=$(date -v-7d +%s) # BSD equivalent + fi + PARENTDATE=$(git show -s --format=%ct HEAD~1) + if [[ $PARENTDATE -lt $WEEKOLDDATE ]]; then + echo "Your branch is older than a week, do './g pull -r' and retry" + exit 1 + fi + fi + git push "$GERRITURL" "HEAD:refs/for/$BRANCH$TYPE" + ;; + nextchange) + if test -n "$(git status -s -uno)"; then + echo "You have uncommitted changes. Please commit or stash these:" + git status + exit 1 + fi + CHANGEID=$(git log --format=format:%b -1 HEAD|grep Change-Id|cut -d: -f2|tr -d \ ) + if test -z "$CHANGEID"; then + CHANGEID="NOCHANGEID" + fi + BACKUPBRANCH=backup/$CHANGEID-$(date +%F-%H%M%S) + git branch "$BACKUPBRANCH" + echo "current state backed up as $BACKUPBRANCH" + BRANCH=$(branch_or_default $2) + git reset --hard "remotes/origin/$BRANCH" + ;; + checkout) + get_SHA_for_change "$2" + git fetch "$GERRITURL" "$SHA" && git checkout FETCH_HEAD + ;; + review) + echo "'./logerrit review' has been removed as obsolete." + echo "Please use either:" + echo " - git-review: https://wiki.documentfoundation.org/Development/GitReview" + echo " - or the web-UI directly: https://gerrit.libreoffice.org/" + echo "Both provide a better experience." + exit 1; + ;; + pull) + get_SHA_for_change "$2" + git pull "$GERRITURL" "$SHA" + ;; + cherry-pick) + get_SHA_for_change "$2" + git fetch "$GERRITURL" "$SHA" && git cherry-pick FETCH_HEAD + ;; + patch) + get_SHA_for_change "$2" + git fetch "$GERRITURL" "$SHA" && git format-patch -1 --stdout FETCH_HEAD + ;; + query) + shift + ssh "${GERRITHOST?}" gerrit query project:help "${@@Q}" + ;; + testfeature) + CHANGEID=${3#I} + if test -n "$3" -a \( ${#3} -ne 41 -o -n "${CHANGEID//[0-9a-f]/}" \); then + echo "${3} is not a valid Gerrit change id" + exit 1 + fi + CHANGEID=$3 + + BRANCH=$(branch_or_default $2) + BRANCH="${BRANCH##feature/}" + WORKDIR=$(mktemp -d) + if test -z "$WORKDIR"; then + echo "could not create work directory." + exit 1 + fi + echo "workdir at $WORKDIR" + git clone -s "$(dirname "$0")" "$WORKDIR/help" + + pushd "$WORKDIR/help" || { echo "Changing directory failed."; exit 1; } + echo "noop commit: trigger test build for branch feature/$BRANCH" > ../commitmsg + echo >> ../commitmsg + echo "branch is at:" >> ../commitmsg + echo >> ../commitmsg + git log -1|sed -e "s/Change-Id:/XXXXXX:/" >> ../commitmsg + if test -n "$CHANGEID"; then + echo >> ../commitmsg + echo "Change-Id: $CHANGEID" >> ../commitmsg + fi + git fetch https://git.libreoffice.org/help "feature/$BRANCH" && \ + git checkout -b featuretst FETCH_HEAD && \ + cp -a .git-hooks/* .git/hooks && \ + git commit --allow-empty -F ../commitmsg && \ + git push "$GERRITURL" "HEAD:refs/for/feature/$BRANCH" + popd || { echo "Changing directory failed."; exit 1; } + + rm -rf "$WORKDIR/help" + rm -f "$WORKDIR/commitmsg" + rmdir "$WORKDIR" + ;; + *) + ssh "${GERRITHOST?}" gerrit "${@@Q}" + ;; +esac + +# vim: set noet sw=4 ts=4:
