65 lines · 1.6 KB · Shell
RawDownload
#!/usr/bin/env bashset -eu -o pipefail function tick() {  if test -z "${tick+set}"  then    tick=1112911993  else    tick=$(($tick + 60))  fi  GIT_COMMITTER_DATE="$tick -0700"  GIT_AUTHOR_DATE="$tick -0700"  export GIT_COMMITTER_DATE GIT_AUTHOR_DATE} function force_tag() {  local name head_oid common_dir  name=${1:?argument the tag name}   # This should only be needed with 32-bit `git`, so fail otherwise.  word_size="$(    git --version --build-options |      awk '$1 == "sizeof-size_t:" { print $2 }'  )"  ((word_size == 4))   # Manually create the tag.  head_oid="$(git rev-parse HEAD)"  common_dir="$(git rev-parse --git-common-dir)"  (set -o noclobber; echo "$head_oid" > "$common_dir/refs/tags/$name")} function tagged_commit() {  local message=${1:?first argument is the commit message and tag name}  local date=${2:-}  local file="$message.t"  echo "$1" > "$file"  git add -- "$file"  if [ -n "$date" ]; then    export GIT_COMMITTER_DATE="$date"  else    tick  fi  git commit -m "$message"  git tag -- "$message" || force_tag "$message"} tick # adapted from git/t/t5318 'lower layers have overflow chunk'UNIX_EPOCH_ZERO="@0 +0000"FUTURE_DATE="@4147483646 +0000" git initgit config commitGraph.generationVersion 2 tagged_commit future-1 "$FUTURE_DATE"tagged_commit old-1 "$UNIX_EPOCH_ZERO"git commit-graph write --reachabletagged_commit future-2 "$FUTURE_DATE"tagged_commit old-2 "$UNIX_EPOCH_ZERO"git commit-graph write --reachable --split=no-mergetagged_commit extra# this makes sure it's actually in chain format.git commit-graph write --reachable --split=no-merge