diff --git a/script/embedded/compile/build.sh b/script/embedded/compile/build.sh index d9aafbef156cb66039afd47e9c153f14bc8e2b3d..f2d9cdf64d3435de69ddc534bd6a06b8237af0fc 100755 --- a/script/embedded/compile/build.sh +++ b/script/embedded/compile/build.sh @@ -115,6 +115,9 @@ rm -rf * ln -sf ../"${datetime}" "${datetime}" popd popd +if [ ! -f "${SRC_DIR}/manifest.xml" ]; then + python3 {SCRIPTS_DIR}/manifest.py ${SRC_DIR} +fi cp -a "${SRC_DIR}"/manifest.xml "${TOP_OUTPUT_DIR}/${datetime}/source-list/" create_checksum_for_release "${TOP_OUTPUT_DIR}/${datetime}" echo "INFO: ALL successfully!" diff --git a/script/embedded/compile/manifest.py b/script/embedded/compile/manifest.py new file mode 100644 index 0000000000000000000000000000000000000000..77b623f8dff7f0f95b8bda78b90850f243c2a696 --- /dev/null +++ b/script/embedded/compile/manifest.py @@ -0,0 +1,80 @@ +import os +import sys + +import git + +class Manifest(object): + + @staticmethod + def get_repo_param(repo_dir : str): + try: + repo = git.Repo(repo_dir) + except: + return None + + path = dir + remote = repo.remote() + repoName = remote.url.replace("https://gitee.com/", "") + revision = repo.head.commit + if "src-openeuler" in remote.url: + group = "src-openeuler" + else: + group = "openeuler" + + try: + branch = repo.active_branch.name + except TypeError: + for tag in repo.tags: + if tag.commit == repo.head.commit: + branch = tag.name + break + except Exception as e: + return None + + return { + 'repo_name': repoName, + 'path': path, + 'revision': revision, + 'group': group, + 'branch': branch + } + + def exec(self, src_dir): + if os.path.exists(os.path.join(src_dir, 'manifest.xml')): + os.remove(os.path.join(src_dir, 'manifest.xml')) + + os.mknod(os.path.join(src_dir, 'manifest.xml')) + + yocto = self.get_repo_param(repo_dir = os.path.join(src_dir, 'yocto-meta-openeuler')) + if yocto == None: + raise("there is no yocto-meta-openeuler") + + with open(os.path.join(src_dir, 'manifest.xml'), 'a+') as f: + f.write('\n') + f.write('\n') + f.write(' \n') + f.write(' \n'.format(yocto["branch"])) + + dirList = os.listdir(src_dir) + for dir in dirList: + if dir == "yocto-meta-openeuler": + continue + repoParam = self.get_repo_param(repo_dir = os.path.join(src_dir, dir)) + if repoParam == None: + continue + wline = " ".format(repoParam['repo_name'], repoParam['path'], repoParam['revision'], repoParam['group'], repoParam['branch']) + f.write(wline+"\n") + + wline = " ".format(yocto['repo_name'], yocto['path'], yocto['revision'], yocto['group'], yocto['branch']) + f.write("") + +def main(): + if sys.argv[1:2] == "": + raise("please entry src directory") + + manifest = Manifest() + manifest.exec(src_dir = sys.argv[1:2]) + print("manifest create successful in {}".format(sys.argv[1:2])) + +if __name__ == "__main__": + main() \ No newline at end of file