Swift 的首次贡献¶
获取 Swift¶
Swift 的源代码托管在 github 上,并使用 git 进行管理。当前的主干可以像这样检出:
git clone https://github.com/openstack/swift.git
这将把 Swift 仓库克隆到您的账户下。
Swift 最新版本的源代码压缩包在 launchpad 项目页面 上可用。
提供适用于 Ubuntu 和 RHEL 变体的预构建软件包。
源代码控制设置¶
Swift 使用 git 进行源代码控制。OpenStack 开发者指南 描述了设置 Git 以及为 Swift 贡献代码所需的所有账户的步骤。
对 Swift 的修改¶
一旦您设置了源代码和源代码控制,就可以对 Swift 进行修改了。
测试¶
《开发指南》描述了在提交 Swift 代码之前所需的测试要求。
总而言之,您可以从 Swift 的主目录(您检出源代码的位置)执行 tox
tox
Tox 将呈现测试结果。请注意,在开始时,经常会违反许多编码风格指南。
向 Swift 提出更改¶
OpenStack 开发者指南 描述了您将需要的最常见的 git 命令。
以下是您首次向 Swift 贡献所需的命令列表
要克隆 Swift 的副本
git clone https://github.com/openstack/swift.git
在 swift 目录下,设置 Gerrit 仓库。以下命令配置仓库以了解 Gerrit 并安装 Change-Id 提交钩子。您只需要执行一次
git review -s
要创建您的开发分支(将 branch_name 替换为您选择的名称)
git checkout -b <branch_name>
要检查分支中已更新的文件
git status
要检查分支与仓库之间的差异
git diff
假设您没有添加新文件,您可以使用以下命令提交所有更改:
git commit -a
请阅读 Git 提交消息结构摘要,了解编写提交消息的最佳实践。准备好发送您的更改以供审核时,请使用
git review
如果成功,Git 响应消息将包含您可以用来跟踪您的更改的 URL。
如果您需要对同一审核进行进一步的更改,可以使用以下命令提交它们:
git commit -a --amend
这将使用您之前发出的相同更改集提交更改。请注意,为了发送您的最新版本以供审核,您仍然需要调用
git review
跟踪您的更改¶
在向 Swift 提出更改后,您可以在 https://review.opendev.org 上跟踪它们。登录后,您将看到“待处理的审核”仪表板,其中包含您提出的更改,“传入的审核”仪表板,其中包含您正在审核的更改,以及“最近关闭”仪表板,其中包含您作为审核员或所有者参与的更改。
重新基于后的说明¶
重新基于后,应执行以下步骤以重建 Swift 安装。请注意,这些命令应从 Swift 仓库的根目录执行(例如 $HOME/swift/)
sudo python setup.py develop
sudo pip install -r test-requirements.txt
如果使用 TOX,根据重新基于期间的更改,您可能需要重建 TOX 环境(通常,如果 test-requirements.txt 已更新,以至于需要软件包的新版本,则会发生这种情况),可以使用 TOX cli 的 -r 参数来完成此操作
tox -r
您可以包含任何其他 TOX 参数,例如,要运行 pep8 套件并重建 TOX 环境,可以使用以下命令:
tox -r -e pep8
仅需要为特定构建(例如,pep8)指定重建选项一次,即同一构建的进一步调用不需要这样做,直到下一次重新基于为止。
故障排除¶
如果您使用以下命令重新基于提交,则在启动 Swift 时可能会遇到以下错误:
git rebase
Traceback (most recent call last):
File "/usr/local/bin/swift-init", line 5, in <module>
from pkg_resources import require
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2749, in <module>
working_set = WorkingSet._build_master()
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 446, in _build_master
return cls._build_from_requirements(__requires__)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 459, in _build_from_requirements
dists = ws.resolve(reqs, Environment())
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 628, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: swift==2.3.1.devXXX
(其中 XXX 代表 Swift 的开发版本)。
Traceback (most recent call last):
File "/usr/local/bin/swift-proxy-server", line 10, in <module>
execfile(__file__)
File "/home/swift/swift/bin/swift-proxy-server", line 23, in <module>
sys.exit(run_wsgi(conf_file, 'proxy-server', **options))
File "/home/swift/swift/swift/common/wsgi.py", line 888, in run_wsgi
loadapp(conf_path, global_conf=global_conf)
File "/home/swift/swift/swift/common/wsgi.py", line 390, in loadapp
func(PipelineWrapper(ctx))
File "/home/swift/swift/swift/proxy/server.py", line 602, in modify_wsgi_pipeline
ctx = pipe.create_filter(filter_name)
File "/home/swift/swift/swift/common/wsgi.py", line 329, in create_filter
global_conf=self.context.global_conf)
File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 296, in loadcontext
global_conf=global_conf)
File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 328, in _loadegg
return loader.get_context(object_type, name, global_conf)
File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 620, in get_context
object_type, name=name)
File "/usr/lib/python2.7/dist-packages/paste/deploy/loadwsgi.py", line 659, in find_egg_entry_point
for prot in protocol_options] or '(no entry points)'))))
LookupError: Entry point 'versioned_writes' not found in egg 'swift' (dir: /home/swift/swift; protocols: paste.filter_factory, paste.filter_app_factory; entry_points: )
这是因为 git rebase 将检索开发流中不同版本的 Swift 的代码,但 /usr/local/bin 下的启动脚本尚未更新。解决方案是按照 重新基于后的说明 部分中描述的步骤进行操作。