openSUSE:KDE UpdatedApps 仓库

跳转到:导航搜索

KDE:UpdatedApps 仓库包含 openSUSE 发行版中发布的最新 KDE 应用程序版本。这些软件包不需要使用最新的 KDE 平台版本。换句话说,它提供了来自 openSUSE Factory 的应用程序,可以直接在所有支持的 openSUSE 发行版上使用。它仅包含软件的稳定版本。

维护仓库

该仓库包含来自 KDE:Distro:Factory 的所有应用程序。它不包含任何来自 KDE SC 的软件包,也不包含较新的库版本。库的两个例外是目标发行版中根本不存在且应用程序需要的库,以及作为应用程序一部分的库。

从技术上讲,所有软件包都只是指向 KDE:Distro:Factory 中对应软件包的链接。为了避免无意中引入例如 beta 版本,这些链接始终指向特定的修订版本,并手动更新(使用 'osc setlinkrev')。如果需要对任何软件包进行修改,最好直接在 KDE:Distro:Factory 中进行。如果需要,可以使用 %{kde_updatedapps} 宏来检测在 KDE:UpdatedApps 中构建。

如果 KDE:Distro:Factory 目前由于即将发布的 openSUSE 版本而冻结,则可以在 KDE:UpdatedApps 中提供较新版本的应用程序。在这种情况下,KDE:UpdatedApps 中的软件包将暂时不仅仅是到 KDE:Distro:Factory 的链接,而是根据需要进行修改。

维护软件包

创建

如果软件包尚未存在于 UpdatedApps 中

$ osc linkpac KDE:Distro:Factory amarok KDE:UpdatedApps

更新

从 KDE:Distro:Factory 找到适合 UpdatedApps 的最新版本

$ osc log KDE:Distro:Factory amarok | less
----------------------------------------------------------------------------
r71 | llunak | 2010-06-27 16:30:59 | 96c695de89e70ea905c55438b1b8f2b0 | unknown | sr

Enable ksuseinstall support again everywhere, if this is because of backports,
that has to be done differently.
----------------------------------------------------------------------------
r70 | llunak | 2010-06-27 13:51:42 | 1eda34990378d06f8bf8a9d663382d8c | unknown | sr42095
...

如果 KDE:Distro:Factory 的当前版本适合(例如,它不是 beta 版本),则可以使用当前修订版本(此处为 r71)

osc setlinkrev -r 71 KDE:UpdatedApps amarok

如果需要较旧的版本,则需要检查 osc log 以获取该版本。

修复

由于 KDE:Distro:Factory 和稳定的 openSUSE 发行版之间的差异,某些软件包可能无法在 KDE:UpdatedApps 中构建(最常见的是新软件包在旧版本中不存在或太旧)。例如,如果 libksuseinstall-devel 软件包仅在 KDE:Distro:Factory 和 11.3 中可用,则需要如下修改需要它的 .spec 文件,以便仅在足够版本的 openSUSE 上使用或在 KDE:UpdatedApps 中不构建

%if %suse_version > 1120 || !0%{?kde_updatedapps}                                                                                         
BuildRequires:  libksuseinstall-devel                                                                                                     
%endif                                                                                                                                    

这些更改最好提交到 KDE:Distro:Factory,而不是在 KDE:UpdatedApps 中本地修改。

如果很难为较旧的发行版构建软件包,则可以简单地禁用在旧版本上构建它,直到有人认为修复该问题值得付出努力。

构建依赖

如果满足以下条件,则允许将构建依赖项添加到 KDE:UpdatedApps

  • 新软件包在目标发行版中根本不存在
  • 如果可以将构建依赖项视为与软件包密切相关(例如,amarok 的 taglib-extras)
  • 如果在 opensuse-kde 邮件列表中经过讨论后获得例外

否则,不允许添加已经存在的通用依赖项的较新版本。

在添加构建依赖项的情况下,将构建默认值('all')设置为禁用,并仅为相关发行版显式启用构建(随着时间的推移,如果它在所有地方都被禁用,那么可以明显地删除它)。

对于未在 KDE:Distro:Factory 中维护,而是在其他地方的软件包,链接需要指向 openSUSE:<version>:Update 仓库,而不是任何开发仓库。在启用这些软件包的构建时,必须确保使用的版本不比将在其使用的 openSUSE 发行版提供的版本旧。

对于其他地方不存在的软件包(例如,软件包是随 KDE SC 发布的库的副本),该软件包不应是链接,而应是完整的软件包副本。

检查

以下脚本检查仓库的状态,主要检查是否需要(可能)更新到较新的修订版本以及常见问题。

osc ls KDE:UpdatedApps | ( while read pack; do
    projline=`osc cat KDE:UpdatedApps $pack _link | grep 'project="'`
    if test -z "$projline"; then
        echo Package $pack is not a link
        continue
    fi
    proj=`echo $projline | sed 's/.*project="\([^"]*\)".*/\1/'`
    if ! test "$proj" = "KDE:Distro:Factory"; then
        echo "$proj" | grep -q '^openSUSE:[^:]*:Update$'
        if test $? -ne 0; then
            echo Package $pack links to project $proj
            continue
        fi
# TODO check that it doesn't provide an older version for a newer distribution
        osc meta pkg KDE:UpdatedApps $pack |
            (
            inbuild=
            disabled=
            while read line; do
                echo "$line" | grep -q '<build>' && inbuild=1
                echo "$line" | grep -q '</build>' && inbuild=
                if test -n "$inbuild"; then
                    echo "$line" | grep -q '<disable/>' && disabled=1
                fi
            done
            if test -z "$disabled"; then
                echo Package $pack does not link KDE:Distro:Factory and is not disabled by default
            fi
            )
        continue
    fi
    rev=`echo $projline | sed 's/.*rev="\(.*\)".*/\1/'`
    if test -z "$rev"; then
        echo Package $pack does not have a revision set
    else
        origrev=`osc log KDE:Distro:Factory $pack | head -2 | tail -1 | sed 's/^r\([^ ]*\).*/\1/'`
        if ! test "$rev" = "$origrev"; then
            echo Package $pack does not link the latest revision : $rev vs $origrev
        fi
    fi
done )