diff options
author | Erich Eckner <git@eckner.net> | 2019-05-04 20:47:39 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2019-05-04 20:49:27 +0200 |
commit | 7cc5d3d75699376bf9f0df78f437143f0cb3b65d (patch) | |
tree | be0623239a2166df27ccf00e6ee8b62ef09474a5 /bin/clean-git | |
parent | 0947701cd9dc60a9c8dced9e8ddebc53c64c4d5d (diff) | |
download | builder-7cc5d3d75699376bf9f0df78f437143f0cb3b65d.tar.xz |
bin/clean-git: reclone in case we honly have one remote
Diffstat (limited to 'bin/clean-git')
-rwxr-xr-x | bin/clean-git | 29 |
1 files changed, 25 insertions, 4 deletions
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 |