#!/bin/bash

cd "${HOME}"

if [ $(id -un) != root ] ; then
	echo You should use sudo.
	exit 1
fi

if [ ! -e src ] ; then
	mkdir src
fi
cd src

if [ $(basename `pwd`) != src ] ; then
	echo src dir does not exists.
	exit 1
fi

mv -f /etc/apt/sources.list    /etc/apt/sources.tmp
mv -f /etc/apt/sources.getsrc~ /etc/apt/sources.list
apt-get update

#apt-get install --no-install-recommends dpkg-dev libdpkg-perl

if [ ! -e installed_old.txt ] ; then
	rm -rf *
	dpkg -l | tail -n +6 | awk '{print $2}' | while read line
	do
		mkdir $line
		cd $line
		apt-get source $line
		cd ..
	done
	dpkg -l | tail -n +6 | awk '{print $2" "$3}' > installed_old.txt
	
else
#	Get a list of all installed packages
	dpkg -l | tail -n +6 | awk '{print $2" "$3}' > installed.txt
	
#	Uninstalled packages
	diff installed.txt installed_old.txt | grep \> | awk '{print $1}' | while read line
	do
		rm -rf $line
	done
	
#	Installed packages
	diff installed.txt installed_old.txt | grep \< | awk '{print $2}' | while read line
	do
		if [ $(cat exclude.txt | grep -o -r ^${line}$ | wc -l ) == 0 ] && [ $(echo ${line} | grep linux-headers- | wc -l ) == 0 ] ; then
			mkdir $line
			cd $line
			apt-get source $line
			cd ..
		fi
	done
	
#	Backup
	mv -f installed_old.txt installed_old_$(date +%y%m%d%H%M%S).txt
	mv -f installed.txt installed_old.txt
fi

#apt-get purge dpkg-dev libdpkg-perl

mv -f /etc/apt/sources.list /etc/apt/sources.getsrc~
mv -f /etc/apt/sources.tmp  /etc/apt/sources.list  
apt-get update

