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
: