#!/bin/bash . driglibash-base #prerequisite: creation_repo.sh has been run files_to_keep='sample0' Help() { echo " NAME performance_tests.sh SYNOPSIS performance_tests.sh [-h] [-a] [-n number] [SSH LINK to en empty remote git repository] OPTIONS -a excutes all the tests. -n [number] executes test [number] -h prints the help. DESCRIPTION This script is in writing. It allows you to measure memory and bandwidth usage for different method of cloning on the remote repository given. TEST0: classic cloning TEST1: --single-branch " } test0(){ section TEST0 echo "TEST 0 : case of classic cloning." git clone --progress $1 2> cloning_text mem0=$(du ./performance_testing | tail -n1 | tr -cd [:digit:]) bw0=$(grep -e "Receiving objects:" cloning_text| grep -o "[[:digit:].]* MiB " | tail -n1) echo "memory usage in a classic cloning : $mem0" echo "bandwidth usage : $bw0" run rm -rf performance_testing } test1(){ section TEST1 echo "TEST 1 : case of --single-branch cloning." git clone --progress --single-branch $1 2> cloning_text mem1=$(du ./performance_testing | tail -n1 | tr -cd [:digit:]) bw1=$(grep -e "Receiving objects:" cloning_text| grep -o "[[:digit:].]* MiB " | tail -n1) echo "memory usage in a --single-branch cloning : $mem1" echo "bandwidth usage : $bw1" run rm -rf performance_testing } test2(){ section TEST2 echo "TEST 2 : case of --depth=1 --no-single-branch" git clone --progress --depth=1 --no-single-branch $1 2> cloning_text mem2=$(du ./performance_testing | tail -n1 | tr -cd [:digit:]) bw2=$(grep -e "Receiving objects:" cloning_text| grep -o "[[:digit:].]* MiB " | tail -n1) echo "memory usage in a --depth=1 --no-single-branch cloning : $mem2" echo "bandwidth usage : $bw2" run rm -rf performance_testing } test3(){ section TEST3 echo "TEST 3 : case of --depth=1 with single-branch (default))" git clone --progress --single-branch --depth=1 $1 2> cloning_text mem3=$(du ./performance_testing | tail -n1 | tr -cd [:digit:]) bw3=$(grep -e "Receiving objects:" cloning_text| grep -o "[[:digit:].]* MiB " | tail -n1) echo "memory usage in a --depth=1 with single-branch cloning : $mem3" echo "bandwidth usage : $bw3" run rm -rf performance_testing } test4(){ section TEST4 run echo 'TEST 4 : case of sparse-checking only some files with depth=1' run mkdir performance_testing #to do : isoler le nom de l'URL run cd performance_testing run git init -q run git config core.sparsecheckout true run echo $files_to_keep >> .git/info/sparse-checkout run git remote add -f origin $1 &> cloning_text #to do : find a way to do this quietly/why isn't it writing in cloning_text? echo 'juste avant le pull' run git pull --progress origin main 2> cloning_text #to do : adapter au cas où ce soit master et pas main mem4=$(du . | tail -n1 | tr -cd [:digit:]) bw4=$(grep -e "Receiving objects:" cloning_text| grep -o "[[:digit:].]* MiB " | tail -n1) echo "memory usage in a --depth=1 with sparse checking only $files_to_keep : $mem4" echo "bandwidth usage : $bw4" cd .. run rm -rf performance_testing } #est-ce que ça fait depth=1 ? while getopts ":hn:a" option; do case $option in h) # display Help Help exit;; \?) # Invalid option echo "Error: Invalid option" exit;; n) TEST_NUM=$OPTARG;; a) ALL_TESTS=true;; esac done shift "$(($OPTIND -1))" #so that the cloning link is in $1 no matter how many options were used if [ -z "$1" ]; then echo "Error: No repository link provided" Help die else REPO_LINK=$1 fi if [ "$ALL_TESTS" = true ]; then test0 $REPO_LINK test1 $REPO_LINK test2 $REPO_LINK test3 $REPO_LINK test4 $REPO_LINK elif [ -n "$TEST_NUM" ]; then case $TEST_NUM in 0) test0 $REPO_LINK;; 1) test1 $REPO_LINK;; 2) test2 $REPO_LINK;; 3) test3 $REPO_LINK;; 4) test4 $REPO_LINK;; *) echo "Error: Invalid test number" die;; esac else Help fi