GitRoot

craft your forge, build your project, grow your community freely
  1#!/usr/bin/env bash
  2
  3# SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
  4#
  5# SPDX-License-Identifier: EUPL-1.2
  6
  7ROOT_REPO_NAME="root"
  8REPO1_NAME="repo1"
  9REPO2_NAME="repo2"
 10
 11SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
 12
 13SERVER_PORT="4545"
 14SERVER_DATA_DIR="/tmp/gitrootData"
 15
 16NB_BRANCH=50
 17NB_COMMIT=50
 18
 19quiet_git() {
 20    echo "🚀 git $@" >> /tmp/mylog.txt
 21    GIT_PROTOCOL=version=1 GIT_TRACE=true GIT_TRACE_PACKET=true git "$@" &>> /tmp/mylog.txt
 22}
 23
 24real_quiet_git() {
 25    git "$@" &>> /dev/null
 26}
 27
 28report() {
 29    echo "$1" >> /tmp/mylog.txt
 30    echo "$1"
 31}
 32
 33APP=$(lsof -i tcp:${SERVER_PORT} | awk 'NR!=1 {print $2}') 
 34if [ -z "$APP" ]; then
 35    report "🟢 Gitroot not launched"
 36else 
 37    kill ${APP}
 38    report "🟢 Gitroot killed"
 39fi
 40
 41##### launch gitroot
 42report "🏁 launch gitroot"
 43
 44cd ${SCRIPT_DIR}/../server
 45GIT_TRACE_PACKET=true go run . -data="${SERVER_DATA_DIR}" &>> /tmp/mylog.txt &
 46
 47sleep 1.3
 48
 49cd /tmp/${REPO1_NAME}
 50
 51real_quiet_git checkout main
 52
 53for (( i=0; i<=$NB_BRANCH; i++ ))
 54do
 55  real_quiet_git branch -D bigCommitsBranch_$i
 56done
 57
 58for (( i=0; i<=$NB_BRANCH; i++ ))
 59do
 60  SHOULD_START_MAIN=$(shuf -i 0-2 -n 1)
 61  if (( SHOULD_START_MAIN > 1 )); then
 62    real_quiet_git checkout main
 63  elif (( SHOULD_START_MAIN > 0 )); then
 64    real_quiet_git checkout -
 65  fi
 66
 67  real_quiet_git checkout -b bigCommitsBranch_$i
 68
 69  for (( j=0; j<=$NB_COMMIT; j++ ))
 70  do
 71    echo "${i}_${j}" >> issues/bigCommits.md
 72    real_quiet_git add .
 73    real_quiet_git commit -m "my ${i}_${j} commit"
 74  done
 75
 76  quiet_git push -f origin bigCommitsBranch_$i
 77  report "🟢 push bigCommitsBranch_$i"
 78done
 79
 80cd /tmp/${REPO1_NAME}_2
 81real_quiet_git checkout main
 82quiet_git pull --rebase
 83
 84cd /tmp/${REPO1_NAME}
 85
 86for (( i=0; i<=$NB_BRANCH; i++ ))
 87do
 88  real_quiet_git checkout bigCommitsBranch_$i
 89
 90  RESET=$(shuf -i 0-$NB_COMMIT -n 1)
 91  real_quiet_git reset --hard HEAD~$RESET
 92
 93  count=$((NB_COMMIT-RESET))
 94
 95  for (( j=0; j<=$count; j++ ))
 96  do
 97    echo "${i}_${j}_2" >> issues/bigCommits.md
 98    real_quiet_git add .
 99    real_quiet_git commit -m "my ${i}_${j}_2 commit"
100  done
101
102  real_quiet_git push -f origin bigCommitsBranch_$i
103  report "🟢 push bigCommitsBranch_$i"
104done
105
106cd /tmp/${REPO1_NAME}_2
107quiet_git pull --rebase