openSUSE:Build Service Concept OscProjPack

跳转到:导航搜索

osc PROJ/PACK

这是一个关于更易于使用 osc 命令行处理的特性建议。许多命令需要指定项目和/或包名称。

目前的情况对于以下原因来说并不令人满意

  • 不一致的默认值。某些 osc 子命令可以在运行于检出树内部时,从当前目录获取项目和/或包名称。如果项目和包都可以使用此默认值,或者只有其中一个可以使用,以及如果只有一个,那么是哪个,取决于命令。用户很难记住哪个是哪个。
  • 命令行需要大量的输入(尤其是在分支项目的情况下),因此命令输入起来很繁琐。用户需要输入可以从当前工作目录派生的信息。
  • 在大多数情况下,可以使用 PRJ/PKG 代替 PRJ PKG,这为允许从 pwd 输出复制和粘贴提供了便利。
  • Osc 开发者试图为每个单独的子命令调整默认值和 PRJ PKG 参数的位置。

截至 osc 版本 0.123 的示例

      osc maintainer PRJ [PKG]
        - does not look in the current directory.
        - need at least PRJ.
      osc list [PRJ [PKG]]
        - Never looks at the current directory.
        - lists all projects, if run without parameters. 
      osc checkout [PRJ] PKG
      osc checkout PRJ
        - takes project from current directory, if inside a checkout tree
        - else operates on an entire project.
      osc checkin [ARG]
        - defaults to current project and package, 
        - if arg is a subdirectory, project is taken from current directory
        - if arg is a file, both project and package are taken from current
          directory.
      osc results [PRJ PKG]
        - takes either both or none from current directory.



建议的解决方案

与其以特定于子命令的方式调整(可能可选的)位置参数,不如建议随着时间的推移弃用这种语法,而采用另一种语法

 osc CMD ... [--prj PRJ] [--pkg PKG] ...
 osc CMD ... [--proj PRJ] [--pack PKG] ...
 osc CMD ... [--project PRJ] [--package PKG] ...

这六个选项是 osc 的新选项,目前没有现有的命令使用它们。因此,新的语法与旧的语法没有冲突,两者可以并行使用。

  • --prj, --proj, --project 是同义词。
  • --pkg, --pack, --package 是同义词。

Osc 还应支持别名,以节省输入。某些隐式别名应存在,并具有明确定义的魔术效果。别名替换是字面上的。它们可以替换包含其参数的选项,或者只替换选项,或者只替换参数。

-      (a dash) expands to --prj openSUSE:Factory 
       (or --prj followed by any other project as defined in 
       ~/.oscrc:default_project )
       --prj -         is synonymous to just -, for consistency.
.      (a dot) evaluates the current working directory, searching for
       .osc/_apiurl, .osc/_project, and .osc/_package 
       Implicit --apiurl, --prj, or --pkg options are constructed as far
       as available from the current directory and as far as not already 
       present in the command line. 
       If a dot is used as parameter to an option, it has a more 
       deterministic meaning.
       --apiurl .      Substitute only the current apiurl,
       --prj .         Substitute the current project name, and provides 
                       a default for --apiurl unless given.
       --pkg .         Substitures current package name likewise.
./.    expands to --prj . --pkg .
./PKG  expands to --prj . --pkg PKG

除非在线帮助中另有说明,否则魔术别名仅尝试在每个命令行一次,并且仅适用于各自的选项。例如,osc ci -m - 将使用一个简单的 '-' 作为检查消息,并且缺少任何项目或包将默认为当前项目或包,就像 osc ci . -m - 一样。

此外,用户定义的别名可以添加到 ~/.oscrc 如果别名扩展对命令行有影响,则扩展后的行将作为调试输出打印。

osc 命令的在线帮助应参考上述语法,如下所示

       osc CMD ... PROJ/PACK

一个额外的帮助条目

       osc help 'PROJ/PACK' 

应解释如本文档中所述的相关细节。



预览

建议功能的预览可在 build service 项目 home:jnweiger osc.jw 中找到


问题

这与可以在所有地方与本地和远程实例一起使用的命令如何工作?例如 linkpac(或者将来可能更好,以便它也可以用于项目)。它几乎可以在所有组合中将本地或远程项目或包作为源或目标。我认为这在所有情况下都不会成立,对吗?

关于使用 /(或只是 .)作为本地引用,例如使用百分号作为远程实例,您怎么看?

示例

osc link /work_dir/project/package home:adrianSuSE%
osc link -%glibc /work_dir/project/meine.glibc           # creates a _link locally to remote openSUSE:Factory glibc package.
osc link openSUSE:11% home:adrianSuSE:my11.1%              # creates a project link (not yet supported, but comming), pure server side operation
osc link /work_dir/project/package /work_dir/project2/package2  # pure local link of a package