mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-18 15:15:56 +08:00
[svn-r26311] Merged r26266-7 from features/autotools_rework
Updates the bin/chkmanifest script so that it parses the output of svn commands instead of hacking at the .svn/entries file. This will make the script more future-proof and allows it to work with current Subversion repositories. Tested on: jam (bin/chkmanifest only)
This commit is contained in:
parent
aad4250bd6
commit
a83b6d6651
138
bin/chkmanifest
138
bin/chkmanifest
@ -20,75 +20,17 @@
|
||||
|
||||
verbose=yes
|
||||
MANIFEST=/tmp/HD_MANIFEST.$$
|
||||
SVNENTRY=/tmp/HD_SVNENTRY.$$
|
||||
|
||||
# function definitions
|
||||
|
||||
GETSVNENTRIES_13 ()
|
||||
# Purpose: Extract filenames from the svn v1.3.* entries file
|
||||
# $1: directory name in which the svn entries is.
|
||||
# steps:
|
||||
# 1. remove all single line entries so that step 2 does not fail on them.
|
||||
# 2. merge all multiple lines entries into single lines.
|
||||
# 3. remove all non file entries.
|
||||
# 4. insert a blank line because some entries files has no kind="file"
|
||||
# entry and ed does not like to do g on an empty file.
|
||||
# 5. remove everything except the file name.
|
||||
# 6. remove all blank lines, including the inserted one.
|
||||
{
|
||||
cp $1/entries $SVNENTRY
|
||||
chmod u+w $SVNENTRY # entries file is not writable.
|
||||
ed - $SVNENTRY <<EOF
|
||||
g/^<.*>$/d
|
||||
g/^</.,/>$/j
|
||||
v/kind="file"/d
|
||||
a
|
||||
|
||||
.
|
||||
g/.*name="/s///
|
||||
g/".*/s///
|
||||
g/^$/d
|
||||
w
|
||||
q
|
||||
EOF
|
||||
cat $SVNENTRY
|
||||
rm $SVNENTRY
|
||||
}
|
||||
|
||||
GETSVNENTRIES_14 ()
|
||||
# Purpose: Extract filenames from the svn v1.4.* entries file
|
||||
# $1: directory name in which the svn entries is.
|
||||
# steps:
|
||||
# 1. all valid files are followed by a line containing "file" only.
|
||||
# 2. find them by looking for "file" first, then mark its preceding line as
|
||||
# wanted.
|
||||
# 3. remove all non-marked line.
|
||||
# 4. insert a blank line because some entries files has no kind="file"
|
||||
# entry and ed does not like to do g on an empty file.
|
||||
# 5. remove the marks.
|
||||
{
|
||||
cp $1/entries $SVNENTRY
|
||||
chmod u+w $SVNENTRY # entries file is not writable.
|
||||
ed - $SVNENTRY <<EOF
|
||||
g/^file$/-s/^/%WANTED%/
|
||||
v/%WANTED%/d
|
||||
a
|
||||
|
||||
.
|
||||
g/^%WANTED%/s///
|
||||
w
|
||||
q
|
||||
EOF
|
||||
cat $SVNENTRY
|
||||
rm $SVNENTRY
|
||||
}
|
||||
|
||||
|
||||
# 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.
|
||||
@ -132,36 +74,50 @@ for file in `cat $MANIFEST`; do
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
# Inspect the .svn/entries to figure out what version of svn file entry is
|
||||
# used.
|
||||
# The following algorithm is formed via reverse engineering.
|
||||
# I don't know what the official svn format is if such a specification exists.
|
||||
# Algorithm:
|
||||
# If the first line of the file has 'xml version="1.0"' in it, it is created
|
||||
# by svn 1.3 or older; else if it has '^file$' in it, it is created by svn 1.4.
|
||||
svn_entry_file=.svn/entries
|
||||
if head -1 $svn_entry_file | grep 'xml version="1.0"' > /dev/null 2>&1;then
|
||||
getsvnentries=GETSVNENTRIES_13
|
||||
elif grep '^file$' $svn_entry_file > /dev/null 2>&1; then
|
||||
getsvnentries=GETSVNENTRIES_14
|
||||
else
|
||||
echo "Unknown svn entries format. Aborted"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for svn in `find . -type d -name .svn -print`; do
|
||||
path=`echo $svn |sed 's/\/.svn//'`
|
||||
for file in `$getsvnentries $svn`; do
|
||||
if (grep ^$path/$file$ $MANIFEST >/dev/null); then
|
||||
:
|
||||
else
|
||||
echo "+ $path/$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
|
||||
# Newly added files are not listed by svn ls, which
|
||||
# we check below..
|
||||
# The line listing them starts with 'A'.
|
||||
letter="$(echo $file | head -c 1)"
|
||||
if [ "$letter" = "A" ]; then
|
||||
# Convert 'A ' to './' so it matches
|
||||
# the manifest file name.
|
||||
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 ls, which gets a list of all files that are
|
||||
# checked in.
|
||||
svn_ls="$(svn ls -R)"
|
||||
for file in $svn_ls; do
|
||||
path="./${file}"
|
||||
# Ignore directories
|
||||
if [ ! -d $path ]; then
|
||||
if (grep ^$path$ $MANIFEST >/dev/null); then
|
||||
:
|
||||
else
|
||||
echo "+ $path"
|
||||
fail=yes
|
||||
fi
|
||||
fi
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user