chore(git-all): improve python and shell versions

This commit is contained in:
Michele Cereda
2024-08-07 22:30:37 +02:00
parent cf54a16bab
commit 05f199ec7f
5 changed files with 83 additions and 5 deletions

View File

@@ -44,6 +44,35 @@ diff -y -W 200 \
# Math.
math 2 '+' 6
time pulumi pre --parallel (math 2 '*' (nproc))
# Array manipulation.
echo (seq 10)[-1..1] # -> 10 9 8 7 6 5 4 3 2 1
set array "$array appended_element"
# Define CLI options.
# Use all lines.
set -l opts
set opts $opts (fish_opt -s 'c' -l 'command' --required-val)
set opts $opts (fish_opt -s 'p' -l 'path' --multiple-vals)
argparse $opts -- $argv
or return
echo $_flag_command
echo $_flag_path
echo $argv
# Switch.
switch $animal
case cat
echo evil
case wolf dog human moose dolphin whale
echo mammal
case duck goose albatross
echo bird
case shark trout stingray
echo fish
case '*'
echo I have no idea what a $animal is
end
```
For functions defined in files in `~/.config/fish/functions/` to be automatically available, the files need to:

View File

@@ -23,8 +23,9 @@ parallel -qt -j 1 \
# Get the exit status of all subjobs ('--joblog $outfile').
# Use all the threads you can (--jobs 0), hammering the CPU.
# Highlight in red jobs that failed.
find . -type d -name .git -exec dirname "{}" + \
| parallel --jobs 0 --tagstring {/} --joblog - \
| parallel --jobs 0 --color-failed --tagstring {/} --joblog - \
'git -C {} pull --recurse-submodules'
# Inject Istio's sidecar to all Deployments in a Namespace.

View File

@@ -93,7 +93,7 @@ def main(debug, directories, dry_run, git_subcommand, recursive, threads, verbos
pre_flight(git_subcommand=git_subcommand_parts[0])
repositories = list(directories)
repositories = []
if recursive:
for directory in directories:
logging.info(f"starting from '{directory}'")
@@ -104,6 +104,9 @@ def main(debug, directories, dry_run, git_subcommand, recursive, threads, verbos
logging.debug(f"{directory} has repositories {', '.join(repositories_in_dir)}")
repositories.extend(repositories_in_dir)
else:
# Just trust the user gave repositories in input
repositories.extend(directories)
repositories = set(repositories)
logging.debug(f"repositories: {', '.join(repositories)}")

19
snippets/git.fish Normal file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/env fish
function git-all
if ! which -s parallel
echo "GNU parallel not found" >&2
return
end
argparse -s 'c/command=' 'p/path=+' 'r/recursive' -- $argv
or return
if test "$_flag_recursive" = '-r' || test "$_flag_recursive" = '--recursive'
set repositories (find $_flag_path -type 'd' -name '.git' -exec dirname {} +)
else
set repositories $_flag_path
end
parallel --color-failed --tagstring "{/}" "git -C {} $_flag_command" ::: $repositories
end

View File

@@ -12,6 +12,7 @@ git config --local 'commit.gpgsign' true
git config --local 'pull.rebase' false
git clone --recurse-submodules 'git@github.com:example/ansible-role-keychron-capable.git'
git clone 'https://gitlab-ci-token:glpat-01234567ABCDEFGHijkl@gitlab.example.org/testProj/myRepo.git'
git branch --list --remote 'origin/*' | cut -d/ -f2
@@ -45,7 +46,6 @@ git reset --soft HEAD~1 # or `git reset --soft HEAD^`
git restore --staged '.lefthook-local.yml' # or `git reset HEAD '.lefthook-local.yml'`
git commit -c ORIG_HEAD
##
# Change the default branch from 'master' to 'main'.
# --------------------------------------
@@ -67,7 +67,6 @@ git symbolic-ref 'refs/remotes/origin/HEAD' 'refs/remotes/origin/main'
# delete the master branch on the remote
git push origin --delete 'master'
# create patches from the last commit
git format-patch -n HEAD^
git format-patch HEAD^ -o './patchfile.patch'
@@ -75,3 +74,30 @@ git format-patch HEAD~1 --stdout
# create patches from specific commits
git format-patch -1 '3918a1d036e74d47a5c830e4bbabba6f507162b1'
git-all () {
[[ -n $DEBUG ]] && set -o xtrace
local COMMAND
local FOLDERS=()
for (( I = $# ; I >= 0 ; I-- )); do
if [[ -d ${@[$I]} ]]; then
FOLDERS+=${@[$I]}
else
COMMAND="${@[1,-$((${#FOLDERS}+1))]}"
break
fi
done
if [[ -z "$COMMAND" ]]; then
echo "error: no command given" >&2
return
fi
local REPOSITORIES=( $(find ${FOLDERS[@]:-'.'} -type d -name .git -exec dirname '{}' \;) )
parallel --color-failed --tagstring "{/}" "git -C {} $COMMAND" ::: ${REPOSITORIES[@]}
# echo -n ${REPOSITORIES[@]} | xargs -d ' ' -tP 0 -I git -C "{}" $(echo ${COMMAND[@]}) # xargs, linux
# echo -n ${REPOSITORIES[@]} | xargs -n 1 -P 0 -I {} git -C "{}" $(echo ${COMMAND[@]}) # xargs, osx
# for REPOSITORY in ${REPOSITORIES[@]}; do echo -e "\n\n---\n${REPOSITORY}"; git -C "$REPOSITORY" "$COMMAND"; done
[[ -n $DEBUG ]] && set +o xtrace
}