我正在尝试建立舒适启动板中的有声读物。
我已经从 GitHub 导入了源分支 (master),并且有一个包含目录的不同分支 (deb-packaging-juno) debian/
。 master 分支没有debian
目录。我想在构建期间将debian/
目录从deb-packaging-juno
分支复制到分支中。master
我创建了以下内容包装配方。
# git-build-recipe format 0.4 deb-version {debupstream}-0~{revtime}
lp:cozy master
nest-part deb-packaging-juno lp:cozy debian debian master
但该包在 Launchpad 中构建失败,出现以下构建错误。以下是完整的构建日志。
Traceback (most recent call last):
File "/usr/bin/git-build-recipe", line 11, in <module>
load_entry_point('git-build-recipe==0.1', 'console_scripts', 'git-build-recipe')()
File "/usr/lib/python3/dist-packages/gitbuildrecipe/main.py", line 110, in main
build_tree(base_branch, working_directory)
File "/usr/lib/python3/dist-packages/gitbuildrecipe/recipe.py", line 489, in build_tree
_build_inner_tree(base_branch, target_path)
File "/usr/lib/python3/dist-packages/gitbuildrecipe/recipe.py", line 413, in _build_inner_tree
instruction.apply(target_path)
File "/usr/lib/python3/dist-packages/gitbuildrecipe/recipe.py", line 567, in apply
target_subdir=self.target_subdir)
File "/usr/lib/python3/dist-packages/gitbuildrecipe/recipe.py", line 400, in nest_part_branch
child_branch.commit + ":" + subpath)
File "/usr/lib/python3/dist-packages/gitbuildrecipe/recipe.py", line 662, in git_call
**kwargs)
File "/usr/lib/python3.6/subprocess.py", line 356, in check_output
**kwargs).stdout
File "/usr/lib/python3.6/subprocess.py", line 438, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['git', '-C', '/home/buildd/build-RECIPEBRANCHBUILD-2811196/chroot-autobuild/home/buildd/work/tree/recipe', 'read-tree', '--prefix', 'debian', '-u', '574660454b66b1c1fd22e72c0ac2d1041e0a4b4d:debian']' returned non-zero exit status 128.
RUN: /usr/share/launchpad-buildd/bin/in-target scan-for-processes --backend=chroot --series=hirsute --arch=amd64 RECIPEBRANCHBUILD-2811196
Scanning for processes to kill in build RECIPEBRANCHBUILD-2811196
我的包装配方有什么错误?如何修复?
答案1
错误在于您在该nest-part
行中使用了错误的分支名称。(第一个参数nest-part
是可用于在替换变量中引用配方的该部分的名称,而不是 Git 分支名称。)虽然错误消息并不是最清晰的,但您可以通过查看构建日志中的此行来发现它:
fatal: Not a valid object name 574660454b66b1c1fd22e72c0ac2d1041e0a4b4d:debian
574660454b66b1c1fd22e72c0ac2d1041e0a4b4d
是分支上的当前提交,并且该错误消息准确地表明,该提交引用的树中master
没有目录。debian
您应该编写以下内容,当我在本地测试时,它似乎按预期工作:
# git-build-recipe format 0.4 deb-version {debupstream}-1~{revtime}
lp:cozy master
nest-part deb-packaging-juno lp:cozy debian debian deb-packaging-juno
或者您可能希望对第一个参数使用不同的名称以nest-part
减少混淆:
# git-build-recipe format 0.4 deb-version {debupstream}-1~{revtime}
lp:cozy master
nest-part packaging lp:cozy debian debian deb-packaging-juno
答案2
虽然我无法通过这种方式复制 debian 目录,但我找到了另一种方法,将分支合并到 master 中。
当前deb-packaging-juno
目录无法合并到master,因为它们来自同一个基础,并且存在合并冲突(但这可能与问题中提到的复制目录失败无关)。
我创建了一个名为包含 debian 目录的新孤立分支(这样就不会有共同的历史记录) deb-dir
,并且我能够使用以下命令将其复制到 master 中。
# git-build-recipe format 0.4 deb-version {debupstream}-0~{revtime}
lp:cozy master
merge deb-dir lp:cozy deb-dir