Merge changes Ifc4487b1,I0332e230
* changes:
git-gc-preserve: improve error handling
Make git-gc-preserve script executable
diff --git a/contrib/git-gc-preserve b/contrib/git-gc-preserve
old mode 100644
new mode 100755
index 54b8fca..73717fe
--- a/contrib/git-gc-preserve
+++ b/contrib/git-gc-preserve
@@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-usage() { # error_message
+usage() { # exit code
cat <<-EOF
NAME
git-gc-preserve - Run git gc and preserve old packs to avoid races for JGit
@@ -28,6 +28,14 @@
repository since it does not attempt to implement the file locking
which git gc --auto does [3].
+ Failure Exit Codes
+ 1: General failure
+ 2: Couldn't determine repository path. If the current working directory
+ is outside of the working tree of the git repository use git option
+ --git-dir to pass the root path of the repository.
+ E.g.
+ $ git --git-dir ~/git/foo gc-preserve
+
[1] https://git.eclipse.org/r/c/jgit/jgit/+/87969
[2] https://git.eclipse.org/r/c/jgit/jgit/+/122288
[3] https://github.com/git/git/commit/64a99eb4760de2ce2f0c04e146c0a55c34f50f20
@@ -49,7 +57,7 @@
across missing objects which might be caused by a concurrent run of
git gc.
EOF
- exit
+ exit "$1"
}
# prune preserved packs if gc.prunepreserved == true
@@ -74,7 +82,7 @@
return 0
fi
local packdir=$1/objects/pack
- pushd "$packdir" >/dev/null || exit
+ pushd "$packdir" >/dev/null || exit 1
mkdir -p preserved
printf "Preserving packs: "
count=0
@@ -85,7 +93,7 @@
fi
done
echo "$count, done."
- popd >/dev/null || exit
+ popd >/dev/null || exit 1
}
# pack-0...2.pack to pack-0...2.old-pack
@@ -100,7 +108,7 @@
while [ $# -gt 0 ] ; do
case "$1" in
- -u|-h) usage ;;
+ -u|-h) usage 0 ;;
esac
shift
done
@@ -108,10 +116,9 @@
repopath=$(git rev-parse --git-dir)
if [ -z "$repopath" ]; then
- usage
- exit $?
+ usage 2
fi
prune_preserved "$repopath"
preserve_packs "$repopath"
-git gc ${args:+"$args"}
+git gc ${args:+"$args"} || { echo "git gc failed"; exit "$?"; }