Hello community,

here is the log from the commit of package glib2 for openSUSE:Factory checked 
in at 2012-06-06 10:31:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/glib2 (Old)
 and      /work/SRC/openSUSE:Factory/.glib2.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "glib2", Maintainer is "gnome-maintain...@suse.de"

Changes:
--------
--- /work/SRC/openSUSE:Factory/glib2/glib2.changes      2012-05-22 
10:09:15.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.glib2.new/glib2.changes 2012-06-06 
10:31:02.000000000 +0200
@@ -1,0 +2,9 @@
+Fri May 18 13:56:57 UTC 2012 - g...@opensuse.org
+
+- Rewrote SuSEconfig.glib2 to support different default MIME
+  associations for different desktops. It reads
+  /etc/{gnome,xfce,lxde}_defaults.desktop to produce
+  /var/cache/gio-2.0/{gnome,xfce,lxde}-defaults.list which can then
+  be symlinked for each desktop to a directory in $XDG_DATA_DIRS.
+
+-------------------------------------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ glib2.spec ++++++
--- /var/tmp/diff_new_pack.SohKV8/_old  2012-06-06 10:31:05.000000000 +0200
+++ /var/tmp/diff_new_pack.SohKV8/_new  2012-06-06 10:31:05.000000000 +0200
@@ -295,8 +295,10 @@
 install -D -m0644 gnome_defaults.conf 
%{buildroot}%{_sysconfdir}/gnome_defaults.conf
 # default apps magic
 mkdir -p %{buildroot}%{_localstatedir}/cache/gio-2.0 
%{buildroot}%{_datadir}/applications
-touch %{buildroot}%{_localstatedir}/cache/gio-2.0/defaults.list
-ln -s %{_localstatedir}/cache/gio-2.0/defaults.list 
%{buildroot}%{_datadir}/applications/defaults.list
+touch %{buildroot}%{_localstatedir}/cache/gio-2.0/gnome-defaults.list
+touch %{buildroot}%{_localstatedir}/cache/gio-2.0/xfce-defaults.list
+touch %{buildroot}%{_localstatedir}/cache/gio-2.0/lxde-defaults.list
+ln -s %{_localstatedir}/cache/gio-2.0/gnome-defaults.list 
%{buildroot}%{_datadir}/applications/defaults.list
 # gio-querymodules magic
 %if "%{_lib}" == "lib64"
 mv %{buildroot}%{_bindir}/gio-querymodules 
%{buildroot}%{_bindir}/gio-querymodules-64
@@ -427,7 +429,9 @@
 %ghost %{_datadir}/glib-2.0/schemas/gschemas.compiled
 %{_datadir}/applications/defaults.list
 %dir %{_localstatedir}/cache/gio-2.0
-%ghost %{_localstatedir}/cache/gio-2.0/defaults.list
+%ghost %{_localstatedir}/cache/gio-2.0/gnome-defaults.list
+%ghost %{_localstatedir}/cache/gio-2.0/xfce-defaults.list
+%ghost %{_localstatedir}/cache/gio-2.0/lxde-defaults.list
 
 %files -n libgio-fam
 %defattr(-,root,root)

++++++ SuSEconfig.glib2 ++++++
--- /var/tmp/diff_new_pack.SohKV8/_old  2012-06-06 10:31:05.000000000 +0200
+++ /var/tmp/diff_new_pack.SohKV8/_new  2012-06-06 10:31:05.000000000 +0200
@@ -1,144 +1,243 @@
-#! /bin/sh
+#!/bin/sh
 #
-# Copyright (c) 2006, 2008 SuSE
-# Author: Stanislav Brabec <sbra...@suse.cz>
+# SuSEconfig.glib2 - create default application ordering for MIME associations
 #
-# Creates defaults.list from gnome_defaults.conf using only available
-# applications and preferring GNOME and GTK applications.
+# Copyright (C) 2012 Guido Berhoerster <g...@opensuse.org>
+#
+# Permission to use, copy, modify, and distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+# TORTIOUS ACTION, ARISING OUT OF PERFORMANCE OF THIS SOFTWARE.
 #
-# See /etc/gnome_defaults.conf for algorithm description.
-
-shopt -s nullglob
 
-unset DUMMY ${!MIME_*} ${!APP_*} ${!DEFAULT_*} ${!PREFDEFAULT_*} 
${!DEFDESKTOP_*}
+export LC_ALL=C
 
-# Ensure, that $XDG_DATA_DIRS is set properly. (#71978, #240603)
-if test "$PROFILEREAD" != true ; then
-    . $r/etc/profile
+# reset XDG_DATA_DIRS so it can be trusted
+unset XDG_DATA_DIRS
+if [ "${PROFILEREAD}" != "true" ]; then
+        . $r/etc/profile
 fi
 
