是否可以使用android repo工具将文件从一个存储库替换为另一个存储库?

时间:2018-05-07 09:21:00

标签: yocto repo

我使用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

文件已成功复制,但如果我将名称设置为我想要替换的文件,则不会。

3 个答案:

答案 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存储库)。 但这没有用。 将myfilerepository1作为myfile复制到repository1(另一个名称)是可行的。

我发现是多次运行repo init / sync命令时,我并没有以相同的顺序填充存储库。

所以基本上我的myfile2做了repository2填充时应该做的事情,但是那发生在 之前 <copyfile>被填充(即使它们在清单文件中的顺序正确)。 repository1只是带来了自己的repository2,覆盖了repository2复制的副本。

我的超级解决方案是使用两个myfile标签:一个在repository1中,将<copyfile>作为repository1复制到myfile中,另一个在{ {1}},将myfile2复制为repository2

您必须确保repository2始终填充在myfile2之前。 这一切都很奇怪,因为回购协议不能保证存储库的填充顺序。