For a project i am doing i needed to checkout a subversion repo from within an installer. This ofcourse is not that hard, but i wanted something extra.
I was searching for a way to show a progressbar when doing a svn checkout (svn co) and could not find a sollution for it. So i came up with the following sollution.
First, i needed to know how many files i was going to checkout of the subversion repository. To get this number i’m going to use the following bash statement.
n=$(svn info -R svn://svn/project/trunk | grep "URL: " | uniq | wc -l)
Great, ‘$n’ now contains a number of files in my project, we can use that number to calculate the percentage. But to do that i needed to know how far the checkout is.
Subversion will output each file on a new line. We could pipe that into a while loop and keep track of the progress.
n=$(svn info -R svn://svn/project/trunk | grep "URL: " | uniq | wc -l)
i=1
while read line filename
do
counter=$(( 100*(++i)/n))
echo -e "($counter %)\n"
echo -e "filename: $filename \n"
done < <(svn co svn://svn/project/trunk /var/www/project)
The script above prints a percentage for each line.
Now let’s put all this into a dialog.
dialog --backtitle "Subversion Installer" --title "SVN Checkout" --gauge "Getting total file count" 7 120 < <(
n=$(svn info -R svn://svn/project/trunk | grep "URL: " | uniq | wc -l)
i=1
while read line filename
do
counter=$(( 100*(++i)/n))
echo "XXX"
echo "$counter"
echo "filename: $filename"
echo "XXX"
done < <(svn co svn://svn/project/trunk /var/www/project)
)
if you run this you’ll get a nice process indicator. Yay!