On Mon, Jul 20, 2015 at 11:24:51AM +0200, Andrea Bolognani wrote:
Files we don't need, including symbolic links that might result
problematic to make dist, are removed from the copied data.
---
tests/nodeinfodata/copy-from-host.sh | 170 +++++++++++++++++++++++++++++++++++

Since this script is not part of the _data_ for nodeinfo test, I'd
rather put it in the tests/ directory.  But I don't have a strict
preference.

1 file changed, 170 insertions(+)
create mode 100755 tests/nodeinfodata/copy-from-host.sh

diff --git a/tests/nodeinfodata/copy-from-host.sh 
b/tests/nodeinfodata/copy-from-host.sh
new file mode 100755
index 0000000..b5c5e8e
--- /dev/null
+++ b/tests/nodeinfodata/copy-from-host.sh
@@ -0,0 +1,170 @@
+#!/bin/sh
+
+# copy-from-host.sh - Copy nodeinfo test data from a running host
+
+# Copyright (C) 2015 Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+SYSFS_PATH="/sys/devices/system"
+KEEP_LINKS="cpu[0-9]*"
+KEEP_DIRECTORIES="cpu
+                  cpu[0-9]*
+                  node
+                  node[0-9]*
+                  topology"
+KEEP_FILES="core_id
+            core_siblings*
+            kernel_max
+            meminfo
+            offline
+            online
+            physical_package_id
+            possible
+            present
+            thread_siblings*"
+
+die() {
+    typeset message=$1
+
+    echo "$message" >&2
+
+    exit 1
+}
+
+keep() {
+    typeset tag=$1
+    typeset path=$2
+
+    echo "  $tag $path"
+
+    return 0
+}
+
+delete() {
+    typeset tag=$1
+    typeset path=$2
+
+    rm -rf "$path"
+
+    return $?
+}
+
+is_valid_name() {
+    typeset name=$1
+    typeset ret=0
+
+    case "$name" in
+        */*)
+            # We don't want to have to deal with subdirectories, so
+            # names containing slashes are rejected
+            ret=1
+            ;;
+    esac
+
+    return $ret
+}
+
+matches_any_pattern() {
+    typeset name=$1
+    typeset patterns=$2
+    typeset ret=1
+

I'm not sure why typeset is better then (or compatible as):

 name="$1"

and somewhere the parameters naming almost doubles the function
length, but this is just a support script and not something we call on
all machines, so I'm OK with keeping these as they are.

+    for pattern in $patterns; do
+        case "$name" in
+            $pattern)
+                ret=0
+                ;;
+        esac
+    done
+
+    return $ret
+}
+
+main() {
+    typeset name=$1
+
+    if ! test "$name"; then
+        die "Usage: $SELF NAME"
+    fi
+
+    if ! is_valid_name "$name"; then
+        die "Name '$name' is not valid"
+    fi
+
+    # Create directory
+    if test -e "$name"; then
+        die "$name: File or directory already exists"
+    fi
+
+    if ! mkdir "$name" >/dev/null 2>&1; then
+        die "$name: Unable to create directory"
+    fi
+
+    echo "Copying host data..."
+
+    # Copy data from host. Errors are ignored because some files we don't
+    # care about always give input/output error when read
+    cp -r "$SYSFS_PATH/cpu" "$name/" >/dev/null 2>&1
+    cp -r "$SYSFS_PATH/node" "$name/" >/dev/null 2>&1
+

If there are errors we don't care about, why don't you just copy the
files that match wither KEEP_LINKS or KEEP_DIRECTORIES?  You can check
that all of them copied correctly and you don't need to redirect the
output, so any possible error gives a clue on what's wrong.

+    if ! test -d "$name/cpu" || ! test -d "$name/node"; then
+        die "Error while copying host data"
+    fi
+
+    echo "Cleaning up data..."
+
+    # Delete symbolic links
+    find "$name" -type l | while read l; do
+        b=${l##*/}
+        if matches_any_pattern "$b" "$KEEP_LINKS"; then
+            keep "l" "$l"
+        else
+            delete "l" "$l"
+        fi
+    done
+
+    # Delete directories
+    find "$name" -type d | while read d; do
+        b=${d##*/}
+        # We don't want to delete the directory we just created :)
+        if test "$b" = "$name"; then
+            continue
+        fi
+        if matches_any_pattern "$b" "$KEEP_DIRECTORIES"; then
+            keep "d" "$d"
+        else
+            delete "d" "$d"
+        fi
+    done
+
+    # Delete files
+    find "$name" -type f | while read f; do
+        b=${f##*/}
+        if matches_any_pattern "$b" "$KEEP_FILES"; then
+            keep "f" "$f"
+        else
+            delete "f" "$f"
+        fi
+    done
+
+    echo "All done"
+
+    return 0
+}
+
+SELF=$0
+main "$@"
+exit $?
--
2.4.3

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Attachment: signature.asc
Description: PGP signature

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to