fuchsia代码管理

2023-12-19 10:32
文章标签 代码 管理 fuchsia

本文主要是介绍fuchsia代码管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

google官方讲述代码获取的说明文档路径如下:https://fuchsia.googlesource.com/docs/+/ea2fce2874556205204d3ef70c60e25074dc7ffd/development/source_code/README.md。使用如下以curl开始的命令组合,最后部分的layer可以指定为topaz、peridot和garnet,或者指定仅下载操作系统代码zircon。

$ curl -s "https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT" | base64 --decode | bash -s <layer>

为方便起见,此处不指定layer参数,下载全部的fuchsia代码。所需时间与网速有很大关系,没有做计算,我是晚上开始下载,第二天早起看已经下载完成。

$ curl -s "https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT" | base64 --decode | bash
~/fuchsia/.jiri_root/bin ~
cipd bootstrapped to path:"/home/kai/fuchsia/.jiri_root/bin/cipd"
~
Please add /home/kai/fuchsia/.jiri_root/bin to your PATHUpdating all projects
Done creating a Platform Source Tree at "/home/kai/fuchsia".
Recommended: export PATH="/home/kai/fuchsia/.jiri_root/bin:$PATH"

首先curl命令下载网址https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT中的文件,也可以在浏览器中输入此网址,通过浏览器进行下载,文件名为bootstrap.txt,其内容为base64编码。以下通过curl命令下载,内容打印在终端上(内容有省略):

$ curl  "https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT"  
IyEvYmluL2Jhc2gKIyBDb3B5cmlnaHQgMjAxNyBUaGUgRnVjaHNpYSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgojIFVzZSBvZiB0........
$ 

 

使用工具base64解码bootstrap.txt文件,解码之后为bash脚本文件,内容如下(省略了一些非关键内容)。由脚本中的注释可知,其将下载一个新的名称为bootstrap_jiri.txt的脚本,由新脚本完成fuchsia目录的创建,以及下载jiri工具到目录"fuchsia/.jiri_root/bin"中。jiri工具可同时管理多个git代码仓库,包括同步、代码恢复等功能,Fuchsia正是使用jiri管理其代码仓库。

关于bootstrap_jiri.txt脚本稍后介绍。

$ cat bootstrap.txt | base64 --decode
#!/bin/bash# The fetched script will
# - create "fuchsia" directory if it does not exist,
# - download "jiri" command to "fuchsia/.jiri_root/bin"
curl -s "https://fuchsia.googlesource.com/jiri/+/master/scripts/bootstrap_jiri?format=TEXT" | base64 --decode | bash -s fuchsia
cd fuchsia.jiri_root/bin/jiri import -name=integration flower https://fuchsia.googlesource.com/integration
.jiri_root/bin/jiri override fuchsia https://fuchsia.googlesource.com/fuchsia
.jiri_root/bin/jiri updateecho "Done creating a Platform Source Tree at \"$(pwd)\"."
echo "Recommended: export PATH=\"$(pwd)/.jiri_root/bin:\$PATH\""

 

之后,使用jiri命令在fuchsia目录下创建其manifest文件 .jiri_manifest。其内容如下。jiri update命令执行时,将同步manifest文件中指定的工程(代码仓库)。此处显式指定了一个工程project,名称为fuchsia,代码仓库地址为:"https://fuchsia.googlesource.com/fuchsia",并且其使用了overrides标签,意味着其将替换已有同名的工程,仅在根manifest文件中允许此标签。

~/fuchsia$ cat .jiri_manifest 
<manifest><imports><import manifest="flower" name="integration" remote="https://fuchsia.googlesource.com/integration"/></imports><overrides><project name="fuchsia" remote="https://fuchsia.googlesource.com/fuchsia"/></overrides>
</manifest>
~/fuchsia$ 

 

另外,在文件中引入了另外一个manifest文件,其仓库地址为"https://fuchsia.googlesource.com/integration",下载之后,内容如下:

~/fuchsia$ cat integration/flower 
<?xml version="1.0" encoding="UTF-8"?>
<manifest><imports><localimport file="minimal"/><localimport file="stem"/><localimport file="third_party/flower"/><localimport file="topaz/minimal"/><localimport file="topaz/third_party"/></imports><projects><project name="experiences"path="src/experiences"remote="https://fuchsia.googlesource.com/experiences"gerrithost="https://fuchsia-review.googlesource.com"revision="ceff64f9c1475b5d1ca028a05f638278913ae63a"/></projects>
</manifest>
~/fuchsia$ 

 

在此仓库中,有已下载的manifest文件:minimal、stem、third_party/flower、topaz/minimal和topaz/third_party。如下所以。由于manifest文件的嵌套,最终,会包含非常多的project(代码仓库)进来。
 

~/fuchsia$ ls integration/
flower  garnet  infra  jiri.lock  minimal  peridot  prebuilts  README.md  stem  third_party  topaz  zircon
~/fuchsia$ 

 

可使用如下的jiri project命令查看包含的工程情况。如下fuchsia总共包含有182个代码仓库。

~/fuchsia$ .jiri_root/bin/jiri project
* project canonical-json-goPath:     /home/kai/fuchsia/third_party/golibs/github.com/tent/canonical-json-goRemote:   https://fuchsia.googlesource.com/third_party/canonical-json-goRevision: 96e4ba3a7613a1216cbd1badca4efe382adea337Branches: none
* project cobaltPath:     /home/kai/fuchsia/third_party/cobaltRemote:   https://fuchsia.googlesource.com/cobaltRevision: 83d0db4528c0a36b14d54f34d7dbbd516c1184b0Branches: none...
~/fuchsia$
~/fuchsia$ .jiri_root/bin/jiri project | grep project | wc -l
182
~/fuchsia$ 

 


