我使用repo tool构建Yocto项目,使用的存储库是A,B,yocto ......,我需要将文件从A替换为B,结构类似于这样:
A/MyFile.sh
B/TheFile.sh
yocto/Some_dirs_and_files
所以,我使用这样的copyfile:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote fetch="mygitrepo" name="origin"/>
<default remote="origin"/>
<project name="yocto" revision="myrevision"/>
<project name="meta-openembedded" path="yocto/meta-openembedded" revision="myrevision"/>
<project name="B" path="yocto/B" revision="myrevision"/>
<project name="C" path="yocto/meta-swi-extras" revision="myrevision"/>
<project name="poky" path="yocto/poky" revision="myrevision"/>
<project name="A" path="yocto/custom-builds" revision="myrevision">
<copyfile src="MyFile.sh" dest="yocto/B/TheFile.sh"/>
</project>
</manifest>
问题是 copyfile 没有替换文件&#34; TheFile.sh&#34;使用&#34; MyFile.sh&#34;
有没有办法在没有额外脚本的情况下完成?
注意:如果我从
更改目的地名称dest="yocto/B/TheFile.sh
到
dest="yocto/B/AnotherFile.sh
文件已成功复制,但如果我将名称设置为我想要替换的文件,则不会。
答案 0 :(得分:1)
似乎repo现在允许覆盖文件<copyfile src=.. dest ...>
来自repo source code project.py
class _CopyFile(object): def __init__(self, src, dest, abssrc, absdest): self.src = src self.dest = dest self.abs_src = abssrc self.abs_dest = absdest def _Copy(self): src = self.abs_src dest = self.abs_dest # copy file if it does not exist or is out of date if not os.path.exists(dest) or not filecmp.cmp(src, dest): ※
※行显示进行文件复制的条件。
答案 1 :(得分:0)
价格低于您的代码
if not os.path.exists(dest) or not filecmp.cmp(src, dest):
try:
# remove existing file first, since it might be read-only
if os.path.exists(dest):
platform_utils.remove(dest)
else:
dest_dir = os.path.dirname(dest)
if not platform_utils.isdir(dest_dir):
os.makedirs(dest_dir)
shutil.copy(src, dest)
# make the file read-only
mode = os.stat(dest)[stat.ST_MODE]
mode = mode & ~(stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH)
os.chmod(dest, mode)
因此它可以代替...
答案 2 :(得分:0)
这个还在吗?
我碰巧遇到了同样的问题,想用repository2
的文件覆盖repository1
的文件,<copyfile>
到位以替换{{ 1}}和myfile
中的repository2
。我使用的是yocto发行版(有几层,作为git存储库)。
但这没有用。
将myfile
从repository1
作为myfile
复制到repository1
(另一个名称)是可行的。
我发现是多次运行repo init / sync命令时,我并没有以相同的顺序填充存储库。
所以基本上我的myfile2
做了repository2
填充时应该做的事情,但是那发生在 之前 <copyfile>
被填充(即使它们在清单文件中的顺序正确)。 repository1
只是带来了自己的repository2
,覆盖了repository2
复制的副本。
我的超级解决方案是使用两个myfile
标签:一个在repository1
中,将<copyfile>
作为repository1
复制到myfile
中,另一个在{ {1}},将myfile2
复制为repository2
。
您必须确保repository2
始终填充在myfile2
之前。
这一切都很奇怪,因为回购协议不能保证存储库的填充顺序。