From 7cc5d3d75699376bf9f0df78f437143f0cb3b65d Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Sat, 4 May 2019 20:47:39 +0200 Subject: bin/clean-git: reclone in case we honly have one remote --- bin/clean-git | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) (limited to 'bin/clean-git') diff --git a/bin/clean-git b/bin/clean-git index d8f5166..0b892a2 100755 --- a/bin/clean-git +++ b/bin/clean-git @@ -9,9 +9,30 @@ for repo in ${repo_names}; do eval 'repo_path="${repo_paths__'"${repo}"'}"' - printf 'cleaning %s (%s) ...\n' \ - "${repo}" \ - "${repo_path}" - ionice -n 7 git -C "${repo_path}" gc + while [ "${repo_path}" != "${repo_path%/}" ]; do + repo_path="${repo_path%/}" + done + remote=$( + git -C "${repo_path}" remote -v \ + | awk '{print $2}' \ + | sort -u + ) + if printf '%s\n' "${remote}" \ + | wc -l \ + | grep -xqF 1 ; then + printf 'recloning %s (%s) ...\n' \ + "${repo}" \ + "${repo_path}" + git clone --bare "${repo_path}" "${repo_path}.new" + git -C "${repo_path}.new" remote set-url origin "${remote}" + mv "${repo_path}" "${repo_path}.old" + mv "${repo_path}.new" "${repo_path}" + rm -rf --one-file-system "${repo_path}.old" + else + printf 'cleaning %s (%s) ...\n' \ + "${repo}" \ + "${repo_path}" + ionice -n 7 git -C "${repo_path}" gc + fi printf '... done\n' done -- cgit v1.2.3