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通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Java实现自定义table宽高的示例代码

《Java实现自定义table宽高的示例代码》在桌面应用、管理系统乃至报表工具中,表格(JTable)作为最常用的数据展示组件,不仅承载对数据的增删改查,还需要配合布局与视觉需求,而JavaSwing... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部