To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / extra / soundsoftware / extract-docs.sh @ 978:bbb88c44f805

History | View | Annotate | Download (4.1 KB)

1
#!/bin/bash
2

    
3
# Run this script from anywhere
4

    
5
# Enumerate Hg repos; make sure they're up to date; extract docs for
6
# each
7

    
8
hgdir="/var/hg"
9
docdir="/var/doc"
10
logfile="/var/www/test-cannam/log/extract-docs.log"
11

    
12
redgrp="redmine"
13

    
14
apikey=""
15
apischeme="https"
16
apihost=""
17
apiuser=""
18
apipass=""
19

    
20
progdir=$(dirname $0)
21
case "$progdir" in
22
    /*) ;;
23
    *) progdir="$(pwd)/$progdir" ;;
24
esac
25

    
26
types="doxygen javadoc matlabdocs" # Do Doxygen first (it can be used for Java too)
27

    
28
for x in $types; do
29
    if [ ! -x "$progdir/extract-$x.sh" ]; then
30
	echo "Helper script not available: $progdir/extract-$x.sh"
31
	exit 1
32
    fi
33
done
34

    
35
enable_embedded()
36
{
37
    p="$1"
38
    if [ -n "$apikey" ]; then
39
	if [ -n "$apiuser" ]; then
40
	    sudo -u docgen curl -u "$apiuser":"$apipass" "$apischeme://$apihost/sys/projects/$p/embedded.xml?enable=1&key=$apikey" -d ""
41
	else
42
	    sudo -u docgen curl "$apischeme://$apihost/sys/projects/$p/embedded.xml?enable=1&key=$apikey" -d ""
43
	fi
44
    else 
45
	echo "Can't enable Embedded, API not configured" 1>&2
46
    fi
47
}
48

    
49
# We want to ensure the doc extraction is done by the unprivileged
50
# user docgen, which is not a member of any interesting group
51
# 
52
# To this end, we create the tmpdir with user docgen and group
53
# www-data, and use the www-data user to pull out an archive of the Hg
54
# repo tip into a location beneath that, before using the docgen user
55
# to extract docs from that location and write them into the tmpdir
56

    
57
# Same tmpdir for each project: we delete and recreate to avoid
58
# cleanup duty from lots of directories being created
59
#
60
tmpdir=$(mktemp -d "$docdir/tmp_XXXXXX")
61

    
62
fail()
63
{
64
    message="$1"
65
    echo "$message" 1>&2
66
    case "$tmpdir" in
67
	*/tmp*) rm -rf "$tmpdir";;
68
	*);;
69
    esac
70
    exit 1
71
}
72

    
73
case "$tmpdir" in
74
    /*) ;;
75
    *) fail "Temporary directory creation failed";;
76
esac
77

    
78
chown docgen.www-data "$tmpdir" || fail "Temporary directory ownership change failed"
79
chmod g+rwx "$tmpdir" || fail "Temporary directory permissions change failed"
80

    
81
for projectdir in "$hgdir"/* ; do
82

    
83
    if [ -d "$projectdir" ] && [ -d "$projectdir/.hg" ]; then
84

    
85
	if ! sudo -u www-data hg -R "$projectdir" -q update; then
86
	    echo "Failed to update Hg in $projectdir, skipping" 1>&2
87
	    continue
88
	fi
89

    
90
	project=$(basename "$projectdir")
91

    
92
	tmptargetdir="$tmpdir/doc"
93
	snapshotdir="$tmpdir/hgsnapshot"
94

    
95
	rm -rf "$tmptargetdir" "$snapshotdir"
96

    
97
	mkdir -m 770 "$tmptargetdir" || fail "Temporary target directory creation failed"
98
	chown docgen.www-data "$tmptargetdir" || fail "Temporary target directory ownership change failed"
99

    
100
	mkdir -m 770 "$snapshotdir" || fail "Snapshot directory creation failed"
101
	chown docgen.www-data "$snapshotdir" || fail "Snapshot directory ownership change failed"
102

    
103
	hgparents=$(sudo -u www-data hg -R "$projectdir" parents)
104
	if [ -z "$hgparents" ]; then
105
	    echo "Hg repo at $projectdir has no working copy (empty repo?), skipping"
106
	    continue
107
	else
108
	    echo "Found non-empty Hg repo: $projectdir for project $project"
109
	fi
110

    
111
	if ! sudo -u www-data hg -R "$projectdir" archive -r tip -t files "$snapshotdir"; then
112
	    echo "Failed to pick archive from $projectdir, skipping" 1>&2
113
	    continue
114
	fi
115

    
116
	targetdir="$docdir/$project"
117

    
118
	echo "Temporary dir is $tmpdir, temporary doc dir is $tmptargetdir, snapshot dir is $snapshotdir, eventual target is $targetdir"
119

    
120
	for x in $types; do
121
	    if sudo -u docgen "$progdir/extract-$x.sh" "$project" "$snapshotdir" "$tmptargetdir" >> "$logfile" 2>&1; then
122
		break
123
	    else
124
		echo "Failed to extract via type $x"
125
	    fi
126
	done
127

    
128
        if [ -f "$tmptargetdir/index.html" ]; then
129
	    echo "Processing resulted in an index.html being created, looks good!"
130
	    if [ ! -d "$targetdir" ] || [ ! -f "$targetdir/index.html" ]; then
131
		echo "This project hasn't had doc extracted before: enabling Embedded"
132
		enable_embedded "$project"
133
	    fi
134

    
135
	    if [ -d "$targetdir" ]; then
136
		mv "$targetdir" "$targetdir"_"$$" && \
137
		    mv "$tmptargetdir" "$targetdir" && \
138
		    rm -rf "$targetdir"_"$$"
139
		chgrp -R "$redgrp" "$targetdir"
140
	    else 
141
		mv "$tmptargetdir" "$targetdir"
142
		chgrp -R "$redgrp" "$targetdir"
143
	    fi
144
	else
145
	    echo "Processing did not result in an index.html being created"
146
	fi
147
    fi
148
done
149

    
150
rm -rf "$tmpdir"