summaryrefslogtreecommitdiffstats
path: root/bin/chkmanifest
blob: 02127cc89966cb4eb439f0eb0de8284e2c4f949c (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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/bin/sh
#
# Copyright by The HDF Group.
# Copyright by the Board of Trustees of the University of Illinois.
# All rights reserved.
#
# This file is part of HDF5.  The full HDF5 copyright notice, including
# terms governing use, modification, and redistribution, is contained in
# the files COPYING and Copyright.html.  COPYING can be found at the root
# of the source code distribution tree; Copyright.html can be found at the
# root level of an installed copy of the electronic HDF5 document set and
# is linked from the top-level documents page.  It can also be found at
# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
# access to either file, you may request a copy from help@hdfgroup.org.
#

# Check that all the files in MANIFEST exist and that (if this is a
# SVN checkout) that all the SVN-managed files appear in the
# MANIFEST.

verbose=yes
MANIFEST=/tmp/HD_MANIFEST.$$

# Main
test "$verbose" && echo "   Checking MANIFEST..." 1>&2
# clean up $MANIFEST file when exits
trap "rm -f $MANIFEST" 0

# Only split lines on newline, not whitespace
set -f
IFS='
'

# First make sure i am in the directory in which there is an MANIFEST file
# and then do the checking from there.  Will try the following,
# current directory, parent directory, the directory this command resides.
if [ -f MANIFEST ]; then
    continue
elif [ -f ../MANIFEST ]; then
    cd ..
else
    commanddir=`dirname $0`
    if [ -d "$commanddir" -a -f $commanddir/MANIFEST ]; then
	cd $commanddir
	continue
    else
	echo MANIFEST file not found. Abort.
	exit 1
    fi
fi

# Check for duplicate entries.  This can be done at any time, but it may as 
# well be sooner so that if something else fails the presence of duplicates
# will already be known.
errcode=0
DUPLICATES=`perl -ne 's/#.*//; next if /^\s*$/; if ($uniq{$_}++) { print $_; }' MANIFEST`
if [ "$DUPLICATES" ]; then
   cat 1>&2 <<EOF
These entries appear more than once in the MANIFEST:  
$DUPLICATES
Please remove the duplicate lines and try again.

EOF
errcode=1 
fi

# Copy the manifest file to get a list of file names.
grep '^\.' MANIFEST | expand | cut -f1 -d' ' >$MANIFEST

for file in `cat $MANIFEST`; do
    if [ ! -f $file ]; then
       echo "- $file"
       fail=yes
    fi
done

# Get the list of files under version control and check that they are
# present.
#
# First get a list of all the pending files with svn stat and
# check those.
svn_stat="$(svn stat -q)"
for file in $svn_stat; do
    letter="$(echo $file | head -c 1)"
    if [ "$letter" = "A" ]; then
        path=`echo $file | sed 's/^A\s*/\.\//g'`
        # Ignore directories
        if [ ! -d $path ]; then
            if (grep ^$path$ $MANIFEST >/dev/null); then
                :
            else
                echo "+ $path"
                fail=yes
            fi
        fi
    fi
done

# Next check svn info, which gets a list of all files that are
# checked in.
svn_ls="$(svn ls -R)"
for file in $svn_ls; do
    path="./${file}"
done



# Finish up
if [ "X$fail" = "Xyes" ]; then
    cat 1>&2 <<EOF
The MANIFEST is out of date. Files marked with a minus sign (-) no
longer exist; files marked with a plus sign (+) are SVN-managed but do
not appear in the MANIFEST.  Please remedy the situation and try again.
EOF
    exit 1
fi

if [ $errcode -ne 0 ]; then
    exit 1
fi 

test "$verbose" && echo "   The MANIFEST is up to date." 1>&2
exit 0