-# Read defaults.list and set applications as best candidates.
-exec <$r/etc/gnome_defaults.conf
-while read ; do
-    case "$REPLY" in
-       "#"* | "" )
-           ;;
-       # Is is default application for particular MIME type?
-       *=* )
-           # Strip optional priority record (and ignore it - no GNOME app uses 
it).
-           MIME=${REPLY%%=*}
-           # Replace special characters.
-           MIMES=${MIME//_/__}
-           MIMES=${MIMES//\//_S}
-           MIMES=${MIMES//-/_M}
-           MIMES=${MIMES//+/_P}
-           MIMES=${MIMES//./_D}
-           eval DEFAULT_${MIMES}\=${REPLY#*=}
-           ;;
-       # Is it preferred default application?
-       !* )
-           DESKTOP=${REPLY#!}
-           DESKTOPS=${DESKTOP//_/__}
-           DESKTOPS=${DESKTOPS//-/_M}
-           DESKTOPS=${DESKTOPS//+/_P}
-           DESKTOPS=${DESKTOPS//./_D}
-           DESKTOPS=${DESKTOPS// /_S}
-           DESKTOPS=${DESKTOPS//:/_C}
-           eval DEFDESKTOP_$DESKTOPS\=PREFDEFAULT
-           ;;
-       # Is it default application?
-       * )
-           DESKTOP=${REPLY}
-           DESKTOPS=${DESKTOP//_/__}
-           DESKTOPS=${DESKTOPS//-/_M}
-           DESKTOPS=${DESKTOPS//+/_P}
-           DESKTOPS=${DESKTOPS//./_D}
-           DESKTOPS=${DESKTOPS// /_S}
-           DESKTOPS=${DESKTOPS//:/_C}
-           eval DEFDESKTOP_$DESKTOPS\=DEFAULT
-           ;;
-    esac
-done
-exec <&-
-
-IFS="$IFS:;"
-# Browse all desktop files
-for DIR in ${XDG_DATA_DIRS:-/usr/local/share:/usr/share} ; do
-    for DESKTOP in $r$DIR/applications/*.desktop ; do
-       DESKTOPN=${DESKTOP##*/}
-       DESKTOPS=${DESKTOPN//_/__}
-       DESKTOPS=${DESKTOPS//-/_M}
-       DESKTOPS=${DESKTOPS//+/_P}
-       DESKTOPS=${DESKTOPS//./_D}
-       DESKTOPS=${DESKTOPS// /_S}
-       DESKTOPS=${DESKTOPS//:/_C}
-       IS_DEFAULT_DESKTOP=false
-       eval "if test \"\$DEFDESKTOP_$DESKTOPS\" ; then
-           IS_DEFAULT_DESKTOP=true
-           DEFTYPE=\$DEFDESKTOP_$DESKTOPS
-       fi"
-       exec <"$DESKTOP"
-       CATEGORIES=
-       MIMETYPE=
-       while read ; do
-           case "$REPLY" in
-               Categories=* )
-                   CATEGORIES="${REPLY#Categories=}"
-                   ;;
-               MimeType=* )
-                   MIMETYPE="${REPLY#MimeType=}"
-                   ;;
-           esac
-       done
-       exec <&-
-       # Is it a GNOME application?
-       APPTYPE=GENERIC
-       if test "$CATEGORIES" != "${CATEGORIES/GTK}" ; then
-           APPTYPE=GTK
-       fi
-       if test "$CATEGORIES" != "${CATEGORIES/GNOME}" ; then
-           APPTYPE=GNOME
-       fi
-       if $IS_DEFAULT_DESKTOP ; then
-           APPTYPE=$DEFTYPE
-       fi
-       for MIME in $MIMETYPE ; do
-           # Strip optional priority record (and ignore it - no GNOME app uses 
it).
-           MIME=${MIME%:*}
-           # Replace special characters.
-           MIMES=${MIME//_/__}
-           MIMES=${MIMES//\//_S}
-           MIMES=${MIMES//-/_M}
-           MIMES=${MIMES//+/_P}
-           MIMES=${MIMES//./_D}
-           eval MIME_$MIMES\=$MIME
-           IS_DEFAULT=false
-           eval "if test \"\$DEFAULT_$MIMES\" = \"\$DESKTOPN\" ; then
-               IS_DEFAULT=true
-           fi"
-           if $IS_DEFAULT ; then
-               eval APP_MIMEDEFAULT_$MIMES\=\"\$DESKTOPN\"
-           else
-               eval APP_${APPTYPE}_$MIMES\=\"\$DESKTOPN\"
-           fi
-       done
-    done
-done
-
-exec >$r/var/cache/gio-2.0/defaults.list
-echo "# generated by SuSEconfig --module glib2 from /etc/gnome_defaults.conf"
-echo "[Default Applications]"
-
-# Browse all offered MIME types and write defaults.list.
-for MIMES in ${!MIME_*} ; do
-    eval MIME\=\$$MIMES
-    MIMES=${MIMES#MIME_}
-    # Try GNOME applications first, then GTK, then generic.
-    for APPTYPE in MIMEDEFAULT PREFDEFAULT DEFAULT GNOME GTK GENERIC ; do
-       eval "if test \"\$APP_${APPTYPE}_$MIMES\" ; then
-           echo \"$MIME=\$APP_${APPTYPE}_$MIMES\" ;
-           break ;
-       fi"
-    done
+for desktop in gnome xfce lxde; do
+    awk -vdesktop=${desktop} '
+# print a warning to stderr
+function warn(msg,      cmd) {
+    cmd = "cat >&2"
+    print msg | cmd
+    close(cmd)
+}
+
+# print an error message and exit with the given exit status
+function err(status, msg)
+{
+    warn(msg)
+    exit_status = status
+    exit exit_status
+}
+
+# delete all elements of an array
+function delete_array(arr,  i) {
+    for (i in arr) {
+        delete arr[i]
+    }
+}
+
+# find preferred combination of mimetype and category
+function find_preferred_category(mimetypes_categories, categories, mimetype,
+        i) {
+    for (i = 1; i in categories; i++) {
+        if (mimetype SUBSEP categories[i] in mimetypes_categories) {
+            return mimetypes_categories[mimetype,categories[i]]
+        }
+    }
+}
+
+# sort keys of an array by index (using the awk default comparison)
+function asorti2(src, dest,     key, len) {
+    len = 0
+    delete_array(dest)
+    for (key in src) {
+        dest[len++] = key
+    }
+
+    _qsorti(dest, 0, len - 1);
+}
+
+function array_swap(arr, i, j,  tmp) {
+    tmp = arr[i]
+    arr[i] = arr[j]
+    arr[j] = tmp
+}
+
+# Based on Bentley, J. L., 2000. Programming Pearls. 2nd ed. Reading, MA:
+#   Addison-Wesley Professional.
+function _qsorti(dest, l, u,    val, i, j) {
+    if (l >= u) {
+        return
+    }
+
+    array_swap(dest, l, l + int(rand() * (u - l)))
+    val = dest[l]
+    i = l
+    j = u + 1
+    while (1) {
+        do { i++ } while (i <= u && dest[i] < val)
+        do { j-- } while (dest[j] > val)
+        if (i > j) {
+            break
+        }
+        array_swap(dest, i, j)
+    }
+    array_swap(dest, l, j)
+
+    _qsorti(dest, l, j - 1)
+    _qsorti(dest, j + 1, u)
+}
+
+BEGIN {
+    desktop = desktop != "" ? desktop : "gnome"
+    if (desktop == "gnome") {
+        categories_list = "GNOME,GTK"
+    } else if (desktop == "xfce") {
+        categories_list = "XFCE,GTK"
+    } else if (desktop == "lxde") {
+        categories_list = "GTK"
+    }
+    split(categories_list, categories, /,/)
+    root = ENVIRON["r"]
+    defaults_conf = root "/etc/" desktop "_defaults.conf"
+
+    # parse desktop defaults preferences
+    lineno = 0
+    while ((getline < defaults_conf) > 0) {
+        lineno++
+        if (NF == 0 || $1 ~ /^#/) {
+            # skip comments and empty lines
+            continue
+        } else if (NF != 1) {
+            err(1, "syntax error in " defaults_conf " line " lineno)
+        } else if (split($1, arr, /=/) == 2) {
+            # handle MIME type defaults
+            mimetype_default_apps[arr[1]] = arr[2]
+        } else if ($1 ~ /^!.+\.desktop$/) {
+            # handle preferred default applications
+            preferred_default_apps[substr($1, 2)] = substr($1, 2)
+        } else if ($1 ~ /^.+\.desktop$/) {
+            # handle regular default applications
+            default_apps[$1] = $1
+        } else {
+            err(1, "syntax error in " defaults_conf ", line " lineno)
+        }
+    }
+    close(defaults_conf)
+
+    # find all desktop files
+    for (i = split("XDG_DATA_DIRS" in ENVIRON ? ENVIRON["XDG_DATA_DIRS"] : \
+            "/usr/local/share:/usr/share", xdg_data_dirs, /:/); i > 0; i--) {
+        # XDG_DATA_DIRS is trusted here because it has been reset
+        cmd = "ls -1 -- \"" root xdg_data_dirs[i] "/applications/\"*.desktop " 
\
+                "2>/dev/null"
+        while ((cmd | getline desktopfile) > 0) {
+            l = split(desktopfile, arr, "/")
+            desktopfiles[arr[l]] = desktopfile
+        }
+        close(cmd)
+    }
+
+    # process all desktop files in alphabetical order
+    asorti2(desktopfiles, desktopfiles_keys)
+    for (i = 0; i in desktopfiles_keys; i++) {
+        # parse a desktop file
+        desktopfile = desktopfiles_keys[i]
+        delete_array(desktopfile_mimetypes)
+        delete_array(desktopfile_categories)
+        lineno = 0
+        in_desktop_entry = 0
+        while ((getline < desktopfiles[desktopfile]) > 0) {
+            lineno++
+            if (NF == 0 || $1 ~ /^#/) {
+                # skip comments and empty lines
+                continue
+            } else if (in_desktop_entry == 0 && \
+                    $0 ~ /^\[Desktop Entry\][\t ]*$/) {
+                # desktop entry group
+                in_desktop_entry = 1
+            } else if (in_desktop_entry == 1) {
+                if (in_desktop_entry == 1 && $1 ~ /^\[/) {
+                    # quit when a different group starts, "Desktop Entry" must
+                    # come first
+                    break
+                } else if ($0 ~ /^MimeType *=/ && split($0, arr, /=/) == 2) {
+                    # handle MimeTypes
+                    gsub(/(^ *|; *$)/, "", arr[2])
+                    split(arr[2], desktopfile_mimetypes, /;/)
+                } else if ($0 ~ /^Categories *=/ && split($0, arr, /=/) == 2) {
+                    # handle Categories
+                    gsub(/(^ *|; *$)/, "", arr[2])
+                    split(arr[2], desktopfile_categories, /;/)
+                } else if ($0 ~ /^[A-Za-z0-9\[\]@_-]+ *=/) {
+                    # skip other keys
+                    continue
+                }
+            } else {
+                warn("syntax error in " desktopfiles[desktopfile] ", line " \
+                        lineno)
+                break
+            }
+        }
+        close(desktopfiles[desktopfile])
+
+        # store the results
+        for (j = 1; j in desktopfile_mimetypes; j++) {
+            if (desktopfile_mimetypes[j] in mimetype_default_apps && \
+                    mimetype_default_apps[desktopfile_mimetypes[j]] == \
+                    desktopfile) {
+                mimetype_defaults[desktopfile_mimetypes[j]] = desktopfile
+            }
+            if (desktopfile in preferred_default_apps) {
+                preferred_defaults[desktopfile_mimetypes[j]] = desktopfile
+            }
+            if (desktopfile in default_apps) {
+                defaults[desktopfile_mimetypes[j]] = desktopfile
+            }
+            for (k = 1; k in desktopfile_categories; k++) {
+                mimetypes_categories[desktopfile_mimetypes[j], \
+                        desktopfile_categories[k]] = desktopfile
+            }
+            generic_mimetypes[desktopfile_mimetypes[j]] = desktopfile
+        }
+    }
+
+    # determine default mimetype handlers
+    for (mimetype in generic_mimetypes) {
+        if (mimetype in mimetype_defaults) {
+            defaults_list[mimetype] = mimetype_defaults[mimetype]
+        } else if (mimetype in preferred_defaults) {
+            defaults_list[mimetype] = preferred_defaults[mimetype]
+        } else if (mimetype in defaults) {
+            defaults_list[mimetype] = defaults[mimetype]
+        } else if ((desktopfile = \
+                find_preferred_category(mimetypes_categories, categories, \
+                mimetype)) != "") {
+            defaults_list[mimetype] = desktopfile
+        } else if (mimetype in generic_mimetypes) {
+            defaults_list[mimetype] = generic_mimetypes[mimetype]
+        }
+    }
+
+    print "# generated by SuSEconfig --module glib2 from " defaults_conf
+    print "[Default Applications]"
+    asorti2(defaults_list, defaults_list_keys)
+    for (i = 0; i in defaults_list_keys; i++) {
+        mimetype = defaults_list_keys[i]
+        printf("%s=%s\n", mimetype, defaults_list[mimetype])
+    }
+}
+' >$r/var/cache/gio-2.0/${desktop}-defaults.list
 done
-exec >&-


-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to