Non-Core Morph Plugins Tests ============================ Anchoring commits for reproducibility ------------------------------------- For full reproducibility, we need to ensure we anchor the commits we use. `morph anchor` handles making this easier by pushing refs to the repositories we use. SCENARIO morph anchors commits used by a release GIVEN a git server Note that we only require a definitions repo here to allow us to obtain a list of shas so we can verify each sha has been anchored. WHEN the user clones definitions The `morph anchor` command must be given a semantic name, to make the anchor refs less opaque to humans, and allow anchor ref cleanup by semantic name, such as when a given release is no longer supported. AND the user attempts to anchor systems/test-system.morph with semantic name foo-release in branch master THEN morph succeeded After the `morph anchor` command completes, there are branches on the git server in every repository used by the listed systems referring to the commits used. AND every commit used in master has anchor branches on the git server `morph anchor` needs to handle being told to create anchors when they already exist for that system, as we may have forgotten to anchor a system as part of a release, and systems likely share contents. WHEN the user attempts to anchor systems/test-system.morph with semantic name foo-release in branch master THEN morph succeeded AND every commit used in master has anchor branches on the git server `morph anchor` will roll back any pushes when it is unable to push, and report failure. To test this we need a new system to anchor. GIVEN a chunk called extra-chunk AND push access is denied to extra-chunk WHEN the user creates a new definitions branch two, based on master AND the user checks out definitions branch two AND the user adds a new system to build called expanded-system that uses chunk extra-chunk AND the user attempts to anchor systems/expanded-system.morph with semantic name foo-release in branch two THEN morph failed When this happens `morph anchor` must not remove anchors that already existed before attempting to anchor, as they may be from a different system that shares some components. THEN every commit used in master has anchor branches on the git server FINALLY the git server is shut down ### Anchor implementations IMPLEMENTS WHEN the user (attempts to )?(anchor) (.*) with semantic name (.*) in branch (\S+) systems=$(echo "$MATCH_3" | sed -e 's/, /\n/g' -e 's/ and /\n/g') set "$MATCH_2" "$MATCH_4" "file://$DATADIR/definitions" "$MATCH_5" $systems if [ "$MATCH_1" != "attempts to " ]; then run_morph "$@" else attempt_morph "$@"; fi IMPLEMENTS THEN every commit used in (.*) has anchor branches on the git server set +e run_in "$DATADIR/definitions" git checkout "$MATCH_1" # extract sha1s from ref: fields find "$DATADIR/definitions" -name '*.morph' \ -exec sed -rn '/[^-]ref:\s*[0-9a-f]{40}/s/^.*([0-9a-f]{40})/\1/p' {} + | sort -u >"$DATADIR/sha1s" for sha1 in $(cat "$DATADIR/sha1s"); do sha1found=false # for each git repository for gitdir in $(find "$DATADIR/gits" -name '.git' -prune -exec dirname {} ';'); do # for each ref, check if the commit it points to is the sha1 we seek eval "$(cd "$gitdir" && git for-each-ref 'refs/heads/*/anchors/**' --shell \ --format='"$sha1found" || [ %(objectname) = "$sha1" ] && sha1found=true')" done if ! "$sha1found"; then exit 1 fi done IMPLEMENTS GIVEN push access is denied to (.*) install -m 755 /dev/stdin "$DATADIR/gits/$MATCH_1/.git/hooks/pre-receive" <<'EOF' #!/bin/sh touch "$GIT_DIR/hook-ever-run" echo No push for you! exit 1 EOF IMPLEMENTS GIVEN a chunk called (.*) mkdir "$DATADIR/gits/$MATCH_1" cd "$DATADIR/gits/$MATCH_1" git init . install -D -m644 /dev/stdin <<'EOF' "usr/share/doc/$MATCH_1/README" No other content here EOF git add . git commit -m "$MATCH_1 exists" IMPLEMENTS WHEN the user adds a new system to build called (.*) that uses chunk (.*) cd "$DATADIR/definitions" install -m644 -D /dev/stdin << EOF "strata/tools/$MATCH_2.morph" name: extra-chunk kind: chunk build-system: manual EOF git add strata/tools/extra-chunk.morph install -m644 -D /dev/stdin << EOF "strata/tools.morph" name: tools kind: stratum build-depends: - morph: strata/build-essential.morph chunks: - name: "$MATCH_2" morph: strata/tools/extra-chunk.morph repo: test:extra-chunk unpetrify-ref: master ref: $(run_in "$DATADIR/gits/$MATCH_2" git rev-parse master) build-depends: [] EOF git add strata/tools.morph arch=$(run_morph print-architecture) install -m644 -D /dev/stdin < "$DATADIR/stdout" 2> "$DATADIR/stderr" IMPLEMENTS THEN stdout contains a single line n=$(wc -l < "$DATADIR/stdout") if [ "$n" != 1 ] then die "stdout contains $n lines, not 1" fi IMPLEMENTS THEN stdout contains no spaces n=$(tr < "$DATADIR/stdout" -cd ' ' | wc -c) if [ "$n" != 0 ] then die "stdout contains spaces" fi IMPLEMENTS THEN stderr is empty if [ -s "$DATADIR/stderr" ] then die "stderr is not empty" fi Showing help for extensions --------------------------- SCENARIO morph shows help for extensions WHEN morph help is run for an extension THEN morph succeeded SCENARIO morph help shows an error for a non-existent extension WHEN morph help is run for a non-existent extension THEN morph failed AND the help error message includes the string "ERROR: Unknown subcommand or extension" IMPLEMENTS WHEN morph help is run for an extension attempt_morph help tar.write > "$DATADIR/stdout" 2> "$DATADIR/stderr" IMPLEMENTS WHEN morph help is run for a non-existent extension attempt_morph help nonexistent.write > "$DATADIR/stdout" 2> "$DATADIR/stderr" Showing dependencies -------------------- SCENARIO showing the dependencies for a system GIVEN a git server AND a system with two reasonable-sized strata in branch master of definitions WHEN the user runs the show-dependencies command for system xfce-system.morph in branch master THEN the result shows the dependencies of the system FINALLY the git server is shut down IMPLEMENTS GIVEN a system with two reasonable-sized strata in branch (\S+) of definitions branch="$MATCH_1" cd "$DATADIR"/gits/definitions git checkout "$branch" cat << EOF > gtk-stack.morph name: gtk-stack kind: stratum build-depends: [] chunks: - name: freetype repo: test:test-chunk ref: master build-mode: bootstrap build-system: manual - name: fontconfig repo: test:test-chunk ref: master build-mode: bootstrap build-system: manual - name: cairo repo: test:test-chunk ref: master build-mode: bootstrap build-system: manual - name: pango repo: test:test-chunk ref: master build-system: manual build-depends: - freetype - fontconfig - name: glib repo: test:test-chunk ref: master build-mode: bootstrap build-system: manual - name: gdk-pixbuf repo: test:test-chunk ref: master build-system: manual build-depends: - glib - name: gtk repo: test:test-chunk ref: master build-system: manual build-depends: - cairo - gdk-pixbuf - glib - pango - name: dbus repo: test:test-chunk ref: master build-mode: bootstrap build-system: manual - name: dbus-glib repo: test:test-chunk ref: master build-system: manual build-depends: - dbus - glib EOF git add gtk-stack.morph cat < xfce-core.morph name: xfce-core kind: stratum build-depends: - morph: gtk-stack chunks: - name: libxfce4util repo: test:test-chunk ref: master build-system: manual - name: xfconf repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4util - name: libxfce4ui repo: test:test-chunk ref: master build-system: manual build-depends: - xfconf - name: exo repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4util - name: garcon repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4util - name: thunar repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4ui - exo - name: tumbler repo: test:test-chunk ref: master build-system: manual - name: xfce4-panel repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4ui - exo - garcon - name: xfce4-settings repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4ui - exo - xfconf - name: xfce4-session repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4ui - exo - xfconf - name: xfwm4 repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4ui - xfconf - name: xfdesktop repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4ui - xfconf - name: xfce4-appfinder repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4ui - garcon - xfconf - name: gtk-xfce-engine repo: test:test-chunk ref: master build-system: manual build-depends: - libxfce4ui - garcon - xfconf EOF git add xfce-core.morph cat << EOF > xfce-system.morph name: xfce-system kind: system arch: $("$SRCDIR/scripts/test-morph" print-architecture) strata: - morph: xfce-core EOF git add xfce-system.morph git commit -m "Add xfce-system" git checkout - IMPLEMENTS WHEN the user runs the show-dependencies command for system (\S+) in branch (\S+) system="$MATCH_1" branch="$MATCH_2" run_morph show-dependencies --quiet test:definitions "$branch" "$system" | sed 's/test://' IMPLEMENTS THEN the result shows the dependencies of the system cat << EOF > "$DATADIR"/xfce-system-dependencies dependency graph for test:definitions|master|xfce-system.morph: test:definitions|master|xfce-system.morph|xfce-system|xfce-system-rootfs -> test:definitions|master|xfce-core.morph|xfce-core-devel|xfce-core-devel -> test:definitions|master|xfce-core.morph|xfce-core-runtime|xfce-core-runtime test:definitions|master|xfce-core.morph|xfce-core-devel|xfce-core-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-devel -> test:test-chunk|master|garcon.morph|garcon|garcon-devel -> test:test-chunk|master|gtk-xfce-engine.morph|gtk-xfce-engine|gtk-xfce-engine-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-devel -> test:test-chunk|master|thunar.morph|thunar|thunar-devel -> test:test-chunk|master|tumbler.morph|tumbler|tumbler-devel -> test:test-chunk|master|xfce4-appfinder.morph|xfce4-appfinder|xfce4-appfinder-devel -> test:test-chunk|master|xfce4-panel.morph|xfce4-panel|xfce4-panel-devel -> test:test-chunk|master|xfce4-session.morph|xfce4-session|xfce4-session-devel -> test:test-chunk|master|xfce4-settings.morph|xfce4-settings|xfce4-settings-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfdesktop.morph|xfdesktop|xfdesktop-devel -> test:test-chunk|master|xfwm4.morph|xfwm4|xfwm4-devel test:test-chunk|master|gtk-xfce-engine.morph|gtk-xfce-engine|gtk-xfce-engine-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|garcon.morph|garcon|garcon-devel -> test:test-chunk|master|garcon.morph|garcon|garcon-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfce4-appfinder.morph|xfce4-appfinder|xfce4-appfinder-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|garcon.morph|garcon|garcon-devel -> test:test-chunk|master|garcon.morph|garcon|garcon-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfdesktop.morph|xfdesktop|xfdesktop-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfwm4.morph|xfwm4|xfwm4-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfce4-session.morph|xfce4-session|xfce4-session-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-devel -> test:test-chunk|master|exo.morph|exo|exo-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfce4-settings.morph|xfce4-settings|xfce4-settings-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-devel -> test:test-chunk|master|exo.morph|exo|exo-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfce4-panel.morph|xfce4-panel|xfce4-panel-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-devel -> test:test-chunk|master|exo.morph|exo|exo-runtime -> test:test-chunk|master|garcon.morph|garcon|garcon-devel -> test:test-chunk|master|garcon.morph|garcon|garcon-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime test:test-chunk|master|tumbler.morph|tumbler|tumbler-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime test:test-chunk|master|thunar.morph|thunar|thunar-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-devel -> test:test-chunk|master|exo.morph|exo|exo-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime test:definitions|master|xfce-core.morph|xfce-core-runtime|xfce-core-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-runtime -> test:test-chunk|master|garcon.morph|garcon|garcon-runtime -> test:test-chunk|master|gtk-xfce-engine.morph|gtk-xfce-engine|gtk-xfce-engine-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-runtime -> test:test-chunk|master|thunar.morph|thunar|thunar-runtime -> test:test-chunk|master|tumbler.morph|tumbler|tumbler-runtime -> test:test-chunk|master|xfce4-appfinder.morph|xfce4-appfinder|xfce4-appfinder-runtime -> test:test-chunk|master|xfce4-panel.morph|xfce4-panel|xfce4-panel-runtime -> test:test-chunk|master|xfce4-session.morph|xfce4-session|xfce4-session-runtime -> test:test-chunk|master|xfce4-settings.morph|xfce4-settings|xfce4-settings-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime -> test:test-chunk|master|xfdesktop.morph|xfdesktop|xfdesktop-runtime -> test:test-chunk|master|xfwm4.morph|xfwm4|xfwm4-runtime test:test-chunk|master|gtk-xfce-engine.morph|gtk-xfce-engine|gtk-xfce-engine-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|garcon.morph|garcon|garcon-devel -> test:test-chunk|master|garcon.morph|garcon|garcon-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfce4-appfinder.morph|xfce4-appfinder|xfce4-appfinder-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|garcon.morph|garcon|garcon-devel -> test:test-chunk|master|garcon.morph|garcon|garcon-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfdesktop.morph|xfdesktop|xfdesktop-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfwm4.morph|xfwm4|xfwm4-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfce4-session.morph|xfce4-session|xfce4-session-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-devel -> test:test-chunk|master|exo.morph|exo|exo-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfce4-settings.morph|xfce4-settings|xfce4-settings-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-devel -> test:test-chunk|master|exo.morph|exo|exo-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfce4-panel.morph|xfce4-panel|xfce4-panel-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-devel -> test:test-chunk|master|exo.morph|exo|exo-runtime -> test:test-chunk|master|garcon.morph|garcon|garcon-devel -> test:test-chunk|master|garcon.morph|garcon|garcon-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime test:test-chunk|master|garcon.morph|garcon|garcon-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-devel -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-runtime test:test-chunk|master|tumbler.morph|tumbler|tumbler-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime test:test-chunk|master|thunar.morph|thunar|thunar-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|exo.morph|exo|exo-devel -> test:test-chunk|master|exo.morph|exo|exo-runtime -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime test:test-chunk|master|exo.morph|exo|exo-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-devel -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-runtime test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|garcon.morph|garcon|garcon-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-devel -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-runtime test:test-chunk|master|exo.morph|exo|exo-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-devel -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-runtime test:test-chunk|master|libxfce4ui.morph|libxfce4ui|libxfce4ui-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime test:test-chunk|master|xfconf.morph|xfconf|xfconf-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-devel -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-runtime test:test-chunk|master|xfconf.morph|xfconf|xfconf-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-devel -> test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-runtime test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime test:test-chunk|master|libxfce4util.morph|libxfce4util|libxfce4util-runtime -> test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime test:definitions|master|gtk-stack.morph|gtk-stack-runtime|gtk-stack-runtime -> test:test-chunk|master|cairo.morph|cairo|cairo-runtime -> test:test-chunk|master|dbus-glib.morph|dbus-glib|dbus-glib-runtime -> test:test-chunk|master|dbus.morph|dbus|dbus-runtime -> test:test-chunk|master|fontconfig.morph|fontconfig|fontconfig-runtime -> test:test-chunk|master|freetype.morph|freetype|freetype-runtime -> test:test-chunk|master|gdk-pixbuf.morph|gdk-pixbuf|gdk-pixbuf-runtime -> test:test-chunk|master|glib.morph|glib|glib-runtime -> test:test-chunk|master|gtk.morph|gtk|gtk-runtime -> test:test-chunk|master|pango.morph|pango|pango-runtime test:test-chunk|master|dbus-glib.morph|dbus-glib|dbus-glib-runtime -> test:test-chunk|master|dbus.morph|dbus|dbus-devel -> test:test-chunk|master|dbus.morph|dbus|dbus-runtime -> test:test-chunk|master|glib.morph|glib|glib-devel -> test:test-chunk|master|glib.morph|glib|glib-runtime test:test-chunk|master|gtk.morph|gtk|gtk-runtime -> test:test-chunk|master|cairo.morph|cairo|cairo-devel -> test:test-chunk|master|cairo.morph|cairo|cairo-runtime -> test:test-chunk|master|gdk-pixbuf.morph|gdk-pixbuf|gdk-pixbuf-devel -> test:test-chunk|master|gdk-pixbuf.morph|gdk-pixbuf|gdk-pixbuf-runtime -> test:test-chunk|master|glib.morph|glib|glib-devel -> test:test-chunk|master|glib.morph|glib|glib-runtime -> test:test-chunk|master|pango.morph|pango|pango-devel -> test:test-chunk|master|pango.morph|pango|pango-runtime test:definitions|master|gtk-stack.morph|gtk-stack-devel|gtk-stack-devel -> test:test-chunk|master|cairo.morph|cairo|cairo-devel -> test:test-chunk|master|dbus-glib.morph|dbus-glib|dbus-glib-devel -> test:test-chunk|master|dbus.morph|dbus|dbus-devel -> test:test-chunk|master|fontconfig.morph|fontconfig|fontconfig-devel -> test:test-chunk|master|freetype.morph|freetype|freetype-devel -> test:test-chunk|master|gdk-pixbuf.morph|gdk-pixbuf|gdk-pixbuf-devel -> test:test-chunk|master|glib.morph|glib|glib-devel -> test:test-chunk|master|gtk.morph|gtk|gtk-devel -> test:test-chunk|master|pango.morph|pango|pango-devel test:test-chunk|master|dbus-glib.morph|dbus-glib|dbus-glib-devel -> test:test-chunk|master|dbus.morph|dbus|dbus-devel -> test:test-chunk|master|dbus.morph|dbus|dbus-runtime -> test:test-chunk|master|glib.morph|glib|glib-devel -> test:test-chunk|master|glib.morph|glib|glib-runtime test:test-chunk|master|dbus.morph|dbus|dbus-runtime test:test-chunk|master|dbus.morph|dbus|dbus-devel test:test-chunk|master|gtk.morph|gtk|gtk-devel -> test:test-chunk|master|cairo.morph|cairo|cairo-devel -> test:test-chunk|master|cairo.morph|cairo|cairo-runtime -> test:test-chunk|master|gdk-pixbuf.morph|gdk-pixbuf|gdk-pixbuf-devel -> test:test-chunk|master|gdk-pixbuf.morph|gdk-pixbuf|gdk-pixbuf-runtime -> test:test-chunk|master|glib.morph|glib|glib-devel -> test:test-chunk|master|glib.morph|glib|glib-runtime -> test:test-chunk|master|pango.morph|pango|pango-devel -> test:test-chunk|master|pango.morph|pango|pango-runtime test:test-chunk|master|pango.morph|pango|pango-runtime -> test:test-chunk|master|fontconfig.morph|fontconfig|fontconfig-devel -> test:test-chunk|master|fontconfig.morph|fontconfig|fontconfig-runtime -> test:test-chunk|master|freetype.morph|freetype|freetype-devel -> test:test-chunk|master|freetype.morph|freetype|freetype-runtime test:test-chunk|master|gdk-pixbuf.morph|gdk-pixbuf|gdk-pixbuf-runtime -> test:test-chunk|master|glib.morph|glib|glib-devel -> test:test-chunk|master|glib.morph|glib|glib-runtime test:test-chunk|master|cairo.morph|cairo|cairo-runtime test:test-chunk|master|gdk-pixbuf.morph|gdk-pixbuf|gdk-pixbuf-devel -> test:test-chunk|master|glib.morph|glib|glib-devel -> test:test-chunk|master|glib.morph|glib|glib-runtime test:test-chunk|master|glib.morph|glib|glib-runtime test:test-chunk|master|glib.morph|glib|glib-devel test:test-chunk|master|pango.morph|pango|pango-devel -> test:test-chunk|master|fontconfig.morph|fontconfig|fontconfig-devel -> test:test-chunk|master|fontconfig.morph|fontconfig|fontconfig-runtime -> test:test-chunk|master|freetype.morph|freetype|freetype-devel -> test:test-chunk|master|freetype.morph|freetype|freetype-runtime test:test-chunk|master|fontconfig.morph|fontconfig|fontconfig-runtime test:test-chunk|master|freetype.morph|freetype|freetype-runtime test:test-chunk|master|cairo.morph|cairo|cairo-devel test:test-chunk|master|fontconfig.morph|fontconfig|fontconfig-devel test:test-chunk|master|freetype.morph|freetype|freetype-devel EOF diff "$DATADIR"/xfce-system-dependencies "$DATADIR"/out-show-dependencies