mirror of
https://github.com/Swarsel/.dotfiles.git
synced 2025-12-06 09:07:21 +01:00
feat[work]: improve git-replace
This commit is contained in:
parent
ae98f0d5df
commit
ed9008112b
2 changed files with 106 additions and 4 deletions
|
|
@ -18237,7 +18237,58 @@ This script allows for quick git replace of a string.
|
||||||
inherit name;
|
inherit name;
|
||||||
runtimeInputs = [ git gnugrep findutils ];
|
runtimeInputs = [ git gnugrep findutils ];
|
||||||
text = ''
|
text = ''
|
||||||
|
|
||||||
|
function help_and_exit() {
|
||||||
|
echo
|
||||||
|
echo "Remotely installs SwarselSystem on a target machine including secret deployment."
|
||||||
|
echo
|
||||||
|
echo "USAGE: $0 [-f/-t} <from> <to>"
|
||||||
|
echo
|
||||||
|
echo "ARGS:"
|
||||||
|
echo " -f | --filenames Replace in filenames."
|
||||||
|
echo " -d | --directory Replace text in files within this directory."
|
||||||
|
echo " -r | --repo Replace text in files in the entire git repo."
|
||||||
|
echo " -h | --help Print this help."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-f | --filenames)
|
||||||
|
shift
|
||||||
|
target_files=true
|
||||||
|
;;
|
||||||
|
-r | --repo)
|
||||||
|
shift
|
||||||
|
target_repo=rue
|
||||||
|
;;
|
||||||
|
-d | --directory)
|
||||||
|
shift
|
||||||
|
target_dirs=rue
|
||||||
|
;;
|
||||||
|
-h | --help) help_and_exit ;;
|
||||||
|
,*)
|
||||||
|
echo "Invalid option detected."
|
||||||
|
help_and_exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $target_files == "true" ]]; then
|
||||||
|
for file in $(git ls-files | grep "$1" | sed -e "s/\($1[^/]*\).*/\1/" | uniq); do
|
||||||
|
git mv "$file" "''${file//$1/$2}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $target_repo == "true" ]]; then
|
||||||
git grep -l "$1" | xargs sed -i "s/$1/$2/g"
|
git grep -l "$1" | xargs sed -i "s/$1/$2/g"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $target_dirs == "true" ]]; then
|
||||||
|
grep -rl "$1" . | xargs sed -i "s/$1/$2/g"
|
||||||
|
fi
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,57 @@ writeShellApplication {
|
||||||
inherit name;
|
inherit name;
|
||||||
runtimeInputs = [ git gnugrep findutils ];
|
runtimeInputs = [ git gnugrep findutils ];
|
||||||
text = ''
|
text = ''
|
||||||
|
|
||||||
|
function help_and_exit() {
|
||||||
|
echo
|
||||||
|
echo "Remotely installs SwarselSystem on a target machine including secret deployment."
|
||||||
|
echo
|
||||||
|
echo "USAGE: $0 [-f/-t} <from> <to>"
|
||||||
|
echo
|
||||||
|
echo "ARGS:"
|
||||||
|
echo " -f | --filenames Replace in filenames."
|
||||||
|
echo " -d | --directory Replace text in files within this directory."
|
||||||
|
echo " -r | --repo Replace text in files in the entire git repo."
|
||||||
|
echo " -h | --help Print this help."
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-f | --filenames)
|
||||||
|
shift
|
||||||
|
target_files=true
|
||||||
|
;;
|
||||||
|
-r | --repo)
|
||||||
|
shift
|
||||||
|
target_repo=rue
|
||||||
|
;;
|
||||||
|
-d | --directory)
|
||||||
|
shift
|
||||||
|
target_dirs=rue
|
||||||
|
;;
|
||||||
|
-h | --help) help_and_exit ;;
|
||||||
|
*)
|
||||||
|
echo "Invalid option detected."
|
||||||
|
help_and_exit
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
if [[ $target_files == "true" ]]; then
|
||||||
|
for file in $(git ls-files | grep "$1" | sed -e "s/\($1[^/]*\).*/\1/" | uniq); do
|
||||||
|
git mv "$file" "''${file//$1/$2}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $target_repo == "true" ]]; then
|
||||||
git grep -l "$1" | xargs sed -i "s/$1/$2/g"
|
git grep -l "$1" | xargs sed -i "s/$1/$2/g"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $target_dirs == "true" ]]; then
|
||||||
|
grep -rl "$1" . | xargs sed -i "s/$1/$2/g"
|
||||||
|
fi
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue