Yocto 是否可以使用android repo工具将文件从一个存储库替换到另一个存储库?
我正在使用来构建一个Yocto项目,使用的存储库是a,B,Yocto…,我需要将文件从a替换为B,结构如下:Yocto 是否可以使用android repo工具将文件从一个存储库替换到另一个存储库?,yocto,repo,Yocto,Repo,我正在使用来构建一个Yocto项目,使用的存储库是a,B,Yocto…,我需要将文件从a替换为B,结构如下: A/MyFile.sh B/TheFile.sh yocto/Some_dirs_and_files <?xml version="1.0" encoding="UTF-8"?> <manifest> <remote fetch="mygitrepo" name="origin"/> <default remote="origin"
A/MyFile.sh
B/TheFile.sh
yocto/Some_dirs_and_files
<?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如下所示:
A/MyFile.sh
B/TheFile.sh
yocto/Some_dirs_and_files
<?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>
到
该文件已成功复制,但如果我将名称设置为要替换的文件,则该文件不会被替换。看来repo现在允许通过
覆盖该文件
回购协议
类_复制文件(对象):
定义初始化(self、src、dest、abssrc、absdest):
self.src=src
self.dest=dest
self.abs\u src=abssrc
self.abs\u dest=absdest
def_副本(自身):
src=self.abs\u src
dest=self.abs\u dest
#如果文件不存在或已过期,请复制该文件
如果操作系统路径不存在(dest)或文件cmp.cmp不存在(src,dest):※
※行显示进行文件复制的条件。图片下方的代码
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)
这样它就可以取代…这个还开着吗?
我碰巧遇到了同样的问题,想用repository1
中的文件覆盖repository2
中的文件,
将repository2
中的myfile
替换为repository1
中的myfile
。我使用的是yocto发行版(有几个层,作为git存储库)。
但它没有起作用。
将myfile
从repository1
复制为myfile2
到repository2
(另一个名称)起作用
我发现,多次运行repoinit/sync命令后,并没有按照相同的顺序填充repo
所以基本上我的
做了当repository1
被填充时应该做的事情,但这发生在repository2
被填充之前(即使它们在清单文件中的顺序正确)。而repository2
只是带来了自己的myfile
,覆盖了repository1
复制的文件
我的超级解决方案是使用两个
标签:一个在repository1
中,将myfile
作为myfile2
复制到repository2
,另一个在repository2
中,将myfile2
作为myfile
复制
您必须确保repository1
始终在repository2
之前填充。
这一切都很奇怪,因为回购协议不能保证回购协议的填充顺序。看起来您试图以正确的方式进行操作。I为
copyfile
添加任何附加选项。因此,在我看来,要找到答案,你应该深入研究回购协议的源代码。一般来说,我会用回购协议来解决这类问题。您可以尝试使用符号链接linkfile
?
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)