最后,运行jiri update命令,同步所有指定的代码仓库。


来看一下bootstrap_jiri.txt脚本的功能。如下curl命令获取其内容,使用base64工具解码。有文件注释可知,此脚本将创建fuchsia目录,以及其下子目录.jiri_root和.jiri_root/bin/jiri命令二进制执行文件。jiri自身的代码仓库位于地址:https://fuchsia.googlesource.com/jiri。

$ curl -s https://fuchsia.googlesource.com/jiri/+/master/scripts/bootstrap_jiri?format=TEXT | base64 --decode
$ 
#!/usr/bin/env bash# bootstrap_jiri initializes a root directory for jiri.  The following
# directories and files will be created:
#   <root_dir>                         - root directory (picked by user)
#   <root_dir>/.jiri_root              - root metadata directory
#   <root_dir>/.jiri_root/bin/jiri     - jiri binary
#
# The jiri sources are downloaded and built into a temp directory, which is
# always deleted when this script finishes.  The <root_dir> is deleted on any
# failure.set -euf -o pipefail# Jiri repo, from which we will download the jiri script wrapper.
readonly JIRI_REPO_URL="https://fuchsia.googlesource.com/jiri"# Google Storage bucket that contains prebuilt versions of jiri.
readonly GS_BUCKET_URL="https://fuchsia-build.storage.googleapis.com/jiri"

以下脚本内容,使用uname命令获取本机的ARCH处理器架构,由于使用的为intel处理器,uname -m命令的输出为x86_64,ARCH赋值为amd64。并且使用mkdir命令创建bin目录,由于指定了-p选项,连带的将根目录fuchsia和其子目录.jiri_root创建了出来。

readonly HOST_ARCH=$(uname -m)
if [ "$HOST_ARCH" == "aarch64" ]; thenreadonly ARCH="arm64"
elif [ "$HOST_ARCH" == "x86_64" ]; thenreadonly ARCH="amd64"
elseecho "Arch not supported: $HOST_ARCH"exit 1
fi# toabs converts the possibly relative argument into an absolute path.  Run in a
# subshell to avoid changing the caller's working directory.
toabs() (cd $(dirname $1)echo ${PWD}/$(basename $1)
)readonly ROOT_DIR="$(toabs $1)"
readonly BIN_DIR="${ROOT_DIR}/.jiri_root/bin"mkdir -p "${BIN_DIR}"

 

其中,由于使用的是Ubuntu系统,HOST_OS的值为linux,所以TARGET变量为linux-amd64。首先使用curl命令获取jiri代码仓库的最新提交commit ID版本号,但是随后并没有使用此版本号。之后使用curl获取jiri代码仓库的提交日志信息,此次将获取到一个版本号数组(每次提交commit将产生一个commit id版本)。最后,循环遍历VERSIONS数组中的每个版本号,与TARGET和GS_BUCKET_URL变量值(即预编译的jiri工具的保存路径)组合为一个URL,使用curl检查此url是否存在。存在的话,将jiri二进制文件下载到目录"${BIN_DIR}/jiri"中。

# Determine and validate the version of jiri.
readonly HOST_OS=$(uname | tr '[:upper:]' '[:lower:]')
readonly TARGET="${HOST_OS}-${ARCH}"
readonly COMMIT_URL="${JIRI_REPO_URL}/+refs/heads/master?format=JSON"
readonly LOG_URL="${JIRI_REPO_URL}/+log/refs/heads/master?format=JSON"
readonly VERSION=$(curl -sSf "${COMMIT_URL}" | sed -n 's/.*"value": "\([0-9a-f]\{40\}\)"/\1/p')
readonly VERSIONS=$(curl -sSf "${LOG_URL}" | sed -n 's/.*"commit": "\([0-9a-f]\{40\}\)".*/\1/p')JIRI_URL=""
for version in ${VERSIONS}; dourl="${GS_BUCKET_URL}/${TARGET}/${version}"if curl --output /dev/null --silent --head --fail "${url}"; then
100  5004    0  5004    0     0    574      0 --:--:--  0:00:08 --:--:--  1195
}"breakfi
doneif ! curl -sf -o "${BIN_DIR}/jiri" "${JIRI_URL}"; thenecho "Failed downloading prebuilt Jiri binary." 1>&2exit 1
fi
chmod 755 "${BIN_DIR}/jiri"

 

例如JIRI_URL=https://fuchsia-build.storage.googleapis.com/jiri/linux-amd64/e0c5efcc7081e09845f3f17944fceb6ff179b981。最后,使用命令jiri bootstrap cipd下载cipd二进制程序。

# Install cipd, which is frequently needed to use manifests.
pushd "${BIN_DIR}"
if ! "${BIN_DIR}/jiri" bootstrap cipd; thenecho "Running jiri bootstrap failed." 1>&2popdexit 1
fi
popdecho "Please add ${BIN_DIR} to your PATH"trap - EXIT
$ 

 

END

 

这篇关于fuchsia代码管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511853

相关文章

Java中有什么工具可以进行代码反编译详解

《Java中有什么工具可以进行代码反编译详解》:本文主要介绍Java中有什么工具可以进行代码反编译的相关资,料,包括JD-GUI、CFR、Procyon、Fernflower、Javap、Byte... 目录1.JD-GUI2.CFR3.Procyon Decompiler4.Fernflower5.Jav

javaScript在表单提交时获取表单数据的示例代码

《javaScript在表单提交时获取表单数据的示例代码》本文介绍了五种在JavaScript中获取表单数据的方法:使用FormData对象、手动提取表单数据、使用querySelector获取单个字... 方法 1:使用 FormData 对象FormData 是一个方便的内置对象,用于获取表单中的键值

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意