index : builder | |
Archlinux32 build system | gitolite user |
summaryrefslogtreecommitdiff |
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 | |
parent | 0947701cd9dc60a9c8dced9e8ddebc53c64c4d5d (diff) |
-rwxr-xr-x | bin/clean-git | 29 |
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 |