11#! /usr/bin/env bash
22set -eu -o pipefail
33
4- function tick () {
4+ function tick() {
55 if test -z " ${tick+set} "
66 then
77 tick=1112911993
@@ -13,9 +13,25 @@ function tick () {
1313 export GIT_COMMITTER_DATE GIT_AUTHOR_DATE
1414}
1515
16- tick
17- function commit() {
18- local message=${1:? first argument is the commit message}
16+ function force_tag() {
17+ local name head_oid common_dir
18+ name=${1:? argument the tag name}
19+
20+ # This should only be needed with 32-bit `git`, so fail otherwise.
21+ word_size=" $(
22+ git --version --build-options |
23+ awk ' $1 == "sizeof-size_t:" { print $2 }'
24+ ) "
25+ (( word_size == 4 ))
26+
27+ # Manually create the tag.
28+ head_oid=" $( git rev-parse HEAD) "
29+ common_dir=" $( git rev-parse --git-common-dir) "
30+ (set -o noclobber; echo " $head_oid " > " $common_dir /refs/tags/$name " )
31+ }
32+
33+ function tagged_commit() {
34+ local message=${1:? first argument is the commit message and tag name}
1935 local date=${2:- }
2036 local file=" $message .t"
2137 echo " $1 " > " $file "
@@ -26,22 +42,24 @@ function commit() {
2642 tick
2743 fi
2844 git commit -m " $message "
29- git tag " $message "
45+ git tag -- " $message " || force_tag " $message "
3046}
3147
48+ tick
49+
3250# adapted from git/t/t5318 'lower layers have overflow chunk'
3351UNIX_EPOCH_ZERO=" @0 +0000"
3452FUTURE_DATE=" @4147483646 +0000"
3553
3654git init
3755git config commitGraph.generationVersion 2
3856
39- commit future-1 " $FUTURE_DATE "
40- commit old-1 " $UNIX_EPOCH_ZERO "
57+ tagged_commit future-1 " $FUTURE_DATE "
58+ tagged_commit old-1 " $UNIX_EPOCH_ZERO "
4159git commit-graph write --reachable
42- commit future-2 " $FUTURE_DATE "
43- commit old-2 " $UNIX_EPOCH_ZERO "
60+ tagged_commit future-2 " $FUTURE_DATE "
61+ tagged_commit old-2 " $UNIX_EPOCH_ZERO "
4462git commit-graph write --reachable --split=no-merge
45- commit extra
63+ tagged_commit extra
4664# this makes sure it's actually in chain format.
4765git commit-graph write --reachable --split=no-merge
0 commit comments