fixup.cc5711424b7ae36276a40c06ede5d95f87ca20f0
[git/dscho.git] / my-repair-corrupted.sh
blob474eca7a69294ae3b530914aa9d3c1b2626544d6
1 #!/bin/sh
3 loose_path () {
4 echo $(git rev-parse --git-dir)/objects/$(echo $1 |
5 sed "s/^../&\//")
8 repair () {
9 remote=$(git config remote.origin.url)
10 host=${remote%%:*}
11 path=${remote#*:}
13 echo "getting $* from host $host path $path"
15 for object
17 rm -f $(loose_path $object)
18 echo $object
19 done |
20 ssh $host "cd $path && git pack-objects --stdout" |
21 git index-pack --stdin --fix-thin
24 autorepair () {
25 objects=$(git fsck 2>&1 |
26 sed -n "s/^.*\([a-f0-9]\{40\}\).*$/\1/p" |
27 sort |
28 uniq)
29 test -z "$objects" && {
30 echo "No corrupt objects found"
31 exit 1
33 repair $objects
36 case $# in
38 while true
40 autorepair
41 done
44 case "$*" in
45 --delete)
46 while true
48 corrupt=$(git fsck 2>&1 |
49 sed -n "s/^fatal: object \(.*\) is corrupted/\1/p" |
50 sort | uniq)
51 test -z "$corrupt" && break
52 for object in $corrupt
54 echo removing $object
55 rm -f $(loose_path $object)
56 done
57 done
60 repair $*
62 esac
64 esac