Table of Contents

Ioan-Mihail Stan

Educație

Competențe IT

Site-uri preferate

Preferințe

Criteriu “Valoare”
Limbaj de programare C/C++
Sistem de operare (distribuție) Mint /Linux
Aplicație favorită MinGW
Personalitate IT preferată Dennis Ritchie
Companie preferată IBM
#!/bin/bash
#Stan Ioan-Mihail
#311 CA

cd $1
git checkout master &> /dev/null

#task 1
#comenzile imi afiseaza toate linile unde apare cuvantul Author ; separ dupa delimitatorul " " -spatiu in coloane astfel de la 2 pana la final de linie mi se vor afisa practic numele + mailurile autorilor de commituri (apelul functiei cut ), nume pe care le sortez corespunzator si carora le numar aparitiile ( sort | uniq -c | uniq -g -r )
if test  $2 = "-n"  ; then
	if test $4 = "top_contributors" ; then
		git log | grep "Author:" | head -$3 |sed -e 's/^[ \t]*//'| cut -n -d ' ' -f 2- | sort | uniq -c | sort -g -r | head -$5
#in cazul in care nu exista argumentul 5 ($5) head - va afisa toate liniile fisierului astfel punctez doua situatii posibile ( cand sunt trimisi 4 sau 5 parametrii ) 
#exista posibilitatea ca path-ul unui fisier sa fie deplasat spre dreapta cu delimitatorii tab sau space; pentru a lua in considerare acea situatie am apleat la functia sed 
	fi
elif test $2 = "top_contributors" ; then
	if test $# -eq 3 ; then
		git log| grep "Author:"|sed -e 's/^[ \t]*//'| cut -n -d ' ' -f 2- | sort | uniq -c | sort -g -r |head -$3 
	fi
fi
#task 2
#caut liniile care incep cu caractere numerice din statistica numstat a git log-ului; caut practic fisierele dupa statistica insertions
if test $2 = "-n" ; then
	if test $4 = "added_lines" ; then 
		if test $# -eq 5; then
			git log -$3 --numstat | grep ^[0-9] | tr "\t" " " | grep " $5" | cut -f 1 | awk '{contor+=$1} END {print contor}'
#exista posibilitatea ca un fisier cautat intr-o lista cu grep sa se gaseasca in 2 ierarhi de foldere diferite astfel pentru a gasi exact path-ul cerut schimb tab-urile cu spatii si caut exact folderul cerut punand un spatiu inainte de nume 
		else
			git log -$3 --numstat | grep ^[0-9] | cut -f 1 | awk '{contor+=$1} END {print contor}'
#functia awk imi va aduna tot ce se gaseste pe coloana 1 din "fisierul" creat din succesiunea de pipe-uri
		fi
	fi
else
	if test  $2 = "added_lines" ; then
		if test $# -eq 3; then
                        git log --numstat | grep ^[0-9] |tr "\t" " " | grep " $3" | cut -f 1 | awk '{contor+=$1} END {print contor}'
        	else
                        git log --numstat | grep ^[0-9] | cut -f 1 | awk '{contor+=$1} END {print contor}'
						
                fi
	fi
fi
#task 3
#realizez statistici dupa coloana deletions din statistica numstat
if test $2 = "-n" ; then
	if test $4 = "deleted_lines" ; then 
		if test $# -eq 5; then
			git log -$3 --numstat | grep ^[0-9] |tr "\t" " " | grep " $5" | awk '{print $2, $1, $3}' | cut -d " " -f 1  | awk '{contor+=$1} END {print contor}'
		else
			git log -$3 --numstat | grep ^[0-9] | awk '{print $2, $1, $3}'| cut -d " " -f 1  | awk '{contor+=$1} END {print contor}'
#prima functie awk imi interschimba coloane
		fi
	fi
else
	if test  $2 = "deleted_lines" ; then
		if test $# -eq 3; then
                        git log --numstat | grep ^[0-9] | tr "\t" " " | grep " $3" | awk '{print $2, $1, $3}' | cut -d " " -f 1  | awk '{contor+=$1} END {print contor}'
			
                else
                        git log --numstat | grep ^[0-9]|tr "\t" " " | awk '{print $2, $1, $3}'| cut -d " " -f 1  | awk '{contor+=$1} END {print contor}'
		fi
	fi
fi
#task 4
#statistica numstat a git log imi afiseaza toate fisierele modificate in vreun fel; liniile cu path-ul fisierelor sunt cele care incep cu caractere numerice sau - ; wc -l numara liniile dintr-un fisier
if test $2 = "-n" ; then
	if test $4 = "touched_files" ; then 
		if test $# -eq 5; then
			git log -$3 --numstat --author="$5" | grep ^[0-9-] | cut -f 3 | sort | uniq | wc -l
		else
			git log -$3 --numstat | grep ^[0-9-] | cut -f 3 | sort | uniq | wc -l
 		fi
	fi
else
	if test  $2 = "touched_files" ; then
		if test $# -eq 3; then
                        git log --numstat --author="$3" | grep ^[0-9-] | cut -f 3 | sort |uniq | wc -l
                else
                        git log --numstat | grep -E ^[0-9-] | cut -f 3 | sort | uniq | wc -l
                fi
	fi
fi

#task 5
#git log branch1..branch2 afiseaza commiturile din branch-ul 2 care nu se gasesc in primul
if test $2 = "diff_branches" ; then
	echo "Commits only in branch $3:"
	git log $4..$3 --oneline |  cut -d " " -f 2-
	echo
	echo "Commits only in branch $4:"
	git log $3..$4 --oneline |  cut -d " " -f 2-
fi