summaryrefslogtreecommitdiffstats
path: root/update_all_submodules
blob: 563b3bd79ba73cbd41db0ccb2e5ef50936ba9f89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash

if [[ -e /var/lock/update-tde-git-submodules ]]; then
        echo "TDE GIT submodules are currently being updated"
        echo "If this is not the case, please remove the lockfile /var/lock/update-tde-git-submodules"
        exit 0
fi

if [[ ! -e .git ]] ||
   [[ -z "`git rev-parse --git-dir 2>/dev/null`" ]]; then
	echo "Current directory does not contain a .git folder.  Exiting..."
	exit 1
fi

branch=`git symbolic-ref -q HEAD | sed "s|^refs/heads/||"`
if [[ -z "$branch" ]] ||
   [[ -z "`git rev-parse --symbolic-full-name --remotes=\"*/$branch\"`" ]]; then
	echo "There is not active upstream branch.  Exiting..."
	exit 1
fi

# check git abilities
if [[ -n "`git status --help 2>/dev/null|grep -- '--ignore-submodules'`" ]]; then
  GIT_IGNORE_SUBMODULES="--ignore-submodules"
fi

touch /var/lock/update-tde-git-submodules

PARENTDIR=$PWD
echo "Working in $PARENTDIR"
git pull
if [[ ! -z "`git status --porcelain $GIT_IGNORE_SUBMODULES`" ]]; then
	git reset --hard HEAD
	git clean -dxff
fi

exec 3< submodules
while read <&3
do
	cd $PARENTDIR
	DIR2UPDATE=$REPLY
	if [[ $DIR2UPDATE != "" ]]; then
		echo "Attempting to reset submodule $DIR2UPDATE"
		cd $PARENTDIR/$DIR2UPDATE/..
		cd `git rev-parse --show-toplevel`
		if [[ -z "`grep \"^Updated: $PWD$\" /var/lock/update-tde-git-submodules`" ]]; then
			echo "Updated: $PWD" >>/var/lock/update-tde-git-submodules
			git submodule init
			git submodule update
		fi
		cd $PARENTDIR/$DIR2UPDATE
		if [[ ! -z "`git status --porcelain $GIT_IGNORE_SUBMODULES`" ]]; then
			git reset --hard HEAD
			git clean -dxff
		fi
		git checkout $branch
		git pull
		cd ..
		cd `git rev-parse --show-toplevel`
		echo "Committing changes to $PWD"
		if [[ ! -z "`git status --porcelain $PARENTDIR/$DIR2UPDATE`" ]]; then
			git add $PARENTDIR/$DIR2UPDATE
			git commit $PARENTDIR/$DIR2UPDATE -m "Reset submodule $DIR2UPDATE to latest HEAD"
		fi
		if [[ "`git rev-parse HEAD`" != "`git rev-parse origin/$branch`" ]]; then
			git push origin HEAD
		fi
	fi
done
exec 3>&-

# Let the disk subsystem recover
sleep 60

rm /var/lock/update-tde-git-submodules